مشکل این کد چیه؟

sranimation

Member
کد:
[COLOR="Red"]<?php
session_start();
if($_SESSION["valid_user"])
header('Location: http://www.google.com');
?>[/COLOR]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وب سایت آزمایشی</title>

<link rel="stylesheet" type="text/css" href="jqueryslidemenu.css" />

<!--[if lte IE 7]>
<style type="text/css">
html .jqueryslidemenu{height: 1%;} /*Holly Hack for IE7 and below*/
</style>
<![endif]-->

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<script type="text/javascript" src="jqueryslidemenu.js"></script>

</head>

ارور میده
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/turbogro/public_html/tornado/uploadgr.php:1) in /home/turbogro/public_html/tornado/uploadgr.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /home/turbogro/public_html/tornado/uploadgr.php:1) in /home/turbogro/public_html/tornado/uploadgr.php on line 4

هیچی قبل از کد وجود نداره که خروجی داشته باشه. مشکل از کجاست؟ :cry:
 

ziXet

مدیر انجمن PHP/MYSQL
کد:
[COLOR="Red"]<?php
session_start();
if($_SESSION["valid_user"])
header('Location: http://www.google.com');
?>[/COLOR]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وب سایت آزمایشی</title>

<link rel="stylesheet" type="text/css" href="jqueryslidemenu.css" />

<!--[if lte IE 7]>
<style type="text/css">
html .jqueryslidemenu{height: 1%;} /*Holly Hack for IE7 and below*/
</style>
<![endif]-->

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<script type="text/javascript" src="jqueryslidemenu.js"></script>

</head>

ارور میده
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/turbogro/public_html/tornado/uploadgr.php:1) in /home/turbogro/public_html/tornado/uploadgr.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /home/turbogro/public_html/tornado/uploadgr.php:1) in /home/turbogro/public_html/tornado/uploadgr.php on line 4

هیچی قبل از کد وجود نداره که خروجی داشته باشه. مشکل از کجاست؟ :cry:
مشکل امضای BOM هست که در ابتدای فایل قرار میگیره!
شما باید از یک ادیتور پیشرفته مثل EmEditor یا ++Notepad یا... استفاده کنید
در هنگام save مردن فایل باید BOM signature رو بردارید تا درست بشه

موفق باشید
 

ziXet

مدیر انجمن PHP/MYSQL
ممنون. درست شد
کل اینترنت را زیر و رو کردم نفهمیدم مشکل چیه
این مشکل یکی از متداول ترین مشکلاتیست که برنامه نویس های تازه کار در استفاده از سشن باش مواجه میشن!

موفق باشید
 

MMSHFE

Active Member
با سلام، استفاده از بافر خروجي در PHP هم ميتونه كمك كنه. كد زير رو قبل از بازكردن تگ HTML (دقيقاً در ابتداي اسكريپت) قرار بديد:
PHP:
<?PHP
    ob_start();
?>
و اين كد رو بعد از بستن تگ HTML (دقيقاً در انتهاي اسكريپت) بگذاريد:
PHP:
<?PHP
    ob_end_flush();
?>
استفاده از بافر خروجي باعث ميشه كه اطلاعات براي مرورگر ارسال نشه. دستور اول بافر خروجي رو فعال ميكنه و كل محتويات صفحه بجاي ارسال به مرورگر، در بافر قرار ميگيره. در انتها هم كد دوم باعث ميشه محتويات بافر بعد از تكميل شدن صفحه و اجراي دستورات Session و... بصورت يكجا براي مرورگر ارسال بشه.
موفق و مؤيد باشيد.
 

sranimation

Member
از این کد استفاده کردم ولی جواب نداد. همان ارور تکرار می شد
bom را که برداشتم درست شد
 

meysam-fathi

Active Member
با سلام، استفاده از بافر خروجي در PHP هم ميتونه كمك كنه. كد زير رو قبل از بازكردن تگ HTML (دقيقاً در ابتداي اسكريپت) قرار بديد:
PHP:
<?PHP
    ob_start();
?>
و اين كد رو بعد از بستن تگ HTML (دقيقاً در انتهاي اسكريپت) بگذاريد:
PHP:
<?PHP
    ob_end_flush();
?>
استفاده از بافر خروجي باعث ميشه كه اطلاعات براي مرورگر ارسال نشه. دستور اول بافر خروجي رو فعال ميكنه و كل محتويات صفحه بجاي ارسال به مرورگر، در بافر قرار ميگيره. در انتها هم كد دوم باعث ميشه محتويات بافر بعد از تكميل شدن صفحه و اجراي دستورات Session و... بصورت يكجا براي مرورگر ارسال بشه.
موفق و مؤيد باشيد.
نیازی به ob_start نیست همون که ziXet گفت کافیه. اگه فایل BOM در UTF-8 ذخیره نشه این اتفاق زیاد میفته.البته استفاده از دستورات ob کار رو برای ریدایرکت کردن وسط صفحه بیشتر به درد میخوره. که این قضیه هم از نظر من اشتباه چون ریدایرکت باید زمانی انجام بشه که کاربر هنوز چیزی ندیده.
 

MMSHFE

Active Member
نیازی به ob_start نیست همون که ziXet گفت کافیه. اگه فایل BOM در UTF-8 ذخیره نشه این اتفاق زیاد میفته.البته استفاده از دستورات ob کار رو برای ریدایرکت کردن وسط صفحه بیشتر به درد میخوره. که این قضیه هم از نظر من اشتباه چون ریدایرکت باید زمانی انجام بشه که کاربر هنوز چیزی ندیده.
با سلام، درمورد Redirect با شما مخالفم چون ممكنه براثر وقوع شرايط خاصي اين عمل انجام بشه يا كلاً نياز باشه در وسط صفحه اين عمل اتفاق بيفته. در چنين مواردي بهتره براي اطمينان بيشتر از ob استفاده كنيم. البته تا جايي كه بررسي كردم، اكثر سرورهاي جديد توي تنظيمات PHP گزينه output_buffering رو بصورت پيشفرض فعال كردن. موفق و مؤيد باشيد.
 

جدیدترین ارسال ها

بالا