مطالب برچسب شده ‘php’

ubuntu با آخرین نسخه‌ی php

جمعه, 29 شهریور 1387

چند روز پیش به یک مشکل عجیب توی php برخوردم. یک کدی بود که وقتی اجراش میکردم پنجره دانلود می اومد. بررسی که کردم دیدم هیچ هدر و خروجی ارسال نمیشه و از اونجایی که هدر نداره پنجره دانلود میاد. ظاهرا یک جایی وسط کار php کرش میکنه. خلاصه trace کردم تا رسیدم به اون قسمتی که مشکل رو ایجاد کرده بود. اونقدر سر و ته کد ها رو زدم تا به خط مورد نظر رسیدم. و حدس زدم که باگ از php باشه. جالب اینجا بود که روی لوکال این مشکل رو نداشتم بعد فهمیدم که این مشکل فقط توی php 5.2.6 هست و از اونجایی که php که همراه ubuntu 8.04 هست php 5.2.4 هست، من متوجه این مشکل نشده بودم.
توی قسمت باگ های php که سرچ کردم دیدم حدود 4 ماه پیش یک نفر این باگ رو گزارش داده و حدود 2 ماه هم هست که توی CVS رفع شده.  فعلا تا اومدن نسخه جدید php مجبور شدم به یک روش سرخ پوستی این باگ رو دور بزنم.

همه‌ی اینها رو گفتم که بگم اگر نسخه‌ی php روی لوکال آپدیت بود زودتر متوجه مشکل می‌شدم و این همه وقت صرف پیدا کردنش نمی‌شد. البته دلایل دیگه ای هم میتونید برای آپگرید کردن php روی لوکال داشته باشید.

حال و حوصله نصب php از سورس رو نداشتم، تازه هر موقع نسخه جدید میومد باید دوباره کامپایل میکردم. این apt هم بد جوری ما رو بد عادت کرده.

یه سرچ کردم سایت dotdeb.org رو پیدا کردم. به لطف apt به سه سوت php آپگرید شد و هر موقع هم که آپدیت جدید بیاد به یک سوت میتونم آپگریدش کنم.

به قول جادی به نظر شما این سیستم عامل زیبا نیست؟

سازگار کردن کد با ورژن های جدید php

چهارشنبه, 28 شهریور 1386

هر بار با بروز رسانی php ممکنه تغییرات جدیدی در php ایجاد بشه که برای برنامه نویس ها درد سر ساز بشه. البته معمولا این دردسر ها زیاد جدی نیستند و با تغییر مختصری در کد مشکل حل میشه. ولی share کردن تجربیات در این زمینه میتونه پیدا کردن و رفع مشکلات رو راحت تر کنه.

عمده ترین مشکل در بروز رسانی از نسخه 4 به 5 تداخل شناسه های برنامه شما با شناسه ها و یا کلمات کلیدی جدید در php5 هست که با تغییر نام دادن اون شناسه مشکل حل میشه. برای مثال تداخل نام کلاس soapclient در nusoap با کلاس soapclient در php5.
بهترین راه برای پیشگیری از وقوع اینگونه تداخل ها استفاده از namespace در نام گذاری کلاس ها و توابع است. یعنی از انتخاب نام های عمومی برای شناسه ها خودداری کنید و مثلا حروف اختصاری نام خودتون یا شرکتتون رو به عنوان پیشوند یا پسوند در نام گذاری شناسه استفاده کنید. مثلا بهتر بود که به جای نام soapclient از نام nu_soapclient استفاده میشد.

و اما مشکل دیگه ای که من برخورد داشتم این بود که در php5 در حالت CLI (خط دستور) دایرکتوری جاری با مسیر فایل php یکسان نیست و اگر بخواهید فایلی رو include کنید و یا با فایل ها کار کنید باید حتما قبلش chdir کنید به مسیر مورد نظر. جالب اینجاست که این تغییر در php5.2.4 مجددا به حالت قبل برگشته است.

مشکل دیگه ای هم که من بعد از بروز کردن به php 5.2 داشتم و ساعت ها وقت من رو گرفت این بود که در صورت استفاده از ob_start با callback چنانچه output buffering بدون استفاده از توابع مربوطه خاتمه یابد درون تابع callback نمیتوان از یک آبجکت که قبلا تعریف شده استفاده کرد.
این مشکل بیشتر شبیه به یک باگ هست تا تغییر ورژن. لذا من بعد از کلی کلنجار رفتن با این مشکل به قسمت گزارش باگ در سایت php رفتم و با یک سرچ متوجه شدم که این مشکل ناشی از اینه که در ورژن جدید بعد از خاتمه کد اول آبجکت ها destroy میشن بعد بافر خالی میشه. پس برای رفع این مشکل تنها راه اینه که قبل از خاتمه برنامه خودمون بافر رو خالی کنیم. برای اطلاعات بیشتر در مورد این مشکل اینجا رو کلیک کنید.

و اما مشکلی که در آخرین بروز رسانی به php 5.2.4 پیش اومد. اینکه در حالت CLI عنصر SCRIPT_FILENAME از آرایه سراسری $_SERVER مقدار نداره. (در مورد سایر عناصر تست نکردم شاید اونها هم تغییر کرده باشه)
و اما تغییر دیگه ای که تو این نسخه بود و قبلا بهش اشاره کردم اینکه در حالت CLI دایرکتوری جاری مجددا در این ورژن با مسیر فایل php یکسان شده.

البته این ها فقط مواردی بود که من برخورد داشتم و تغییرات بیشتر از این حرفهاست.

معمولا خود سایت php برای تغییرات در نسخه های ماژور، سرفصلی در php manual باز میکنه. که موارد زیر از آن جمله اند:

http://www.php.net/manual/en/faq.migration5.php
http://www.php.net/manual/en/migration5.php
http://www.php.net/manual/en/migration51.php
http://www.php.net/manual/en/migration52.php

برای نسخه های مینور هم میتونید به ChangeLog مراجعه کنید.

Open Komodo

پنجشنبه, 22 شهریور 1386

به تازگی شرکت Active State از راه اندازی پروژه Open Komodo خبر داده است که یک بستر Open Source برای توسعه سایر IDE ها خواهد بود. چیزی شبیه به Eclipse با این تفاوت که Eclipse با جاوا نوشته شده و این پروژه بر بستر Mozilla توسعه یافته است. از مزایای توسعه بر بستر Mozilla می توان به Cross Platform بودن و توسعه پذیر بودن آن اشاره کرد. گفتنی است Active State قصد دارد سایر محصولات خود از جمله Komodo IDE و Komodo Edit را بر روی بستر Open Komodo توسعه دهد.

Komodo Edit ادیتوری قدرتمند و رایگان است که از اکثر تکنولوژی های وب از جمله php و javascript و HTML و XML به خوبی پشتیبانی میکند. و با توجه به اینکه بر بستر Mozilla توسعه یافته، مشابه FireFox قابل توسعه توسط Extention های xpi می باشد.

احتمالا Open Komodo اوایل نوامبر در دسترس خواهد بود.