مشکل با تابع هدر (location) در پی اچ پی

nasser_ray

Member
خوشحالم که این تاپیک دوباره جون گرفت و به جواب رسید

اما در مورد این "hidensoft "
نقل قول:
مشکل کاملاً از utf-8 هستش و آن هم به خاطر یک بیت اضافی بنام BOM (Byte Order Mark) هستش
به هیچ وجه این طور نیست دوست من . notpad++ هم چند کارکتر Hex رو در ابتدای بعضی از فایل ها قرار می ده

من یادم نمی یاد که گفته باشم notepad++ بیت bom رو نداره چرا امونم داره البته تو utf-8 نه تویه حالت utf بدون bom . همین

موفق باشید
 

hidensoft

Member
یقینا شما از شخصیت بلایی برخوردار هستید
دوست من عنایت داشته باشید که همه مثل شما حرفه ای نیستند و مشکلاتی که شما 4 سال پیش به جوابش رسیدید یک نفر هست که امروز به این مشکل برخورده و این نه عیب هست و نه خنده دار چون تازه شروع کرده
لطف دارید .
به هیچ وجه من کسی نیستم و قصد جسارت نداشتم.
متوجه قدیمی بودن تاپیک نشدم وگر نه دخالت نمی کردم.
من یادم نمی یاد که گفته باشم notepad++ بیت bom رو نداره چرا امونم داره البته تو utf-8 نه تویه حالت utf بدون bom . همین
بنده اشتباه کردم ، عذر خواهی این داداش کوچیکتو قبول کن.

در مورد HEADER و windows.location
نمی خوام بحث رو پیچیده کنم ، تابع Header در PHP مستقیما شما را به فایل مورد نظر ارجاع می ده . این کار از طریق Header انجام می شه ، چنان چه شما یه خروجی داشته باشید بعدش بیاید 2باره به مرورگر یه header جدید ارسال کنید ، طبیعیه که مرور گر به شما یه ارور می ده . چون هدر ها ارسال شده و نمی شه دوبار header ارسال کرد. PHP هم یک خطا مبنی بر این موضوع صادر می کنه . در بزرگ ترین Framework هایی که دیدم از تابع ob_start استفاده شده که دوستمون روش استفاده رو توضیح دادن ، از دوست دیگه ای هم که این تابع رو توضیح دادن ممنونم.
خواهشا نگید که از منوآل استفاده کنم .
امید وارم شما این نگرشتون رو تغییر بدید.

موفق باشید
 

lepi

Member
این مثال رو عیناً از خود سایت php.net آوردم چون هم خیلی ساده و هم گویای مطلب است:

[ltr][/ltr]

خروجی این کد:

[ltr][/ltr]

چرا؟! چه شد؟!

ما یک فانکشن تعریف کردیم که اصلا ربطی به جریان نداره اما خوب کمک می کنه در درک ماجرا بنام callback کارش هم اینه که هر رشته ای رو که بگیره بررسی می کنه و اگر کلمه ی apple توش بود رو با orrange عوض می کنه.
خوب تو کدمون ما اول یک سری کد اچ تی ام ال داریم و قبلش از تابع [ltr]ob_start("callback"); [/ltr]استفاده کردیم. خوب این تابع اول از نمایش کلیه ی خروجی های صفحه جلوگیری میکنه تا وقتیکه که برنامه به او اجازه بده. بعد توی آرگومان خود یک فانکشن هم میپذیره بنام callback که کارش رو گفتیم.
نتیجه این شد که وقتی ما اجازه رو به تابع می دهیم برای چاپ خروجی با [ltr]ob_end_flush();[/ltr] متن خروجی که تابحال در بافرینگ شده بود چاپ میشه+تغییر کوچکی که تابع callback روش انجام میده. (نتیجه اینکه بجای اینکه طبیعتا متن اچ تی ام ال همانطور که هست چاپ بشه این متن ذخیره میشه و همراه با تغییرات تبدیل apple به oranges چاپ میشه.) حالا شما می تونید تصور کنید چطور تابع header رو می تونید بعد از ob_start بکار ببرید. :)


با سلام
يه سوال
حالا اگه بخوايم اين تغييرات اين طوري باشه كه مثلا همين سيب به پرتغال تغيير كنه و موز به هويج و گلابي به خرمالو چه بايد كرد
در كل منظورم اينه كه ايتم هايي كه بايد تغيير كنه بيشتر از يه مورد باشه
ممنون ميشم اگه جواب بديد
 
ببخشید که اینقدر دیر شد جواب. آخه دارم برای خدمت مقدس «ره» خودم را آماده می کنم و دیگه تو نت نمیام.

اگر درست فهمیده باشم شما می خواهید بیشتر از یک عنصر تغییر پیدا کنه.
در همون کدی که داشتیم:

function callback($buffer)
{
// replace all the apples with oranges
return (str_replace("apples", "oranges", $buffer));
}

ob_start("callback");

?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php

ob_end_flush();​

شما در قسمت فانکشن callback بجای یک buffer چند پارامتر buffer با هر نامی که دوست داشتی بکار ببر (موز، آناناس، کیوی و ... :wink: و در بدنه تابع بجای بکار بردن یک تابع str_replace به تعداد دلخواه. نگاه کن:
function callback($buffer1,$buffer2,$buffer3)
{
str_replace("apples", "oranges", $buffer1);
str_replace("banana", "peach", $buffer2);
str_replace("bean", "onion", $buffer3);
}

اگر احیانا جواب شما این نبود بگویید شاید دوباره تونستم کمکی کنم. ( از اینها => :rose: )
بای
 

seyed1385

Member
header یک نکته ای دارد که شما اساتید حتماً می دونین اما ممکنه به علت کثرت حجم کدها مغفول بمونه و اون اینه که هدر به خط خالی حساسه. باید خط های خالی که در انتها کدها مخصوصاً بعد از بستن کد پی اچ پی اتفاق می افته حتماً پاک بشه. اگر خط خالی در صفحه باشه معمولاً هدر عمل نمی کنه.
 

xz_amir

New Member
تشکر

من که واسه انتقال به صفحه دیگه از window.Location در داخل یه فانکشن PHP که خودم نوشتم استفاده می کنم . خیلی هم ازش راضی هستم . به این صورت :

PHP:
function redirect($url)
{
    $javascript ="
        <script type=\"text/javascript\" language=\"javascrip\">
        function redirect()
        {
            window.location = \"$url\";
        }
        </script>";

    print($javascript);
    exit;
}

خدا خیرت بده.ناجور مشکل داشتم
 

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

بالا