توفر PHP وظيفتين مرجعيتين سحريتين، وهما magic_quotes_gpc وmagic_quotes_runtime اللتين تعتبران ملائمتين لنا لاقتباس البيانات. إذا تم ضبط هاتين الوظيفتين على وضع التشغيل في php.ini، فسوف تواجهان علامات اقتباس مفردة '، وعلامات اقتباس مزدوجة' وخطوط مائلة عكسية للبيانات التي نقتبسها. تتم إضافة السطر تلقائيًا بشرطة مائلة عكسية لمساعدتنا في ترجمة الرموز تلقائيًا وضمان التشغيل الصحيح لعمليات البيانات. ومع ذلك، في إصدارات مختلفة من PHP أو تكوينات مختلفة للخادم، يتم تعيين بعض Magic_quotes_gpc وmagic_quotes_runtime على تشغيل، ويتم تعيين بعضها على تشغيل. إيقاف التشغيل، لذلك يجب أن يتوافق البرنامج الذي نكتبه مع شروط التشغيل والإيقاف، فما الفرق بين وظائف Magic_quotes_gpc وmagic_quotes_runtime؟ راجع الوصف التالي:
نطاقMagic_quotes_gpc
هو: خادم عميل WEB؛
وقت الإجراء: يبدأ الطلب، على سبيل المثال عند تشغيل البرنامج النصي.
Magic_quotes_runtime
: البيانات المقروءة من ملف أو نتيجة تنفيذ exec() أو التي تم الحصول عليها من استعلام SQL؛
وقت الإجراء: في كل مرة يصل فيها البرنامج النصي إلى البيانات التي تم إنشاؤها في حالة التشغيل.
لذلك، ستؤثر قيمة الإعداد لـ magic_quotes_gpc على البيانات التي تم الحصول عليها من خلال Get/Post/Cookies؛ وستؤثر قيمة الإعداد لـ magic_quotes_runtime على البيانات المقروءة من الملف أو البيانات التي تم الحصول عليها من استعلام قاعدة البيانات.
مثال:
< إجراء النموذج = "" الأسلوب = "نشر" >
STR: <نوع الإدخال = "نص" اسم = "ستر">
<نوع الإدخال = "إرسال">
</النموذج>
<?php
/* نقوم بملء النموذج: '" هذه الرموز، إذا لم يتم تشغيل magic_quotes_gpc، فلن يتم الهروب منها بواسطة خطوط مائلة عكسية*/
echo 'القيمة التي تم تمريرها عبر POST الآن هي:' ,$_POST['str'], '<br />';
if (get_magic_quotes_gpc()) { // تحقق مما إذا كان magic_quotes_gpc قيد التشغيل إذا لم يكن الأمر كذلك، فاستخدم addlashes للتحويل الصالحين
$str = $_POST['str'];
} آخر {
$str = addlashes($_POST['str']);
}
echo 'هذه هي النسخة التي تم الهروب منها:' ,$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 'تم الهروب بواسطة addlashes' .$data = addlashes($data);
}
$sql = "INSERT INTO namenames (lastname) VALUES ('$data')";
echo '<br />بيان SQL هو:<br />' ,$sql;
//--- يتم تخطي كل شيء عند الدخول إلى قاعدة البيانات، ولكن هناك خطوط مائلة عكسية إضافية عندما نريد قراءة البيانات الأصلية، استخدم stripslashes() لإزالة الخطوط المائلة العكسية.
//---Stripslashes() و addlashes() لهما تأثيرات معاكسة
?>الفرق الأكثر أهمية هو النقطتان المذكورتان أعلاه: إنهما يستهدفان كائنات معالجة مختلفة. ستؤثر قيمة الإعداد لـ magic_quotes_gpc على البيانات التي تم الحصول عليها من خلال Get/Post/Cookies، وستؤثر قيمة الإعداد لـ magic_quotes_runtime على القراءة من الملف تم الحصول عليها أو ذكر البيانات التي تم الحصول عليها من استعلام قاعدة البيانات هنا: set_magic_quotes_runtime(): قم بتعيين قيمة magic_quotes_runtime.0=off 1=on. يمكنك استخدام echo phpinfo(); ): تحقق من قيمة magic_quotes_gpc 0 = Close 1 = Open get_magic_quotes_runtime (): تحقق من قيمة magic_quotes_runtime. 0=off.1=on.لاحظ أنه لا توجد وظيفة set_magic_quotes_gpc()، أي أنه لا يمكن تعيين قيمة magic_quotes_gpc.