PDA

View Full Version : آقا این چه وضعشه؟؟ PHP



m_ziba
شنبه 09 آبان 1383, 14:49 عصر
سلام!

آقا این چه وضعشه؟؟؟

من قبلاً هم php برنامه نوشتم، روی سیستم winxp.

حالا روی یه سیستم دیگه هستم با win2000server.
مدام error های عجیب غریب می ده واعصاب منو ریخته به هم.:(

مثلاً من یه کد ساده دارم این طوری:


<?php
header("Location: http://www.google.com");
?>

این که دیگه نباید error بده!! اول کار هم نمی داد!
ولی حالا یه همچین error می ده:

Warning: Cannot modify header information - headers already sent by (output started at F:\Maryam_m\New Project\test4.php:1) in F:\Maryam_m\New Project\test4.php on line 2

چه خبره؟ چه کار باید بکنم؟؟
کار دیگه ای بوده که من باید می کردم و نکردم به جز نصب phpserver و IIS؟

oxygenws
شنبه 09 آبان 1383, 15:18 عصر
1- لطفا تیتر مناسب انتخاب کنید
2- اگر متن اشکال رو بخونبد خیلی کمکتون می کنه.....
3- header قبلا ارسال شده.
4- فایل رو تو یک ادیتور درست و حسابی یا یک هگز ادیتور باز کنید و کاراکتر های اولش رو تغییر بدید (در حقیقت مشکل از خط یکم فایل test4.php می باشد)

موفق باشید

nematia
یک شنبه 10 آبان 1383, 11:14 صبح
(در حقیقت مشکل از خط یکم فایل test4.php می باشد)
توضیح تکمیلی:
گاهی یک خط خالی قبل از Header وجود داره که باعث این error میشه- همونطور که میدونید به علت محدودیت های سیستم وب بعضی از پارامترها مثل header و session باید پیش از هر داده دیگری لود بشن.

Spoofed
یک شنبه 10 آبان 1383, 12:54 عصر
متاسفانه این مشکل اعصاب خرد کن php است. در asp و بالاتر کار با سشن و کوکی و redirect‌ کردن به صفحات بسیار پخته تر اعمال می شود. (برنامه نویس هیچ وقت درگیر این مسایل نمی شود)

oxygenws
یک شنبه 10 آبان 1383, 13:02 عصر
در asp برنامه نویس درگیر خیلی از مسائل نمی شه و این چیزی نیست که php دنبالش باشه :)
کسی که با php کد می زنه باید بدونه header چیه و چرا یک header باید زودتر ارسال بشه. بعد از اینکه این ها رو فهمید، می فهمه که حتی روشی برای درگیر نشدن با این قضایا وجود داره (و اون چیزی جز بافرینگ خودکار php برای تمام صفحات نیست)

Spoofed
یک شنبه 10 آبان 1383, 14:06 عصر
بله. کاملا درسته. ( البته output_buffering در مواردی مانند فشرده کردن خروجی صفحات با gzip سبب ناقص نمایش دادن آن در IE می شود و مسایلی از این دست مانند بالا بردن load سرور و غیره می شود )
ولی با توجه به اینکه ما در سال 2004 زندگی می کنیم بهتر است کم کم در نگارش های جدیدتر یک سری از مسایل همانند روز اول اختراع php‌ نباشند.

Inprise
یک شنبه 10 آبان 1383, 14:24 عصر
<span dir=ltr>an old italian phrase says : there is no Solution for human-stupidity</span>

m_ziba
دوشنبه 11 آبان 1383, 08:17 صبح
سلام!
اکسیژن جان ممنون!

هر جا که من سؤال پرسیدم پیدات هست ! :D

به نظرم تیترش مناسب بود! :mrgreen: چون من حسابی گیر افتادم و اعصابم خورده.


خوب حالا hexeditor از کجا گیر بیارم؟؟

oxygenws
دوشنبه 11 آبان 1383, 12:54 عصر
گوگل رو برای winhex جستجو کن و دانلودش کن.

