منبع اصلی نوشتار زیر در این لینک قرار دارد

فوت کوزه گری!

گاهی یک فوت کوزه گری رو دونستن میتونه کلی بدادت برسه و از کلی دردسر نجاتت بده! یه قابلیت که توی فایلهای PHP هست اینه که اگه فایل PHP شما قرار نیست که ادامه داشته باشه یعنی قرار نیست بعد از اینکه کد تموم شد،‌ادامه فایل به صورت HTML باشه، اونوقت میتونید از گذاشتن علامت ?> در انتهای کد خودداری کنید. راستشو بخواید اول که این قابلیت رو دیدم کلا نفهمیدم به چه دردی میخوره یا اگه بیشتر راستشو بخواید به خودم گفتم این قابلیت اصلا احمقانه و به درد نخوره (نتیجه اخلاقی این پست اینه که زود قضاوت نکنید! )‌ ولی امشب فهمیدم که نخیر! اینطورا هم نیست!
قضیه اینطوریه که یه کدی دارم مینویسم که قراره یه تصویر رو از یه فایل بخونه و به خروجی بده (تابع readfile() از اون توابعیه که بعضیا کمتر میشناسنش!!)‌ همه چی درست بود (البته در ظاهر)‌ اما فایرفاکس خروجی رو نشون نمیداد. نتیجه رو که بررسی میکردم متوجه شدم که Content-Type هم درست ارسال میشه، ولی نمایش داده نمیشه. بارها و بارها کد رو بررسی کردم و هرچه بیشتر چک کردم کمتر نتیجه گرفتم.
تا بالاخره خروجی رو با یه ویرایشگر باینری (HexEditor ) چک کردم. نتیجه دو تا کاراکتر Space در ابتدای فایل تصویر بود. صفحات دیگه رو هم چک کردم. اونجا ها هم این دو تا کاراکتر اضافه بود، ولی خوب html مشکلی نداره با این فااصله های اضافی. فایلهای include شده رو یکی یکی بررسی کردم و آخر سر هم خرابکار، پروژه jDate خودم بود. توی یکی از فایلها بعد از پایان کد و تگ پایان PHP (یا همون ?> ) دو تا فاصله خورده بود. این فایل بعد از آغاز session و ارسال header ها استفاده شده بود و به همین دلیل مشکل خودشو توی اونها نشون نداده بود. جالبتر اینکه یه فایل دیگه هم پیدا کردم که دقیقا این مشکل رو داشت و یه Enter اضافه داشت، که خیلی پیش میاد تو یه ویرایشگر این اتفاق بیفته. تو همه فایلهای دوره ویندوزم هم این مشکل کم و بیش بود :) نتیجه گیری اینکه من از این به بعد کل فایلهایی که با کد PHP تموم میشن رو وقتی بنویسم، خصوصا فایلهایی که قرار نیست خروجی داشته باشن مثل همین کتابخونه ها، به همین صورت و بدون بستن کد PHP مینویسم، توصیه میکنم شما هم همین کارو بکنید. به دردسرش نمیرزه،‌این یه دفعه دقیقا ۴۵ دقیقه وقتمو گرفت!!
نکته دوم هم اینکه این پست اولین پست من با عینکه! دو سه روز پیش عینکی شدم!! :)

پستهای مرتبط :

  1. یه نکته کوچک در PHP همونطور که میدونید توی PHP برای اپراتور OR دو نسخه...



برچسب ها : , ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد