รหัสใดจะเร็วขึ้น
$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
เมื่อมีคนผลักข้อมูล(แทรกหรืออัปเดตหรือลบ)ข้อมูลไปยังแอปพลิเคชันของคุณไม่ว่าจะด้วยวิธีใดจะมีความแตกต่างไม่มากนักเกี่ยวกับการแสดง: ความแตกต่างจะเล็กน้อยเมื่อเทียบกับสคริปต์ที่เหลือของคุณ
รับกับ POST
1) ทั้ง GET และ POST สร้างอาร์เรย์ (เช่นอาร์เรย์ (key => value, key2 => value2, key3 => value3, ... )) อาร์เรย์นี้มีคู่ของคีย์ / ค่าโดยที่คีย์คือชื่อของตัวควบคุมฟอร์มและค่าคือข้อมูลอินพุตจากผู้ใช้
2) ทั้ง GET และ POST ถือเป็น $ _GET และ $ _POST สิ่งเหล่านี้คือ superglobals ซึ่งหมายความว่าพวกมันสามารถเข้าถึงได้เสมอโดยไม่คำนึงถึงขอบเขตและคุณสามารถเข้าถึงได้จากฟังก์ชั่นคลาสหรือไฟล์ใด ๆ โดยไม่ต้องทำอะไรเป็นพิเศษ
3) $ _GET เป็นอาร์เรย์ของตัวแปรที่ส่งผ่านไปยังสคริปต์ปัจจุบันผ่านพารามิเตอร์ URL
4) $ _POST เป็นอาร์เรย์ของตัวแปรที่ส่งผ่านไปยังสคริปต์ปัจจุบันผ่านวิธี HTTP POST
จะใช้ GET เมื่อไหร่?
ข้อมูลที่ส่งจากแบบฟอร์มด้วยวิธีการ GET จะปรากฏแก่ทุกคน (ชื่อและค่าตัวแปรทั้งหมดจะแสดงใน URL) GET ยังมีข้อ จำกัด เกี่ยวกับปริมาณข้อมูลที่จะส่ง ข้อ จำกัด นี้มีประมาณ 2000 ตัวอักษร อย่างไรก็ตามเนื่องจากตัวแปรจะแสดงใน URL จึงเป็นไปได้ที่จะบุ๊กมาร์กหน้า สิ่งนี้มีประโยชน์ในบางกรณี
GET อาจใช้สำหรับการส่งข้อมูลที่ไม่สำคัญ
หมายเหตุ: GET ไม่ควรใช้สำหรับการส่งรหัสผ่านหรือข้อมูลที่ละเอียดอ่อนอื่น ๆ !
ควรใช้ POST เมื่อใด
ข้อมูลที่ส่งจากแบบฟอร์มด้วยวิธีการ POST จะไม่ปรากฏแก่ผู้อื่น (ชื่อ / ค่าทั้งหมดจะถูกฝังอยู่ภายในเนื้อความของคำขอ HTTP) และไม่มีข้อ จำกัด เกี่ยวกับปริมาณข้อมูลที่จะส่ง
นอกจากนี้ POST ยังรองรับฟังก์ชั่นขั้นสูงเช่นการสนับสนุนอินพุตไบนารี่แบบหลายส่วนในขณะอัพโหลดไฟล์ไปยังเซิร์ฟเวอร์
อย่างไรก็ตามเนื่องจากตัวแปรจะไม่ปรากฏใน URL จึงไม่สามารถคั่นหน้าได้
$ _GET ดึงข้อมูลตัวแปรจากการสืบค้นหรือ URL ของคุณ>
$ _POST ดึงข้อมูลตัวแปรจากเมธอด POST เช่น (โดยทั่วไป) แบบฟอร์ม
$ _REQUEST เป็นการรวม $ _GET และ $ _POST โดยที่ $ _POST แทนที่ $ _GET ดีที่จะใช้ $ _REQUEST ในแบบฟอร์มการอ้างอิงตนเองสำหรับการตรวจสอบ
GET
จากสตริงข้อความค้นหาPOST
จากการส่งแบบฟอร์ม)
ฉันขอแนะนำให้ใช้$_POST
และ$_GET
อย่างชัดเจน
การใช้ $ _REQUEST นั้นไม่จำเป็นสำหรับการออกแบบเว็บไซต์ที่เหมาะสมและมันมีข้อเสียบางประการเช่นทำให้คุณเปิดการCSRF/XSS
โจมตีได้ง่ายขึ้นและความบ้าคลั่งอื่น ๆ ที่มาจากการจัดเก็บข้อมูลใน URL
ความแตกต่างความเร็วควรน้อยที่สุดทั้งสองวิธี
ใช้คำขอ ไม่มีใครสนใจความเร็วของการใช้งานที่ง่ายและมันเป็นโค้ดที่สะอาดกว่ามาก
$_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
แต่ก็ยังอนุญาตให้สคริปต์เดียวกันสามารถเข้าถึงได้ด้วยวิธีใดวิธีหนึ่ง (ในกรณีของฉันสคริปต์เดียวกันจะถูกใช้กับ 'การกระทำ' ที่แตกต่างกันและบางครั้ง $ _GET จะไม่เป็นไร _POST เพื่อซ่อน / รักษาความปลอดภัยข้อมูล)
มีข้อกังวลด้านความปลอดภัยบางอย่างที่เกี่ยวข้องในฐานะที่แฮ็กเกอร์สามารถตั้งค่าคุกกี้ที่จะแทนที่ค่า $ _POST หรือ $ _GET หากคุณจัดการกับข้อมูลที่ละเอียดอ่อนฉันจะไม่แนะนำให้ใช้ $ _REQUEST - Xandor
คุณไม่สามารถใช้$_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'] อย่างชัดเจนไม่ต้องพึ่งพา $ _POST ที่ว่างเปล่าสำหรับ GET
$_SERVER['REQUEST_METHOD']
เพื่อตรวจสอบว่าสคริปต์จะถูกเรียกด้วยอย่างใดอย่างหนึ่ง แต่จะบอกว่าไม่มีอะไรผิดปกติกับ$_REQUEST
ไม่จริง 100% มีข้อกังวลด้านความปลอดภัยบางอย่างที่เกี่ยวข้องในฐานะที่แฮ็กเกอร์สามารถตั้งค่าคุกกี้ที่จะแทนที่ค่า $ _POST หรือ $ _GET $_REQUEST
หากคุณจัดการกับข้อมูลที่สำคัญผมจะไม่แนะนำให้ใช้
$ _GET ดึงข้อมูลตัวแปรจากการสืบค้นหรือ URL ของคุณ>
$ _POST ดึงข้อมูลตัวแปรจากเมธอด POST เช่น (โดยทั่วไป) แบบฟอร์ม
$ _REQUEST เป็นการรวม $ _GET และ $ _POST โดยที่ $ _POST แทนที่ $ _GET ดีที่จะใช้ $ _REQUEST ในแบบฟอร์มการอ้างอิงตนเองสำหรับการตรวจสอบ
request_order
และอาจมีค่าคุกกี้ด้วยซึ่งเป็นเหตุผลว่าทำไมคุณสมบัตินี้จึงไม่น่าเชื่อถือหรือมีประโยชน์
ฉันจะใช้วิธีที่สองเนื่องจากชัดเจนกว่า ไม่เช่นนั้นคุณไม่รู้ว่าตัวแปรมาจากไหน
ทำไมคุณต้องตรวจสอบทั้ง GET และ POST แน่นอนการใช้อย่างใดอย่างหนึ่งเท่านั้นทำให้รู้สึกมากขึ้น
GET
การใช้เพียงรายการเดียว (เช่นย้าย) และPOST
หลายรายการ (แบบฟอร์มที่มีช่องทำเครื่องหมาย ... )
ฉันใช้ _GET หรือ _POST เท่านั้น ฉันชอบที่จะมีการควบคุม
สิ่งที่ฉันไม่ชอบเกี่ยวกับส่วนของรหัสใน OP คือพวกเขาละทิ้งข้อมูลที่ใช้วิธีการ HTTP และข้อมูลนั้นเป็นสิ่งสำคัญสำหรับการฆ่าเชื้ออินพุต
ตัวอย่างเช่นหากสคริปต์ยอมรับข้อมูลจากแบบฟอร์มที่จะถูกป้อนลงในฐานข้อมูลแล้วแบบฟอร์มนั้นควรใช้ POST ( ใช้ GET เฉพาะสำหรับการกระทำ idempotent เท่านั้น ) แต่ถ้าสคริปต์ได้รับข้อมูลอินพุตผ่านวิธีการ GET ก็ควรจะปฏิเสธ (ปกติ) สำหรับฉันสถานการณ์ดังกล่าวอาจรับประกันว่าการละเมิดความปลอดภัยลงในบันทึกข้อผิดพลาดเนื่องจากเป็นสัญญาณว่ามีคนพยายามทำบางสิ่งบางอย่าง
ด้วยการแยกส่วนของรหัสใน OP ทำให้ไม่สามารถฆ่าเชื้อโรคนี้ได้
$_POST
เพื่อป้องกันไม่ให้โปรแกรมรวบรวมข้อมูลเครื่องมือค้นหาจากการทำบางสิ่งบางอย่างเช่นนี้thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
ผมจะใช้$_POST
และ$_GET
เพราะแตกต่างจากเนื้อหาของพวกเขาจะไม่ได้รับอิทธิพลจาก$_REQUEST
ควรใช้เมื่อใดและขึ้นอยู่กับประเภทของการดำเนินการ การดำเนินการที่เปลี่ยนแปลงข้อมูลที่จัดการจากเซิร์ฟเวอร์ควรทำผ่านการร้องขอ POST ในขณะที่การดำเนินการอื่น ๆ ควรทำผ่านคำขอ GET เพื่อให้เป็นตัวอย่างการดำเนินการที่ลบบัญชีผู้ใช้ไม่ควรดำเนินการโดยตรงหลังจากที่ผู้ใช้คลิกที่ลิงค์ในขณะที่ดูภาพสามารถทำได้ผ่านลิงค์variables_order
$_POST
$_GET
ฉันใช้สิ่งนี้
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
คำสั่งตรวจสอบถ้า $ _REQUEST มีมากกว่าหนึ่งพารามิเตอร์ (พารามิเตอร์แรกใน $ _REQUEST จะเป็นคำขอ uri ซึ่งสามารถใช้เมื่อจำเป็นแพ็คเกจ PHP บางตัวจะไม่ส่งคืน $ _GET ดังนั้นให้ตรวจสอบว่ามีมากกว่า 1 $ สำหรับ $ _GET หรือไม่ เริ่มต้นมันจะเป็น $ _POST
คุณกำลังเพิ่มประสิทธิภาพก่อนกำหนด นอกจากนี้คุณควรคำนึงถึงความจริงว่า GET ควรใช้กับสิ่งที่คุณโพสต์หรือไม่ด้วยเหตุผลด้านความปลอดภัย
มันน่าเกลียดและฉันจะไม่แนะนำให้ใช้เป็นทางออกสุดท้ายเมื่อกดรหัสสด แต่ในขณะที่สร้างฟังก์ชั่นการพักผ่อนบางครั้งมันก็มีประโยชน์ที่จะมี Grabber พารามิเตอร์ 'catch-all':
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;
}
บางคนอาจเพิ่มโฆษณาเพื่อจัดการพารามิเตอร์บรรทัดคำสั่งหรืออะไรก็ตามที่มาจาก IDE ของคุณ เมื่อคุณตัดสินใจว่าฟังก์ชั่นที่เหลือให้ทำอะไรคุณสามารถเลือกอันที่เหมาะสมสำหรับการโทรที่ได้รับเพื่อให้แน่ใจว่าคุณได้รับสิ่งที่คุณต้องการสำหรับเวอร์ชันการปรับใช้ สิ่งนี้ถือว่ามีการตั้งค่า 'REQUEST_METHOD'
!isset($_REQUEST['s'])
.