webdeveloper
دوشنبه 11 آبان 1383, 20:09 عصر
سلام
یه میان بر برای اینکه مجبور نباشی هگز ادیتور رو download کنی وجود داره. بهتره از نرم افزار edit داس استفاده کنی. کافیه در run ویندوز بنویسی edit بعد فایلت رو اونجا باز کنی بعد هم به ابتدای فایلت نگاه کن. ضمنا اگر از dream استفاده میکنی یه راه برای خلاصی از این کاراکتر های مزاحم وجود داره.
موفق باشی ...

m_ziba
شنبه 16 آبان 1383, 13:38 عصر
سلام خیلی ممنونم.

مشکلم رو حل کردین. :mrgreen:

balis_pascal
دوشنبه 14 فروردین 1385, 15:07 عصر
سلام

ممکن است حتی با استفاده از winhex یا هر نرم افزار دیگری فضا های خالی اضافه را حذف کنید ولی هنوز پیغام تکرار شود.
روش دیگری نیز وجود دارد که آقای اکسیژن به آن اشاره کردند.
برای رفع این مشکل فایل php.ini را باز کنید و عبارت

output_buffering=off
را به صورت زیر تغییر دهید

output_buffering=on
یا

output_buffering=4096
سپس wamp یا هر سرویس دهنده ای را که استفاده می کنید restart کنید.
البته در manual روش دیگری را در کنار این روش بیان کرده بود و آن استفاده از قالب زیر برای کدها می باشد:

ob_start();
......your code
]ob_end _flush();

موفق باشید

oxygenws
دوشنبه 14 فروردین 1385, 15:36 عصر
output_buffering در اغلب هاست ها خاموشه.
ob_start و غیره هم به دلایلی، فقط برای رفع این مشکل، مردوده.

بهترین راه اینه که (1) اون چند کاراکتر اول رو، که برخی برنامه های مسخره می ذارند، حذف کنی (2) دقیقا خط اشکال رو بخونی تا بفهمی مشکل از کجاست!!

balis_pascal
دوشنبه 14 فروردین 1385, 15:47 عصر
سلام

من نتوانستم با روش شما مشکلم را حل کنم تنها روشی که جواب داد همان روشی است که گفتم.

balis_pascal
دوشنبه 14 فروردین 1385, 15:52 عصر
سلام

می توانم بپرسم منظور شما از
اون چند کاراکتر اول رو، که برخی برنامه های مسخره می ذارند، چیه؟
من نتوانستم با کمک winhex مشکلم رو حل کنم.
تنها روشی که برایم کاربرد داشت همان استفاده از output_buffering بود

oxygenws
دوشنبه 14 فروردین 1385, 16:22 عصر
چیه؟
برخی برنامه های ضعیف کد هایی به نام BOM اول فایل ها می ذارند تا انکودینک اون فایل رو تشخیص بدن، این کد ها "دیداری" نیستند و در پرینت صدمه ای به صفحه نمی زنند، اما در وب یا با تغییر انکودینک، ممکنه مشکل ایجاد کنند. نمونه این برنامه ها notepad می باشد.


من نتوانستم با کمک winhex مشکلم رو حل کنم.
شما دقیقا خط اشکال رو اینجا بنویس تا بگم مشکلت کجاست.

balis_pascal
دوشنبه 14 فروردین 1385, 16:40 عصر
Warning: Cannot modify header information - headers already sent by (output started at e:\wamp1\www\virtual learning\wellcom.php:8) in e:\wamp1\www\virtual learning\wellcom.php on line 10

Warning: Cannot modify header information - headers already sent by (output started at e:\wamp1\www\virtual learning\wellcom.php:8) in e:\wamp1\www\virtual learning\wellcom.php on line 12

php.ini را به حالت اول برگردوندم اشکال های در برنامه دوباره ظاهر شد

oxygenws
دوشنبه 14 فروردین 1385, 16:49 عصر
به خط زیر درست دقت کن:

