برگزیده های پرشین تولز

header()

behdad

کاربر تازه وارد
تاریخ عضویت
26 اکتبر 2003
نوشته‌ها
6
لایک‌ها
0
سلام

من مشکلی دارم با دستور
PHP:
header("Location : index.php")
وقتی که از این دستور برای کنترل کاربر استفاده میکنم پیغام خطای زیر رو میگیرم :

Warning: Cannot modify header information - headers already sent by (output started at /home/admin.php:17)​

جریان چیه و چرا روی سرور خانگی من این دستور مشکلی نداره ولی روی هاستی که ازش استفاده میکنم چنین ایرادی رو میگیره ؟ اگر این دستور جایگزینی داره لطفا من رو راهنمایی کنید . لازم به ذكره php که روی سرور خانگی من و روی هاست من هستند هم ورژنند .

با تشکر
 

ehsan

Administrator
مدیر انجمن
Administrator
تاریخ عضویت
5 دسامبر 2002
نوشته‌ها
7,949
لایک‌ها
3,918
محل سکونت
Internet
فایل رو با یه ادیتور غیر یونیکد باز کن. احیانا سه تا کاراکتر عجیب توی اون فایل نیوفتاده؟!
البته ممکنه این دلیل اصلیش نباشه ولی خب بعضی وقتها که فایل رو مثلا با notepad و با تغییرات فارسی ادیت میکنی یه همچین مشکلی پیش میاد.
 

behdad

کاربر تازه وارد
تاریخ عضویت
26 اکتبر 2003
نوشته‌ها
6
لایک‌ها
0
ممنون از راهنماییتون

اون که اشکال از خط 17 هست رو که متوجه شدم :D ولی مسئله اصلی اینه که نمیتونه header رو flush کنه منم روی php.ini سرور خودم هر چقدر گشتم تنظیمی برای این مسئله پیدا نکردم .

و اینکه توی این code از unicode استفاده نشده و ایرادی که میگیره مستقیما مال header ای است که قراره برای ie فرستاده بشه ...

ایا دستوری داریم که مشابه این کار کنه که جایگزین کنم ؟
 

ehsan

Administrator
مدیر انجمن
Administrator
تاریخ عضویت
5 دسامبر 2002
نوشته‌ها
7,949
لایک‌ها
3,918
محل سکونت
Internet
به نقل از oxygenws :
از اونجایی که اشکال در خط ۱۷ ام برنامه هست و اون سه کاراکتر قطعا در خط اول اتفاق میفته، پس دلیلش اینی که شما میگی نیست.

نتیجه اخلاقی: فایل رو در هر ادیتوری که دوست داشتی بازش کن.

موفق باشید، امید
من که در زمینه php بی سوادم واسه همین عادت کردم تا همچین اروری میگیرم میرم سراغ اون سه تا کاراکتر! :lol:
در هر صورت ممنون از راهنمایی ;)
 

behdad

کاربر تازه وارد
تاریخ عضویت
26 اکتبر 2003
نوشته‌ها
6
لایک‌ها
0
خیلی ممنون بابت راهنمایی دقیقتون

نیازی نیست خط 17 رو بزارم اینجا چون همونطور که گفتم در خط 17 از دستور header داره ایراد میگیره و مشخصه چیزه دیگری هم نیست .
این دستور باید اولین دستور هر صفحه باشه حتی قبل از هر نوع html tag تا بتونه بدرستی کار کنه و ایراد این خط هم همونطور که مشخصه بخاطره اینه که خط اول نیست و خط هفدهمه و در این مرحله header ها flush شدند .

روی خود documents های php توضیح کاملی در این رابطه وجود داره که بد نیست اینجا منتقل کنم :

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.​

و در قسمت بعد هم راه حلش رو براتون تشریح کرده :

Note: In PHP 4, you can use output buffering to get around this problem, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.​

اینهم برای درک بیشتر HTTP :


Location Headers and Spoofing

If a single server supports multiple organizations that do not trust
one another, then it MUST check the values of Location and Content-
Location headers in responses that are generated under control of
said organizations to make sure that they do not attempt to
invalidate resources over which they have no authority.

و برای درک خیلی بیشتر اینجا کلیک کنید .
 
بالا