PDA

View Full Version : اجرا پس از دستور



mmehdyt
شنبه 09 تیر 1386, 19:32 عصر
من سه تا صفحه دارم به اسم های x,y,z .
من می خوام تویy یه پیوند بذارم که به z بره اما می خوام تعداد کلیک هایی که روی لینک y می شه رو داشته باشم. برای اینکار پیوند رو به x نسبت دادم و توی x اینکد رو گذاشتم:

<script language="javascrpit">
window.location = "z";
</script>
<?php
codes;
?>
1. آیا کد php اجرا می شه؟
2. حالا اگه به جای کد js معادل php بذارم بازم کد دوم اجرامی شه؟

I,Nobody
شنبه 09 تیر 1386, 22:31 عصر
در حالت اول، اجرا میشه ولی در حالت دوم نه

mmehdyt
یک شنبه 10 تیر 1386, 14:15 عصر
توی حالت اول سرعت جابه جایی بین صفحات پایین می یاد؟

I,Nobody
یک شنبه 10 تیر 1386, 15:25 عصر
پایینتر از حالت دوم هست ولی چندان محسوس نیست. چون حجم صفحه ات خیلی کمه.
بذار توضیح بدم:
وقتی با استفاده از دستور جاوا اسکریپت یا تگ های متا اینکار رو ( که اصطلاحاً میگن redirect) انجام میدی، اول باید صفحه ریدایرکت کننده دانلود شه، بعدش درخواست برای انتقال به صفحه جدید به طور خودکار از طرف کاربر ارسال میشه.
ولی درصورتیکه توسط تابع header توی PHP اینکارو انجام بدی، از همون اول صفحه نهایی برای کاربر ارسال میشه. پس حالت دوم سریعتره.
البته استفاده از دستور header محدودیت هایی داره که قبلاً در موردش بحث شده.

البته دوست دارم اساتید هم نظرشونو اعلام کنن.

ealvandi
دوشنبه 11 تیر 1386, 01:18 صبح
با تشکر از توضیحات I,Nobody



استفاده از دستور header محدودیت هایی داره


در این مورد باید بگم که استفاده از دستور header محدودیت خاصی نداره ، فقط در مورد خالی کردن بافر اون هم در

یک صورت خاص کمی مورد داره که میشه بدون خالی کردن بافر به مقصود مورد نظر رسید.

http://barnamenevis.org/forum/showthread.php?t=69987

موفق باشید.

oxygenws
دوشنبه 11 تیر 1386, 02:24 صبح
۱- در هر دو حالت کد PHP اجرا میشه (مگر اینکه اون وسط سرور دان بشه :دی)
۲- سرعت هر دو حالت فرق چندانی با هم ندارند، چون در هر دو حالت عمل ریدایرکت از سمت کلاینت اجرا میشه. فقط چون header خام تر و سطح بالا تره، اندکی سرعتش بیشتر خواهد بود.
۳- از بافر استفاده نکنید و لطفا این اشتباه رو ترویج نکنید!! پست آخر همون تاپیک رو بخون!!

I,Nobody
دوشنبه 11 تیر 1386, 12:42 عصر
من تا حالا ندیدم پاسخ های امید(Oxygenws) مشکلی داشته باشه یا بدون سند علمی باشه.

اَرژنگ
دوشنبه 11 تیر 1386, 13:01 عصر
من سه تا صفحه دارم به اسم های x,y,z .
من می خوام تویy یه پیوند بذارم که به z بره اما می خوام تعداد کلیک هایی که روی لینک y می شه رو داشته باشم. برای اینکار پیوند رو به x نسبت دادم و توی x اینکد رو گذاشتم:

<script language="javascrpit">
window.location = "z";
</script>
<?php
codes;
?>1. آیا کد php اجرا می شه؟
2. حالا اگه به جای کد js معادل php بذارم بازم کد دوم اجرامی شه؟
کار راحتر این است که به جایه اینکه تعداد کیلکها را بشمارید در صفحه z, تعداد دفعاتی را که درخواست میشه بشمارید.

ealvandi
دوشنبه 11 تیر 1386, 15:41 عصر
از بافر استفاده نکنید و لطفا این اشتباه رو ترویج نکنید


بله ، من هم به همین موضوع اشاره کردم که لزومی به خالی کردن بافر نیست.


میشه بدون خالی کردن بافر به مقصود مورد نظر رسید.

oxygenws
دوشنبه 11 تیر 1386, 22:08 عصر
بله ، من هم به همین موضوع اشاره کردم که لزومی به خالی کردن بافر نیست.
اصلا نیازی به استفاده از بافر نیست.

musiox
دوشنبه 11 تیر 1386, 23:13 عصر
چون در هر دو حالت عمل ریدایرکت از سمت کلاینت اجرا میشه

می شه یه کم بیشتر توضیح بدین . ممنون می شم .

oxygenws
سه شنبه 12 تیر 1386, 02:24 صبح
می شه یه کم بیشتر توضیح بدین . ممنون می شم .مسلما میشه :)

در حالت جاوا اسکریپت، صفحه {احتمالا} با کدِ وضعیتِ ۲۰۰ (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) به سمت کلاینت ارسال میشه و مرورگر {یا agent} موجود روی سیستم کلاینت، اون صفحه رو کامل باز می کنه و اقدام می کنه به پردازش محتویات و با اجرای جاوا اسکریپت {البته اگر جاوا اسکریپت اش فعال باشه!!} کاربر رو ریدایرکت می کنه به صفحهء مورد نظر.

در حالتی که از header توی PHP استفاده میشه، آپاچی موظف میشه کدِ وضعیتِ ۳۰1 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2) رو بفرسته به سمت کلاینت و مرورگر {یا همون agent} قبل از تفسیر صفحه، طبق استاندارد موظف میشه آدرس ذکر شده در هدرِ response رو به جای آدرس فعلی جایگزین کنه و به همین دلایل عموما در آخر ارسال چنین هدری در PHP از دستور exit استفاده میشه تا برنامه خاتمه پیدا کنه.

پس در هر دو حالت عمل ریدایرکت توسط مرورگر یا مفسر یا agent یا ... در سمت کلاینت انجام خواهد شد. اوکی؟!