output started at e:\wamp1\www\virtual learning\wellcom.php:8
اون عدد بعد از ":" شمارهء خط برنامه است.

ali_sed
سه شنبه 26 اردیبهشت 1385, 12:10 عصر
برای من نیز این مشکل پیش آمده.
فایلی رو که هیچ مشکلی نداشته را ادیت می کنی بعد دچار مشکل میشه وقتی کدی را که هدر را ارسال می کند کامل نکرده باشید و صفحه را در بروزر باز کنید بعد از درست کردن هدر همچنان کار نمی کند یک فایل جدید با نام دیگری درست کنید و محتویات اولی را بدون تغییر داخل فایل جدید قرار دهید دیگه با پیام خطا مواجه نمی شوید.
یک بار فایلی را بارها از لحاظ برنامه نویسی چک کردم ولی کار نکرد با این کار ساده مشکل حل شد.

goshkob
سه شنبه 26 اردیبهشت 1385, 13:47 عصر
این مشکل جالبه !:قهقهه:
چون با ادیتور های ویندوز کار میکنید بعضا 0xFE , 0xFF را ابتدای برنامه قرار میدهند که بفهمانند که ایت فایل unicode است.:چشمک:
راه حل آن این است که ابتدای php ات بنویسی

header ("Content-type: text/html; charset=utf-8");

بدین وسیله همیشه به browser میفهمانی که خروجی این فایل unicode است.

امید وارم جواب گرفته باشید.

armin390
سه شنبه 26 اردیبهشت 1385, 16:47 عصر
این مشکل جالبه!
این اصلاً مشکل نیست یک حقیقته کاملاً منطقیه!!!!!!!!!


راه حل آن این است که ابتدای php ات بنویسی
کد:

header ("Content-type: text/html; charset=utf-8");


بدین وسیله همیشه به browser میفهمانی که خروجی این فایل unicode است.

راه حلت اصلاً ربطی به این موضوع نداره دوست من
بعد از اینکه خروجی به مرورگر ارسال شد دیگه نمی شه هدری ارسال کرد!
در ضمن حتی راه حل شما هم با خطا روبرو میشه!

goshkob
چهارشنبه 27 اردیبهشت 1385, 11:06 صبح
بعد از اینکه خروجی به مرورگر ارسال شد دیگه نمی شه هدری ارسال کرد!
من گفتم

راه حل آن این است که ابتدای php ات بنویسی

ضمنا من خودم این مشکل را داشتم و زمان طولانی با آن کلنجار رفتم تا بدین نتیجه رسیدم.
بنظرم رسید که مشکل شما مانند آن باشد لذا ارسال کردم.

ولی بهرحال من با این کار دیگر با آن مشکل برخورد نکرده ام

armin390
چهارشنبه 27 اردیبهشت 1385, 11:28 صبح
راه حل آن این است که ابتدای php ات بنویسی



header ("Content-type: text/html; charset=utf-8");


فقط با ارسال این هدر

بدین وسیله همیشه به browser میفهمانی که خروجی این فایل unicode است.(utf-8)
همین!!!!(البته اگر قبلش به مرورگر خروجی ارسال شده باشه ارسال هدر با مشکل روبرو میشود)

برای اینکه هدری ارسال کنید باید قبلش به هیچ وجه خروجی ای! به مرورگر ارسال نشده باشد.

oxygenws
چهارشنبه 27 اردیبهشت 1385, 11:35 صبح
برای اینکه هدری ارسال کنید باید قبلش به هیچ وجه خروجی ای! به مرورگر ارسال نشده باشد.
ضمن تایید حرف های برادر آرمین، باید بگم که این "ارسال نشدن خروجی به مرورگر پیش از header" یکی از اصول اینترنت و "وب" می باشد و مستقیما ربطی به PHP نداره.

اگر واقعا در این مورد مشکل دارید و نمی تونید با خودتون کنار بیاید که چرا چنین اتفاقی میافته و فکر می کنید PHP بی شعوره، توصیه می کنم حتما سری به RFC مربوط به HTTP بزنید تا بفهمید که PHP بی شعور نیست و ...!!!!

