יפה מאוד, שמעת לי
ונתחיל בשאלה שלשמה התכנסנו:
PHP
ש: כתבתי session_start, והופיעה לי שגיאה. מה לעשות?
ת: קודם כל אני מדבר על השגיאה בפורמט הבא:
Warning: session_start(): Cannot send session cache limiter - headers already sent
דבר שני, יכול להיות שבשרת מבוטל הerror_reporting, ולא תופיע שגיאה, הסשן פשוט לא יעבוד.
תבדקו בכל מקרה.
האפשרות הראשונה היא שכתבתם משהו לפני הsession_start. מספיק אנטר לפני סימן הפתיחה (לדוגמא ה<?php), והשגיאה תופיע. (מדובר לא רק על אנטרים! כל טקסט פלט..)
דבר שני שנקרא פלט הוא echo, print וכדומה - פונקציות הדפסה "שולחות" את ההיידרים לפני הפלט.
במקרה כזה יש אפשרות להוסיף את הsession_start() לפני הפלט, או פשוט להוסיף את הפונקצייה ob_start() לפני הפלט (ובסופו מומלץ ob_end_flush()).
האפשרות השניה מדברת על האנשים שמשתמשים בקידוד UTF-8.
אם אתה עובד עם הקידוד, ואתה משתמש בנוטפד של WINDOWS או כל עורך תמלילים אחר שמוסיף BOM בהתחלה, תהיה לך את הבעיה.
BOM הוא פלט שמתווסף בשמירה בקידוד UTF-8 לראש הטקסט, ובגלל זה ההיידרים נשלחים לפני הטקסט.
האפשרויות במקרה הזה הן או לשמור בתור ANSI ולא בתור UTF-8 (אפשר עדיין להשתמש בהיידר לקביעת סוג התוכן, אבל זה מסתבך קצת) או לעבוד עם עורך תמלילים אחר.
העורכים שמסוגלים לעשות משהו כזה הם Notepad2 (חיפוש בפורום), Notepad++ ו-Zend Studio. האחרון שציינתי עולה כסף, האחרים חינמים.
יש עוד עורכים כמו PHPEdit שיוכלו לעזור.. הבאתי רק רשימה חלקית מאוד.
הערה על השגיאה:
שגיאה זאת יכולה להופיע לכל קוד אשר מצריך שלא יהיה לפניו פלט HTML, ואפילו רווח מהווה פלט HTML, ולכן בראש הדף כמו שכתבת, מוסיפים את הקוד, ובתחתית הדף, את קוד הסגירה.
תודה לטל (WebProject) על ההערה