PHP มีฟังก์ชันอ้างอิงมหัศจรรย์สองฟังก์ชัน magic_quotes_gpc และ magic_quotes_runtime ที่สะดวกสำหรับเราในการเสนอราคาข้อมูล หากตั้งค่าทั้งสองฟังก์ชันนี้เป็นเปิดใน php.ini ฟังก์ชันทั้งสองจะพบเครื่องหมายคำพูดเดี่ยว ' เครื่องหมายคำพูดคู่ " และแบ็กสแลชสำหรับข้อมูลที่เราอ้างอิง line จะถูกเพิ่มโดยอัตโนมัติด้วยแบ็กสแลชเพื่อช่วยให้เราแปลสัญลักษณ์โดยอัตโนมัติและรับรองการดำเนินการของข้อมูลที่ถูกต้อง อย่างไรก็ตาม ภายใต้เวอร์ชันต่างๆ ของ PHP หรือการกำหนดค่าเซิร์ฟเวอร์ที่แตกต่างกัน magic_quotes_gpc และ magic_quotes_runtime บางตัวจะถูกตั้งค่าเป็นเปิด และบางตัวจะถูกตั้งค่าเป็นเปิด . off ดังนั้นโปรแกรมที่เราเขียนจะต้องเป็นไปตามเงื่อนไขทั้งเปิดและปิด ดังนั้นฟังก์ชัน magic_quotes_gpc และ magic_quotes_runtime แตกต่างกันอย่างไร ดูคำอธิบายต่อไปนี้:
ขอบเขตของmagic_quotes_gpc
คือ: เซิร์ฟเวอร์ไคลเอ็นต์ของเว็บ;
เวลาดำเนินการ: คำขอเริ่มต้น เช่น เมื่อสคริปต์ทำงาน
Magic_quotes_runtime
: ข้อมูลที่อ่านจากไฟล์หรือผลลัพธ์ของการดำเนินการ exec() หรือได้รับจากการสืบค้น SQL
เวลาดำเนินการ: ทุกครั้งที่สคริปต์เข้าถึงข้อมูลที่สร้างขึ้นในสถานะกำลังทำงาน
ดังนั้น ค่าการตั้งค่าของ magic_quotes_gpc จะส่งผลต่อข้อมูลที่ได้รับผ่าน Get/Post/Cookies ค่าการตั้งค่าของ magic_quotes_runtime จะส่งผลต่อข้อมูลที่อ่านจากไฟล์หรือข้อมูลที่ได้รับจากการสืบค้นฐานข้อมูล
ตัวอย่าง:
<form action="" method="post" >
STR:<input type="text" name="str">
<ประเภทอินพุต = "ส่ง" >
</แบบฟอร์ม>
<?php
/* เรากรอกแบบฟอร์ม: '" สัญลักษณ์เหล่านี้ หากไม่ได้เปิด magic_quotes_gpc เครื่องหมายเหล่านั้นจะไม่ถูกหลีกหนีด้วยแบ็กสแลช*/
echo 'ค่าที่ส่งผ่าน POST ตอนนี้คือ:' ,$_POST['str'], '<br />';
if (get_magic_quotes_gpc()) { // ตรวจสอบว่า magic_quotes_gpc เปิดอยู่หรือไม่ ให้ใช้ addslashes เพื่อแปลง ชอบธรรม
$str = $_POST['str'];
} อื่น {
$str = addslashes($_POST['str']);
}
echo 'นี่คือเวอร์ชันที่ใช้ Escape:' ,$str, '<hr />';
$sql = "ใส่นามสกุล (นามสกุล) ค่า ('$str')";
//============================ = ================================================= = ======
//-----magic_quotes_gpc จะยกเว้นเท่านั้น: ข้อมูล www.devdao.com ที่ได้รับผ่าน Get/Post/Cookies
//-----magic_quotes_runtime จะหลบหนี: ข้อมูลที่อ่านจากไฟล์หรือผลลัพธ์ของการดำเนินการ exec() หรือได้รับจากการสืบค้น SQL
//================================================ ====================================
$data = implode(file('try.php')); // เรายังคงเขียนอักขระ '" ไว้เพื่อทดสอบ
echo 'นี่คือข้อมูลของ try.php,';
ถ้า (get_magic_quotes_runtime()) {
$ข้อมูล = $ข้อมูล;
echo 'ระบบหลบหนี' .$data;
} อื่น {
echo 'escaped by addslashes' .$data = addslashes($data);
}
$sql = "ใส่นามสกุล (นามสกุล) ค่า ('$data')";
echo '<br />คำสั่ง SQL คือ:<br />' ,$sql;
//---ทุกอย่างจะถูกหลีกเลี่ยงเมื่อเข้าสู่ฐานข้อมูล แต่มีแบ็กสแลชเพิ่มเติม เมื่อเราต้องการอ่านข้อมูลต้นฉบับ ให้ใช้ stripslashes() เพื่อลบแบ็กสแลช
//---stripslashes() และ addslashes() มีผลตรงกันข้าม
?>ความแตกต่างที่สำคัญที่สุดคือสองประเด็นที่กล่าวถึงข้างต้น: ค่าที่ตั้งไว้ของ magic_quotes_gpc จะส่งผลต่อข้อมูลที่ได้รับผ่าน Get/Post/Cookies ค่าการตั้งค่าของ magic_quotes_runtime จะส่งผลต่อการอ่านข้อมูล ได้รับหรือกล่าวถึงข้อมูลที่ได้รับจากการสืบค้นฐานข้อมูลที่นี่: set_magic_quotes_runtime() : ตั้งค่า magic_quotes_runtime.0=off.1=on. สถานะเริ่มต้นถูกปิด. ): ตรวจสอบค่า magic_quotes_gpc 0 = ปิด 1 = เปิด get_magic_quotes_runtime (): ตรวจสอบค่า magic_quotes_runtime 0=off.1=on โปรดทราบว่าไม่มีฟังก์ชัน set_magic_quotes_gpc() กล่าวคือ ไม่สามารถตั้งค่าของ magic_quotes_gpc ในโปรแกรมได้