Bahram0110
چهارشنبه 03 مرداد 1386, 00:36 صبح
سلام
منم الان همین مشکل واسم پیش اومد
از این تاپیک هم چیزی سر در نیاوردم :ناراحت:



Warning: Cannot modify header information - headers already sent by (output started at /home2/.../public_html/. . .anyfile.ext:1) in /home2/.../public_html/.../login.php on line 47

oxygenws
چهارشنبه 03 مرداد 1386, 10:18 صبح
توی انجمن جستجو کن.

hidensoft
چهارشنبه 03 مرداد 1386, 19:18 عصر
متاسفانه این مشکل اعصاب خرد کن php است.
این مشکل نیست بلکه یه قانون کلی هست که در تمامی زبان ها باید رعایت بشه !
فکر نکنم ASP با هدر ها هیچ رابطه نداشته باشه !

اگه شما با هدر مشکل داری هزار تا مثال توی منوال هست .
http://www.php.net/manual/en/function.header.php
کد هایی خیلی خفن تر از کد شما هم اونجا توضیح داده شده . فقط باید یکم تنبلی رو بزاریم کنار و جست و جو کنیم.


اگر واقعا در این مورد مشکل دارید و نمی تونید با خودتون کنار بیاید که چرا چنین اتفاقی میافته و فکر می کنید PHP بی شعوره، توصیه می کنم حتما سری به RFC مربوط به HTTP بزنید تا بفهمید که PHP بی شعور نیست و ...!!!!
100 % با oxygenws موافقم.


منم الان همین مشکل واسم پیش اومد
این همه توضیح دادن . شما جواب نگرفتی ؟

هدر قبلا ارسال شده . یه مشکلی در login.php هست. یا یه فضایه خالی گذاشتی یا ادیتورت یه چیزی قبل ار هدر اضافه کرده. فایلت رو توی یه ادیتور Hex باز کن .

__________________________________________________ ________

یه در خواستی هم از دوستان دارم. می دونم که بارها در این انجمن در مورد هدر توضیح داده شده اما اگه امکانش هست چند نفر که توی اینکار تجربه بیشتری دارند یه سری مطالب در باره هدر ها توی یه تاپیک جدا گانه بزارند تا یه مرجع در مورد هدر ها داشته باشیم و هر روز یکی نیاد بگه آقا هدر چیه ... چرا این اررور می ده (البته من منظورم هیچ کسی نیست).
البته این یه پیشنهاده . می دونم می خواید بگید چرا خودت توضیح نمی دی ولی من می خوام دوستان پیشکسوت توضیح بدن که تجربه کاری بیشتری داشتند.

__________________________________________________ ________

