redirect شرح - لماذا يتعين علي استدعاء "الخروج" بعد إعادة التوجيه من خلال العنوان("الموقع..")في PHP؟




معنى header (6)

أنت تعلم أنه إذا كنت تريد إعادة توجيه مستخدم في PHP ، فيمكنك استخدام وظيفة الرأس:

header('Location: http://smowhere.com');

كما أنه من المعروف جيدا أنه من الممارسات الجيدة وضع exit; أيضا exit; بعد استدعاء header ، لمنع تنفيذ php code أخرى. لذا ، فإن سؤالي هو: هل يمكن تنفيذ الشفرة بعد استدعاء الموقع الرئيسي؟ في أي الحالات؟ هل يمكن لمستخدم ضار أن يتجاهل اتصال header('Location..') ؟ ماذا؟


Answers

يرشد header() PHP أنه يجب إرسال رأس HTTP ... عندما يتم إرسال رؤوس HTTP.

ولا يتم إرسالها على الفور عند كتابة المكالمة إلى header () ، ولكن عندما يحين وقت إرسالها (عادة ، عندما تحتاج PHP لبدء إرسال نص الاستجابة - والذي قد يكون متأخرا أكثر مما تعتقد ، عندما يكون output_buffering enabed) .

لذا ، إذا كنت تتصل header() ، فستكون هناك ضمانات شافية بأن الرمز المكتوب بعد هذا البيان لن يتم تنفيذه - ما لم تدل على أنه لا يجب ، باستخدام exit / die .

يمكن للمستخدم تجاهل عنوان Location إذا أراد ؛ ولكن لن يغير أي شيء على حقيقة أن الشفرة بعد استدعاء header() قد يتم أو لا يمكن تنفيذها: هذه المسألة من جانب الخادم.


سيتم تشغيل PHP Code بعد رأس (). في بعض الأحيان ، هذا مطلوب ، كما يظهر example على php.net. للتأكد من عدم وجوده ، يمكنك إنهاء تدفق البرنامج بالكامل.


هل يمكن تنفيذ الشفرة بعد استدعاء موقع الرأس بشكل فعال؟

نعم دائما. لا يمثل header سوى سطر بيانات يطلب من المتصفح إعادة التوجيه. سيظل PHP باقي الصفحة وسيُطلع عليها العميل ببساطة عن طريق منع تنفيذ أمر header .

هذا أمر سهل بما فيه الكفاية مع عميل سطر الأوامر مثل wget ، على سبيل المثال ، بمجرد إخباره بعدم اتباع عمليات إعادة التوجيه.

الخلاصة: إذا لم تقم بمنعها ، فسوف ترسل PHP كامل الجسم حتى بعد مكالمة header . هذه الهيئة متاحة بشكل كامل للمتلقي دون أي مهارات قرصنة خاصة.


re: هل يمكن تنفيذ الشفرة بعد استدعاء موقع الرأس بشكل فعال؟

نعم ، إذا لم تقم بإغلاق البرنامج النصي.

إعادة: في أي الحالات؟

في كل حالة.

هل يمكن لمستخدم ضار أن يتجاهل اتصال الرأس ('الموقع ..') بشكل كامل؟

لا ، ستتم مطالبة المستخدم بعدم إبداء رأي في الأمر.


بدون استدعاء الخروج ، ستنخفض النقطة / الوقت المحدد الذي سينتهي فيه البرنامج النصي إلى عاملين:

  1. مدى سرعة تفاعل متصفح العميل مع إعادة التوجيه
  2. كم من الوقت يستغرق بقية البرنامج النصي لتنفيذ.

لنفترض أن المتصفح IMMEDIATELY يبدأ إجراء إعادة التوجيه في اللحظة التي يرى فيها عنوان الموقع يأتي من خلاله. وهذا يعني أنه سيؤدي إلى إغلاق الاتصال الذي تأتي منه عملية إعادة التوجيه ، بحيث يمكن بدء الاتصال بالموقع الجديد. يعني هذا بشكل عام أن خادم الويب سينهي برنامج إعادة التوجيه. ومع ذلك ، يستغرق الأمر مدة طويلة حتى ينتقل العنوان من server-> client ، بينما تكون عملية إيقاف تشغيل ارتباط TCP للانتقال من الخادم> العميل هي مقدار الوقت الذي يمكن أن يستمر تشغيله في البرنامج النصي.


خطأ في التحليل: خطأ في بناء الجملة ، T_XXX غير متوقع

يحدث عندما يكون لديك رمز T_XXX في مكان غير متوقع ، وأقواس (غير ضرورية) غير متوازنة ، واستخدام علامة قصيرة دون تنشيطها في php.ini ، وغيرها الكثير.

أسئلة ذات صلة:

لمزيد من المساعدة ، انظر:

  • http://phpcodechecker.com/ - الذي يقدم بعض التفسيرات الأكثر فائدةً حول مشكلات كلماتك.




php redirect header location