מה זה Cannot modify header informat

danrez

New member
מה זה Cannot modify header informat

מה זה Cannot modify header information ואיך אני תופר את זה אני מקבל את ההודעה הבאה: Warning: Cannot modify header information - headers already sent by (output started at /home/segasco/public_html/data.php:1) in /home/segasco/public_html/index.php on line 51 data.php
<? //db access info $sql_host='********';//host $sql_user='********';//db user $sql_pass='********';//db pass $sql_db='**********';//db name //path and url $base_path="/home/segasco/public_html/";//full path to script $main_url="http://scratchy.cirtexhosting.com/~segasco";//url to the script $cookie_url=".segaboys.co.il";//the domain name of your website without http://www $tribes_folder="groups";//folder for groups to be created //mail addresses $admin_mail="[email protected]";//admin e-mail $system_mail="[email protected]";//system messages e-mail //admin access info $admin_login="*****";//login $admin_password="****";//password //(note: please, use password without any meaning to prevent hackers attack) /* Constant Variables */ $lines=10; $lines10=10; $lines15=15; $lines25=25; $lines50=50; $lcoun=1; /********************************/ $site_name="segaboys.co.il"; ?>​
index.php
<? require('data.php'); require('functions.php'); sql_connect(); $visit=cookie_get("visit"); $now=time(); $sql_query="select updated from stats"; $stats=sql_execute($sql_query,'get'); $num=sql_execute($sql_query,'num'); $day_of_week=date("w"); $month_start=mktime(0,0,0,date("m"),1,date("Y")); $week_start=mktime(0,0,0,date("m"),date("d")-$day_of_week,date("Y")); $day_start=mktime(0,0,0,date("m"),date("d"),date("Y")); if($num==0) { $sql_query="insert into stats (day_sgnin,week_sgnin,month_sgnin,day_vis,week_vis,month_vis,vis,updated) values ('$num','$num','$num',1,1,1,concat(vis,'|$now'),$now)"; sql_execute($sql_query,''); } if($stats->updated<=$month_start){ $sql_query="update stats set month_sgnin='0', month_vis='0', updated='$now'"; sql_execute($sql_query,''); } if($stats->updated<=$week_start){ $sql_query="update stats set week_sgnin='0', week_vis='0', updated='$now'"; sql_execute($sql_query,''); } if($stats->updated<=$day_start){ $sql_query="update stats set day_sgnin='0', day_vis='0', vis='', updated='$now'"; sql_execute($sql_query,''); } $day=24*3600; if($now-$visit>=$day){ $sql_query="update stats set day_vis=day_vis+1,week_vis=week_vis+1,month_vis=month_vis+1, vis=concat(vis,'|$now')"; sql_execute($sql_query,''); SetCookie("visit",$now,time()+60*60*24,"/",$cookie_url); }//if check($mode); ?>​
בבקשה אנא מכם עיזרו לי
 

Lasro

New member
איפשהו בקובץ

DATA.PHP יוצא פלט לדפדפן , מהרגע שיצא הפלט אתה כבר לא יכול לשנות HEADERS הפקודה SetCookie אמורה לשלוח HEADER אבל PHP מזהה שיצא פלט ולא שולח את הHEADER ועל כן האזהרה. תבדוק שאין איזה רווח או ירידת שורה בקובץ DATA , מחוץ לקטע הPHP ואין פלט בקובץ הזה. זהו בהצלחה
 

danrez

New member
השתנת לי השגיאה

עכשיו אני מקבל Warning: Cannot modify header information - headers already sent by (output started at /home/segasco/public_html/index.php:1) in /home/segasco/public_html/index.php on line 51 ראה באתר: http://scratchy.cirtexhosting.com/~segasco/ תודה
 

Lasro

New member
RE

בגלל האופי של הפרוטוקול HTTP לא ניתן לשלוח HEADERS אחרי שהשרת הוציא פלט לדפדפן. נאמר ויש לי את הקובץ הבא PHP הבאים
1.php ------ <? echo "output"; setCookie(...); ?> ------​
הפלט היחיד שיצא זה output פה תקבל גם אזהרה כי הוצאנו פלט לפני שינוי הHEADER ופה
2.php ------ <? setCookie(...); echo "output"; ?> ------​
נראה שתיקנו את הבעיה אבל גם פה נקבל אזהרה. אם שמת לב, נוסף התו ירידת שורה אומנם הוא בלתי נראה אבל בשביל השרת בשביל הדפדפן ולPHP זה פלט לכל דבר וכמו שאמרנו בתחילה לא ניתן לשלוח HEADER לדפדפן אחרי שהחל הפלט. מה שאתה צריך לעשות זה לעבור על כל הקבצים שקשורים (INCLUDE) ובדף עצמו ולוודות שאין אישזהו פלט. ניתן לעבוד עם output control, כדי לחסוך קצת כאב ראש מה גם שייתכן וזה יתן "ביצועים" טובים יותר בשירות הדפים. בכל אופן, כדאי גם לדאוג שאין פלט מיותר ושכל הHEADERים ישלחו לפני הפלט, זה יותר נכון לוגית. הסיבה שבשרת השני זה לא עושה לך את הבעיה זה או שהוא לא מוציא שיגאות ואזהרות כפלט. או שמערכת הoutput control מופעלת. אחרי שהבנת את מקור הבעיה אני בטוח שתצליח לפתור את הבעיה בהצלחה
 

Macpire

New member
אני חושב שזה משפיע על ההדאר

SetCookie("visit",$now,time()+60*60*24,"/",$cookie_url); } :|
 

danrez

New member
זה גם מה שאני חושב אך אינני יודע

איך מתקנים את זה
 

danrez

New member
דבר נוסף

אינני יודע אם זה קשור אך אני העלתי את הסקריפט הזה לשרת אחר ושם הוא לא עשה לי את הבעיה הזאת
 
אז..

אם על שרת אחר זה עובד, אז אני מנחש שבשרת האחר הוא לא מראה warnings של php. תנסה להוסיף בשורה הראשונה:
ini_set('display_errors','0');​
עוד משהו שיכול להיות, זה אם הקבצים נשמרים בפורמט UTF8, יש דבר כזה שנקרא BOM, שגם יכול לגרום לשגיאה.
 

N0

New member
לפי השגיאה

נשלח לך פלט ממש בתחילה של כל קובץ. זה יכול להיגרם משני דברים הראשון הוא שיש לך איזשהו תו לבן (רווח טאב) לפני התגיד שמתחילה את הPHP לכן תריך לבדוק טוב שאין שום רווחים לפני תחילת הקוד. מה שיותר סביר זה ששמרת את הקוד שלך בUTF8 והשתמשת בעורך ששומר BOM בתחילת הקובץ. אם זו הבעיה את צריכה להחליף עורך, NOTEPADPP מומלץ מאוד ויש שם אפשרות לשמירת UTF ללא BOM
 

danrez

New member
תודה רבה

זאת הבעיה השתמשתי בעורך Microsoft Expression Web וכאשר ערכתי את הטקסט בNOTEPAD זה לא עזה את הבעיות
 

bnayal

New member
notepad כן משאיר BOM....

אבל notepad++ לא, כנראה, לא היה לי נסיון איתו.
 
למעלה