توضیحات بیشتر در مورد تابع header (http://www.php.net/manual/en/function.header.php)

موفق باشید

hidensoft
چهارشنبه 03 مرداد 1386, 19:52 عصر
با استفاده از این تابع هم می شه از بروز خطای headers already sent خلاص شد.
headers_sent (http://www.php.net/headers_sent)

راهی برای جلوگیری از نمایش این خطا توسط PHP هست.

موفق باشید.

hidensoft
چهارشنبه 03 مرداد 1386, 19:54 عصر
این تابع هم هدر های فرستاده شده به مرور گر رو برای شما لیست می کنه !
headers_list (http://www.php.net/manual/en/function.headers-list.php)

قابل توجه کسانی که نمی دونن چی باعث بروز خطای headers already sent شده !

موفق باشید.

Bahram0110
پنج شنبه 04 مرداد 1386, 18:23 عصر
مشکل با hex Editor حل شد

f_prim
سه شنبه 28 آبان 1387, 09:39 صبح
میشه بگین برای رهایی از این کاراکترهای مزاحم در دریم چه راهی وجود داره؟

f_prim
سه شنبه 28 آبان 1387, 09:53 صبح
میشه بگین برای رهایی از این کاراکترهای مزاحم در دریم چه راهی وجود داره؟

narsic
سه شنبه 28 آبان 1387, 09:56 صبح
با سلام
اگه در صفحه از متون فارسی استفاده کردید یا میکنید از این راه : با Nop Padd++ باز کنید و گزینه Encoding utf-8 without BOM رو انتخاب کنبد از منوی Format مشکل حل میشه
اگه متن فارسی یا متنی که که Format utf-8 نیست استفاده میکنید از این روش : فایلتون رو با یک ادیتور ساده مانند Note Pad یا Note Pad++ باز کنید سپس فایل را Save As کنید و سپس Encoding فایل را بر روی Ansi قرار دهید .
اینم یه مقاله که خودم نوشتم . (http://blog.narsic.ir/post-22.html)
موفق باشید

deviant
سه شنبه 28 آبان 1387, 12:19 عصر
من از vs.php استفاده می کنم و موقع ذخیرهصفحات می تونی براش تعیین کنی که با چه فرمتی ذخیره بشه.
توی این فرمت ها گزینه ای داره با عنوان Unicode - UTF8 without Signiture . با این گزینه دیگه همچین مشکلی پیش نمیاد.
برای حذف اون کاراکترها هم می تونی از یک ادیتور که unicode رو ساپورت نمیکنه استفاده کنی.
مثلا : tswebeditor (http://tswebeditor.tigris.org/index.html)

yaqubian
سه شنبه 28 آبان 1387, 12:44 عصر
دوست عزیز
من هم با deviant عزیز موافقم.
موفق باشید

امید امرایی
سه شنبه 28 آبان 1387, 14:27 عصر
با کسب اجازه از اساتید
تنها راه برای خلاصی همیشگی از این مشکل استفاده از یک ادیتور خوبه . هم برای کسانی که با PHP و منطقش مشکل دارن و هم برای کسانی که حوصله دونستن یا فکر کردن به این موضوعات رو ندارند. مثل خود بنده
http://www.aptana.com/studio/download

صحیح نیست این همه زمان صرف توضیح دادن در مورد مسئله ای تا این حد پیش پا افتاده بشه .
همون اولین جواب جناب oxygenws (http://barnamenevis.org/forum/member.php?u=4661) راه حل قطعی بود و بنده نمی دونم چرا این پست با لجاجت در مورد این موضوع داره اینقدر گمراه کننده می شه. قطعا مراجعه کننده ها از خوندن این همه پست تکراری نصیبی جز سردرگرمی نمی برن .

ضمن اینکه بنده می بینم شخص سوال کنند در پست 11 عینا عنوان کردن که مشکلشون حل شده .

با تشکر

zoghal
چهارشنبه 29 آبان 1387, 00:42 صبح
phpDesigner 2008 و Notepad++ هم هستند

janbozorgi
چهارشنبه 29 آبان 1387, 07:41 صبح
با کسب اجازه از اساتید
تنها راه برای خلاصی همیشگی از این مشکل استفاده از یک ادیتور خوبه . هم برای کسانی که با PHP و منطقش مشکل دارن و هم برای کسانی که حوصله دونستن یا فکر کردن به این موضوعات رو ندارند. مثل خود بنده
http://www.aptana.com/studio/download

صحیح نیست این همه زمان صرف توضیح دادن در مورد مسئله ای تا این حد پیش پا افتاده بشه .
همون اولین جواب جناب oxygenws (http://barnamenevis.org/forum/member.php?u=4661) راه حل قطعی بود و بنده نمی دونم چرا این پست با لجاجت در مورد این موضوع داره اینقدر گمراه کننده می شه. قطعا مراجعه کننده ها از خوندن این همه پست تکراری نصیبی جز سردرگرمی نمی برن .

ضمن اینکه بنده می بینم شخص سوال کنند در پست 11 عینا عنوان کردن که مشکلشون حل شده .

با تشکر


بنده در کنار صحبت منطقی دوستمون ادیتور nusphere PhpED رو پیشنهاد میکنم حتما تست کنید