PDA

View Full Version : سوال: آیا استفاده از تابع ob_start() قبل از تگ <HTML> باعث نمایش صفحه وب در مد غیر استاندارد می شه؟



idocsidocs
سه شنبه 09 آذر 1389, 10:57 صبح
همونطور که می دونید هنگام استفاده از توابع کوکی و سسشن، باید هدر اولین خروجی صفحه باشه تا با ارور مواجه نشیم، در غیر این باید از تابع ob_start() قبل از اولین خروجی استفاده کنیم.

توی یه کتاب خوندم که اگر هر عبارتی قبل از عنوان doctype قرار بگیره باعث می شه که صفحه در مد غیر استاندارد نمایش داده بشه.

سوالی که برام پیش می یاد اینه که اگه از یکی از کدهای زیر استفاده کنیم مرورگر صفحه رو در چه مدی نمایش می ده؟



<?php
Ob_start();
<!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" />

.
.
.
?>

<?php
Session_start();
If(isset($_SESSION[admin]))
{
<!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" />

.
.
.
?>

eAmin
سه شنبه 09 آذر 1389, 12:08 عصر
دقیقا در مدی که برای DOCTYPE استفاده کردید، مرورگرها معمولا از طریق DOCTYPE تشخیص میدن که صفحه ی مورد نظر رو به چه صورت رندر کنند.

موفق باشید.

binyaft
سه شنبه 09 آذر 1389, 12:42 عصر
ربطی به ob_start نداره!

idocsidocs
سه شنبه 09 آذر 1389, 12:59 عصر
ربطی به ob_start نداره!

توی یه کتاب خوندم که اگر هر عبارتی قبل از عنوان doctype قرار بگیره باعث می شه که صفحه در مد غیر استاندارد نمایش داده بشه. شما در مورد مطلبی که توی این کتاب نوشته بود چی می گید؟

mtchabok
سه شنبه 09 آذر 1389, 13:37 عصر
سلام این کدی که نوشتی اشتباه هست .
چونکه بلوک DOCTYPE به زبان HTML هست نه PHP بنابراین نباید در قسمت php اینو بنویسی چونکه صفحه ات خطا دارمیشه ...
در ضمن ob_start فقط یک بافر خروجی هس که تمامی خروجی ها رو از لحظه شروع تابع تا تابع پایانیش ، ذخیره میکنه و بعدش با دستور ob_flush و ... برای مرورگر کاربر می فرسته ...

binyaft
سه شنبه 09 آذر 1389, 14:33 عصر
توی یه کتاب خوندم که اگر هر عبارتی قبل از عنوان doctype قرار بگیره باعث می شه که صفحه در مد غیر استاندارد نمایش داده بشه. شما در مورد مطلبی که توی این کتاب نوشته بود چی می گید؟
منظورش نوشته یا تگی هست که بعد از تفسیر در صفحه دیده بشه! ob_start مقدار بازگشتی ای رو نمایش میده !

idocsidocs
سه شنبه 09 آذر 1389, 15:31 عصر
سلام این کدی که نوشتی اشتباه هست .
چونکه بلوک DOCTYPE به زبان HTML هست نه PHP بنابراین نباید در قسمت php اینو بنویسی چونکه صفحه ات خطا دارمیشه ...
در ضمن ob_start فقط یک بافر خروجی هس که تمامی خروجی ها رو از لحظه شروع تابع تا تابع پایانیش ، ذخیره میکنه و بعدش با دستور ob_flush و ... برای مرورگر کاربر می فرسته ...

می شه بگید چه خطایی؟

mtchabok
چهارشنبه 10 آذر 1389, 15:09 عصر
کد درستش این میشه :


<?php
Ob_start();
Session_start();
If(isset($_SESSION[admin]))
{
?>
<!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" />

.
.
.

</div>

mtchabok
چهارشنبه 10 آذر 1389, 15:14 عصر
البته در آخر هم باید تابع ارسال صفحه در بافر رو بنویسی تا صفحه ذخیره شده در بافر برای مرورگر کاربر ارسال بشه .
نام تابعش هم ob_flush هست .