محمود موسى2 نشر 4 يناير 2021 أرسل تقرير نشر 4 يناير 2021 السلام عليكم الكود التالي يعمل في اماكن معينة في الكود وأماكن لا header("location:404"); إ1ا أضفته في أول الصفحة فإنه يعمل ولكن لا يعمل في وسطها ولا أخرها بحثت عن هذا الموضوع فوجدت هذا الجواب https://stackoverflow.com/questions/423860/php-header-redirect-not-working وأظن انه الجواب الصحيح جدا ولكن لم أفهمه بالرغم من لغتي الإنجليزية الجيدة فهل أحد ما يعرض لي حل مشكلتي مشكوراَ؟ اقتباس
0 Yomna Raouf نشر 4 يناير 2021 أرسل تقرير نشر 4 يناير 2021 مرحبًا محمود. المقصود من هذه الإجابة هو أنه حتى تعمل ( )header يجب أن يتم استدعائها قبل أن يتم إرسال أي output، سواءً كان هذا الناتج سطور أكواد html أو سطور فارغة. و هذا ما ينص عليه php header manual اقتباس Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file. مثال: <html> <?php /* This will give an error. Note the output * above, which is before the header() call */ header('Location: http://www.example.com/'); exit; ?> و هذا ما يفسر المشكلة التي تظهر لك اقتباس
0 محمود موسى2 نشر 4 يناير 2021 الكاتب أرسل تقرير نشر 4 يناير 2021 بتاريخ 19 دقائق مضت قال Yomna Raouf: <html> <?php /* This will give an error. Note the output * above, which is before the header() call */ header('Location: http://www.example.com/'); exit; ?> شكرا على التوضيح ولكن اريد منك توضيح اخر اذا سمحتي كود الphp الخاص بي على سبيل المسال هكذا <?php if(isset($_GET['name'])){ ?> <div> Hello: <?php echo $_GET['name'];?> </div> <?php }else{ header("location: 404"); } فإن هذا الكود لا يعمل وقد فهمت منك سبب عدم العمل وهو وجود output قبل ارسال الheader ولكن انا اريد فعليا عمل redirect اذا لم يتحقق الشرط فكيف افعلها؟؟ حاولت بإستخدام هذا الكود ونفعت <?php if(isset($_GET['name'])){ ?> <div> Hello: <?php echo $_GET['name'];?> </div> <?php }else{ ?> <script> location.href = '404'; </script> <?php } فأرجو الإفادة هل هذه هي الطريقة الأمثل لعمل redirect ?? اقتباس
0 أحمد حبنكة نشر 4 يناير 2021 أرسل تقرير نشر 4 يناير 2021 بتاريخ 3 ساعات قال محمود رضا موسى: شكرا على التوضيح ولكن اريد منك توضيح اخر اذا سمحتي كود الphp الخاص بي على سبيل المسال هكذا <?php if(isset($_GET['name'])){ ?> <div> Hello: <?php echo $_GET['name'];?> </div> <?php }else{ header("location: 404"); } فإن هذا الكود لا يعمل وقد فهمت منك سبب عدم العمل وهو وجود output قبل ارسال الheader ولكن انا اريد فعليا عمل redirect اذا لم يتحقق الشرط فكيف افعلها؟؟ حاولت بإستخدام هذا الكود ونفعت <?php if(isset($_GET['name'])){ ?> <div> Hello: <?php echo $_GET['name'];?> </div> <?php }else{ ?> <script> location.href = '404'; </script> <?php } فأرجو الإفادة هل هذه هي الطريقة الأمثل لعمل redirect ?? هذه ليست الطريقة المثلى لعمل ذلك. لعمل ما تريد بدلاً من: <?php if(isset($_GET['name'])){ ?> <div> Hello: <?php echo $_GET['name'];?> </div> <?php }else{ header("location: 404"); } اكتب: <?php if(isset($_GET['name'])){ ?> <div> Hello: <?php echo $_GET['name'];?> </div> <?php }else{ http_response_code(303); header("location: 404"); } لاحظ السطر المضاف وهو http_response_code وستسأل لماذا ؟ ﻷن المتصفح لا يكفيه فقط أن تعطيه Location header بل يحتاج للـhttp response أن يكون أحد أكواد redirect وفي مثالنا استعملنا 303 http status code والذي يعني See Other ، في كودك السابق كان status code هو 200 لذلك لم يقم المتصفح بـredirect وفي مثالك الذي قلت بأنه عمل تعتمد على الجافاسكريبت للـredirect وهذه الطريقة غير مفضلة طالما أن السيرفر هو من عليه أن يقوم بالـredirect. اقتباس
0 Wael Aljamal نشر 4 يناير 2021 أرسل تقرير نشر 4 يناير 2021 بتاريخ 5 ساعات قال محمود رضا موسى: فأرجو الإفادة هل هذه هي الطريقة الأمثل لعمل redirect ?? مرحبا محمود، نعم يمكننا عمل إعادة التوجيه عن طريق جافاسكربت كما فعلت في الشيفرة البرمجية الثانية. التي تضمنت: <script> location.href = '404'; </script> or window.location.href='404'; ربما لن تعمل في حال تم إيقاف جافاسكربت في المتصفح (يحدث إعادة التوجيه هنا ف المتصفح وليس المخدم) قم بتجريب التالي وأخبرنا بالنتائج: <?php if(!isset($_GET['name'])){ header("location: 404"); exit(); // or die(); or exit } ?> <div> Hello: <?php echo $_GET['name'];?> </div> نستخدم exit - die لنتأكد من توقف عمل الشيفرة البرمجية قبل إرسالها لعناصر HTML في حال تأخر تنفيذ إعادة التوجيه. يمكنك تحديد باراميترات تابع إعادة التوجيه بالقيم التالية: 301 في حال كنت تريد إخبار أن الصفحة الحالية تم نقلها لمكان آخر بشكل دائم 302 تم نقل الصفحة بشكل مؤقت.. header("location: http://example.com", true, 301 ); exit; وعليك التأكد من أن ترميز الصفحة يتم باستخدام UTF-8 في ملف php.ini default_charset = "utf-8"; بالتوفيق اقتباس
0 محمود موسى2 نشر 4 يناير 2021 الكاتب أرسل تقرير نشر 4 يناير 2021 بتاريخ On 1/4/2021 at 19:08 قال Wael Aljamal: قم بتجريب التالي وأخبرنا بالنتائج: <?php if(!isset($_GET['name'])){ header("location: 404"); exit(); // or die(); or exit }else{ ?> <div> Hello: <?php echo $_GET['name'];?> </div> <?php } اشكركم جميعا على مشاركتكم ربما كان عليا عكس دالة if بحيث يكون الoutput تحت كود الredirect ولكن باقي الاجوبة لم تنفع ولكن اشكركم شكرا جزيلا على مشاركتكم 3> 1 اقتباس
السؤال
محمود موسى2
السلام عليكم
الكود التالي يعمل في اماكن معينة في الكود وأماكن لا
إ1ا أضفته في أول الصفحة فإنه يعمل ولكن لا يعمل في وسطها ولا أخرها
بحثت عن هذا الموضوع فوجدت هذا الجواب
https://stackoverflow.com/questions/423860/php-header-redirect-not-working
وأظن انه الجواب الصحيح جدا ولكن لم أفهمه بالرغم من لغتي الإنجليزية الجيدة فهل أحد ما يعرض لي حل مشكلتي مشكوراَ؟
5 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.