এই কোডগুলির মধ্যে কোনটি দ্রুত হবে?
$temp = $_REQUEST['s'];
অথবা
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
এই কোডগুলির মধ্যে কোনটি দ্রুত হবে?
$temp = $_REQUEST['s'];
অথবা
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
উত্তর:
$_REQUEST
, ডিফল্টরূপে, বিষয়বস্তু রয়েছে $_GET
, $_POST
এবং $_COOKIE
।
তবে এটি কেবলমাত্র একটি ডিফল্ট, যা নির্ভর করে variables_order
; এবং আপনি কুকিজ নিয়ে কাজ করতে চান তা নিশ্চিত নয়।
আমার যদি চয়ন করতে হয় তবে আমি সম্ভবত ব্যবহার করতাম না $_REQUEST
এবং আমি বেছে নেব $_GET
বা $_POST
- আমার অ্যাপ্লিকেশনটি কী করা উচিত তার উপর নির্ভর করে (যেমন একটি বা অন্যটি নয়, তবে উভয়ই নয়) : সাধারণত বলছেন:
$_GET
যখন কেউ আপনার অ্যাপ্লিকেশন থেকে ডেটা অনুরোধ করছে তখন আপনার ব্যবহার করা উচিত ।$_POST
যখন কেউ ঠেলাঠেলি হয় (ঢোকাতে বা বের আপডেট অথবা মোছা) তথ্য থেকে আপনার আবেদন।যেভাবেই হোক, পারফরম্যান্স সম্পর্কে খুব একটা পার্থক্য থাকবে না: আপনার স্ক্রিপ্টের বাকী অংশ কী করবে তার তুলনায় পার্থক্যটি নগণ্য হবে।
বনাম পোষ্ট পান
1) GET এবং পোস্ট উভয়ই একটি অ্যারে তৈরি করে (যেমন অ্যারে (কী => মান, কী 2 => মান 2, কী 3 => মান 3, ...))। এই অ্যারেটিতে কী / মান জুটি রয়েছে, যেখানে কীগুলি ফর্ম নিয়ন্ত্রণের নাম এবং মানগুলি ব্যবহারকারীর ইনপুট ডেটা।
2) GET এবং POST উভয়কেই $ _GET এবং $ _POST হিসাবে বিবেচনা করা হয়। এগুলি সুপারগ্লোবালস, যার অর্থ তারা যে কোনও সুযোগ ছাড়াই সর্বদা অ্যাক্সেসযোগ্য - এবং আপনি কোনও বিশেষ কাজ না করে কোনও ফাংশন, শ্রেণি বা ফাইল থেকে এগুলি অ্যাক্সেস করতে পারেন।
3) $ _GET ইউআরএল প্যারামিটারগুলির মাধ্যমে বর্তমান স্ক্রিপ্টে স্থানান্তরিত একটি চলকগুলির অ্যারে ray
4) script _POST হল HTTP পোস্ট পদ্ধতির মাধ্যমে বর্তমান স্ক্রিপ্টে ভেরিয়েবলগুলির একটি অ্যারে।
জিইটি কখন ব্যবহার করবেন?
জিইটি পদ্ধতিতে ফর্ম থেকে প্রেরিত তথ্য সকলের কাছে দৃশ্যমান (সমস্ত পরিবর্তনশীল নাম এবং মানগুলি ইউআরএলে প্রদর্শিত হয়)। জিইটি-তে তথ্য প্রেরণের পরিমাণেরও সীমা রয়েছে। সীমাবদ্ধতা প্রায় 2000 টি অক্ষর। তবে ভেরিয়েবলগুলি ইউআরএলে প্রদর্শিত হওয়ায় পৃষ্ঠাটি বুকমার্ক করা সম্ভব। এটি কিছু ক্ষেত্রে কার্যকর হতে পারে।
সংবেদনশীল ডেটা প্রেরণের জন্য জিইটি ব্যবহার করা যেতে পারে।
দ্রষ্টব্য: পাসওয়ার্ড বা অন্যান্য সংবেদনশীল তথ্য প্রেরণের জন্য কখনও ব্যবহার করা উচিত নয়!
পোষ্ট কখন ব্যবহার করবেন?
পোষ্ট পদ্ধতির সাথে একটি ফর্ম থেকে প্রেরণ করা তথ্য অন্যের কাছে অদৃশ্য (সমস্ত নাম / মানগুলি HTTP অনুরোধের মূল অংশে এম্বেড করা থাকে) এবং প্রেরণের তথ্যের পরিমাণের কোনও সীমা নেই।
এছাড়াও পোষ্ট সার্ভারে ফাইলগুলি আপলোড করার সময় মাল্টি-পার্ট বাইনারি ইনপুট সমর্থন হিসাবে উন্নত কার্যকারিতা সমর্থন করে।
তবে, ভেরিয়েবলগুলি ইউআরএলে প্রদর্শিত না হওয়ায় পৃষ্ঠাটি বুকমার্ক করা সম্ভব নয়।
$ _GET ক্যোরিস্ট্রিং বা আপনার ইউআরএল থেকে ভেরিয়েবলগুলি পুনরুদ্ধার করে>
Generally _POST একটি POST পদ্ধতি থেকে (সাধারণত) ফর্মগুলি থেকে ভেরিয়েবলগুলি পুনরুদ্ধার করে।
$ _REQUEST হ'ল $ _GET এবং $ _POST এর একত্রীকরণ যেখানে $ _POST ওভাররাইড করে। _GET। বৈধতার জন্য স্ব-প্রতিশোধমূলক ফর্মগুলিতে $ _REQQUEST ব্যবহার করা ভাল।
GET
ক্যোয়ারী স্ট্রিং POST
থেকে, ফর্ম জমা দেওয়া থেকে)।
আমি ব্যবহার $_POST
এবং $_GET
স্পষ্টভাবে পরামর্শ দিতে চাই ।
Site _REQUEST ব্যবহার করা যাই হোক না কেন যথাযথ সাইটের ডিজাইনের সাথে অপ্রয়োজনীয় হওয়া উচিত এবং এটি CSRF/XSS
ইউআরএল-এ ডেটা সংরক্ষণ করে আসা সহজ আক্রমণ এবং অন্যান্য বোকামির জন্য আপনাকে উন্মুক্ত রেখে দেওয়ার মতো কিছু উত্সাহ সহ ।
গতির পার্থক্য যে কোনও উপায়ে ন্যূনতম হওয়া উচিত।
অনুরোধটি ব্যবহার করুন। কেউ এ জাতীয় সাধারণ অপারেশনের গতি সম্পর্কে চিন্তা করে না এবং এটি বেশ ক্লিনার কোড।
$_REQUEST
করা ভুল উপসংহার। আমার উত্তর দেখুন।
চিন্তা করবেন না। তবে আপনার এখনও দ্বিতীয় সমাধানটি ব্যবহার করা উচিত (প্লাস বিদ্যমান কোনও ভেরিয়েবলগুলির মধ্যে একটির জন্য অতিরিক্ত চেক), কারণ এখানে সুরক্ষা সমস্যা রয়েছে $_REQUEST
(যেহেতু $_GET
এবং $_POST
সেই অ্যারের একমাত্র উত্স নয়)।
$_REQUEST
গতকাল নিয়ে সমস্যাগুলি সম্পর্কে একটি পোস্ট ছিল , আমি বিশ্বাস করি। আমাকে এটি খুঁজে দিন।
সম্পাদনা : ওহ ভাল, সরাসরি কোনও পোস্ট নয়, তবে এখানে এটি যাইহোক: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
এটি ব্যবহার করুন কারণ এটি নিরাপদ এবং এটি লক্ষণীয় গতির পার্থক্য তৈরি করবে না
$_REQUEST
তবে এখনও একই স্ক্রিপ্টটি যে কোনও উপায়ে অ্যাক্সেস করার অনুমতি দেয় (আমার ক্ষেত্রে একই স্ক্রিপ্টটি বিভিন্ন 'ক্রিয়া' সহ ব্যবহৃত হয় এবং কিছু সময় $ _গেট ঠিক আছে, তবে অন্য সময় আমার প্রয়োজন need ডেটা আড়াল / সুরক্ষিত করতে _POST)।
হ্যাকার এমন একটি কুকি সেট করতে পারে যা একটি ie _POST বা $ _GET মানকে ওভাররাইড করে as আপনি যদি সংবেদনশীল ডেটা পরিচালনা করেন তবে আমি _RE _REQUEST ব্যবহার করার পরামর্শ দেব না। - জ্যান্ডোর
আপনি কিছু ক্ষেত্রে $_GET
বিকল্প ব্যবহার করা যাবে না $_POST
।
কখন ??
GET
তথ্য প্রেরণের পরিমাণেরও সীমাবদ্ধতা রয়েছে। সীমাবদ্ধতা প্রায় 2000 টি অক্ষর।
আপনি যখন কোনও ডেটা ব্যবহার করে পুনরুদ্ধার করতে পারবেন না তখন এমন কিছু ঘটনা ঘটে $_POST
কখন ?
বিশ্রাম পরিষেবা জন্য
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
ব্যবহার করার মতো কিছু নেই $_REQUEST
।
তবে এটি করার উপায় হ'ল $ _SERVER ['REQUEST_METHOD'] স্পষ্টভাবে চেক করা, কোনও জিইটি-র জন্য খালি থাকার উপর নির্ভর করে না।
$_SERVER['REQUEST_METHOD']
স্ক্রিপ্টটি যে কোনও একটি দিয়ে কল করা হবে কিনা তা যাচাই করতে ব্যবহার করার জন্য ভাল পরামর্শ । তবে কিছুই বলে ভুল বলা $_REQUEST
100% সত্য নয়। হ্যাকার একটি কুকি সেট করতে পারে এমন একটি সুরক্ষা সম্পর্কিত সমস্যা রয়েছে যা একটি $ _POST বা $ _GET মানকে ওভাররাইড করে। আপনি যদি সংবেদনশীল ডেটা পরিচালনা করেন তবে আমি ব্যবহারের পরামর্শ দেব না $_REQUEST
।
$ _GET ক্যোরিস্ট্রিং বা আপনার ইউআরএল থেকে ভেরিয়েবলগুলি পুনরুদ্ধার করে>
Generally _POST একটি POST পদ্ধতি থেকে (সাধারণত) ফর্মগুলি থেকে ভেরিয়েবলগুলি পুনরুদ্ধার করে।
$ _REQUEST হ'ল $ _GET এবং $ _POST এর একত্রীকরণ যেখানে $ _POST ওভাররাইড করে। _GET। বৈধতার জন্য স্ব-প্রতিশোধমূলক ফর্মগুলিতে $ _REQQUEST ব্যবহার করা ভাল।
request_order
এবং কুকি মানগুলিও থাকতে পারে, যার কারণে এটি খুব নির্ভরযোগ্য বা দরকারী বৈশিষ্ট্য নয়।
আমি দ্বিতীয় পদ্ধতিটি ব্যবহার করব কারণ এটি আরও স্পষ্ট। অন্যথায় আপনি জানেন না যে পরিবর্তনগুলি কোথা থেকে আসছে।
কেন আপনাকে যাইহোক GET এবং POST উভয়ই পরীক্ষা করতে হবে? অবশ্যই এক বা অন্যটি ব্যবহার করা আরও বোধগম্য।
GET
কেবলমাত্র একটি আইটেমের জন্য ব্যবহৃত হচ্ছে (উদাহরণস্বরূপ এটি সরানো) এবং সেগুলির একাধিকের POST
জন্য (চেকবাক্স সহ একটি ফর্ম ...)।
আমি কেবল কখনও _GET বা _OST ব্যবহার করি। আমি নিয়ন্ত্রণ করতে পছন্দ করি
ওপিতে যে কোনও কোড খণ্ড সম্পর্কে আমি পছন্দ করি না তা হ'ল তারা এই তথ্যটি এইচটিটিপি পদ্ধতিতে ব্যবহৃত হয়েছিল তা বাতিল করে দেয়। এবং তথ্য ইনপুট স্যানিটাইজেশন জন্য গুরুত্বপূর্ণ।
উদাহরণস্বরূপ, কোনও স্ক্রিপ্ট যদি এমন কোনও ফর্মের ডেটা গ্রহণ করে যা ডিবিতে প্রবেশ করতে চলেছে তবে ফর্মটির আরও ভাল পোষ্ট ব্যবহার করা হয়েছে ( কেবল আদর্শশক্তির ক্রিয়াকলাপের জন্য জিইটি ব্যবহার করুন )। তবে স্ক্রিপ্টটি যদি জিইটি পদ্ধতির মাধ্যমে ইনপুট ডেটা পায় তবে তা (সাধারণত) প্রত্যাখ্যান করা উচিত। আমার জন্য, এইরকম পরিস্থিতি ত্রুটি লগতে সুরক্ষা লঙ্ঘন লেখার নিশ্চয়তা দেয় যেহেতু এটি এমন একটি চিহ্ন যা কেউ কেউ চেষ্টা করছে।
ওপিতে কোড বিভাজনের সাথে এই স্যানিটাইজেশন সম্ভব হবে না।
$_POST
আমি ব্যবহার করব $_POST
, এবং $_GET
কারণ $_REQUEST
তাদের বিষয়বস্তু থেকে আলাদাভাবে প্রভাবিত হয় না variables_order
।
কখন ব্যবহার করবেন $_POST
এবং $_GET
কী ধরণের অপারেশন চালিত হচ্ছে তার উপর নির্ভর করে। সার্ভার থেকে পরিচালিত ডেটা পরিবর্তন করে এমন একটি অপারেশন একটি পোষ্ট অনুরোধের মাধ্যমে করা উচিত, অন্য অপারেশনগুলি জিইটি অনুরোধের মাধ্যমে করা উচিত। উদাহরণস্বরূপ, কোনও ব্যবহারকারীর অ্যাকাউন্ট মুছে ফেলা একটি অপারেশন ব্যবহারকারী কোনও লিঙ্কে ক্লিক করার পরে সরাসরি সম্পাদন করা উচিত নয়, যখন একটি চিত্র দেখার সময় কোনও লিঙ্কের মাধ্যমে করা যায়।
আমি এটি ব্যবহার করি,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
স্টেটমেন্টটি বৈধতা দেয় যদি $ _REQQUEST এর একাধিক প্যারামিটার থাকে ($ _REQUEST এর প্রথম প্যারামিটারটি অনুরোধ ইউরি হবে যা প্রয়োজনের সময় ব্যবহার করা যেতে পারে, কিছু পিএইচপি প্যাকেজ প্যাকেজ ফিরে আসবে না G _গেট তাই এটি 1 এর বেশি $ _GET- এ যায় কিনা তা পরীক্ষা করে দেখুন, ডিফল্ট, এটি $ _POST হবে।
আপনি অকালে অপ্টিমাইজ করছেন। এছাড়াও, সুরক্ষার কারণে আপনার পোষ্ট-ইনগ স্টাফের জন্য জিইটি ব্যবহার করা উচিত কিনা এ সম্পর্কে আপনার কিছুটা চিন্তা করা উচিত।
এটি কুরুচিপূর্ণ এবং কোড লাইভ ঠেলে দেওয়ার সময় আমি এটি একটি চূড়ান্ত সমাধান হিসাবে সুপারিশ করতাম না, তবে বিশ্রাম ফাংশনগুলি তৈরি করার সময়, কখনও কখনও 'ক্যাচ-অল' পরামিতি গ্র্যাবারটি ব্যবহার করা সহজ হয়:
public static function parseParams() {
$params = array();
switch($_SERVER['REQUEST_METHOD']) {
case "PUT":
case "DELETE":
parse_str(file_get_contents('php://input'), $params);
$GLOBALS["_{$_SERVER['REQUEST_METHOD']}"] = $params;
break;
case "GET":
$params = $_GET;
break;
case "POST":
$params = $_POST;
break;
default:
$params = $_REQUEST;
break;
}
return $params;
}
সৃজনশীল কেউ সম্ভবত কমান্ড লাইন প্যারামিটারগুলি বা আপনার আইডিই থেকে যা কিছু আসে তা পরিচালনা করতে এতে যুক্ত করতে পারে add প্রদত্ত বিশ্রাম-ফাংশনটি কী করছে তা স্থির করার পরে, আপনি ডিপ্লয়ে সংস্করণে যা প্রয়োজন তা পেয়েছেন তা নিশ্চিত করার জন্য আপনি এই প্রদত্ত কলটির জন্য উপযুক্ত একটি বাছাই করতে পারেন। এটি ধরে নিয়েছে 'REQUEST_METHOD' সেট করা আছে।
!isset($_REQUEST['s'])
।