parse_url یا باحالی یک تابع
۲۸ تير ۱۳۸۹ ساعت ۰۶:۵۷
پی اچ پی
تابع نگو هلو بگو
در برنامه نويسي وب، گاهي لازم داريم که يک URL رو پردازش کنيم. مثلا از يه URL طولاني، domainاش رو بگيريم يا فقط آدرس صفحه اش رو بدست بياريم يا کوئريش رو بخونيم. براي چنين کارايي برنامه نويسهاي ناآگاه سراغ Regular Expression ميرند در حاليکه PHP عزيز براي اين کار تابع داره که با هلويي هرچه تمامتر حتي fragment يا hash آدرس رو هم ميده.
تابع parse_url در حالت استاندارد يک URL ميگيره و آرايه اي حاوي اجزاي آدرس ميده شامل اين قسمتها:
- scheme: همون http يا https يا ftp و غيره
- host: دامنه اصلي مثل Boplo.ir
- port: پورت اگر باشه
- user: همون username اگر باشه
- pass: رمز يا password اگر ست شده باشه
- path: مسير آدرس بعد از دامين
- query: کوئري يعني کاراکترهاي بعد از علامت "?"
- fragment: يا hash يا کاراکترهايي که بعد از علامت "#" ميان
براي نمونه همون مثالي که خود PHP مطرح کرده:
$url = 'http://username:password@hostname/path?arg=value#anchor'; print_r(parse_url($url)); /** * Output: * Array * ( * [scheme] => http * [host] => hostname * [user] => username * [pass] => password * [path] => /path * [query] => arg=value * [fragment] => anchor * ) */نکته مهم اين تابع اينه وقتي بجاي URL چرنديات تحويلش بديم، مقدار FALSE برميگردونه که ما بايد چک کنيم ولي بخاطر اينکه بيخود وقتش رو گرفتيم، يک خطاي E_WARNING هم صادر ميکنه که اگر نمايش اين دسته خطاها فعال باشه، خطا ميگيرم که مي تونيم اين مشکل رو با @ حل کنيم:
if( $url = @parse_url("chetoty googooli?") ) {
echo "Host: " . $url['host'];
} else {
echo "Invalid URL entered!";
}
از نسخه 5.1.2 به اين تابع يک پارامتر دوم اضافه شده که ميشه باهاش بجاي اينکه آرايه بگيريم، فقط بخش مورد نظر رو بصورت String بگيريم. مثلا اگر ميخوايم فقط کوئري آدرس رو بگيريم پارامتر دوم رو برابر PHP_URL_QUERY قرار ميديم. نمونه:
$url = "http://boplo.ir/?loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho echo parse_url($url, PHP_URL_QUERY); /** * Output: * loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho */
واسه اينکه موضوع کامل بشه، وقتي به کوئري يک تابع نياز داريم، معمولا اينکه مقدار هر کليد در اون کوئري چيه به درد ميخوره. پردازش کوئري کار خيلي ساده ايه ولي براي همون کار ساده ي چند خطي هم تابعي وجود داره به نام parse_str. مثلا براي پردازش کوئري مثال قبل، اينجوري لذت ميبريم:
$url = "http://boplo.ir/?loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho $query = parse_url($url, PHP_URL_QUERY); parse_str($query, $array); print_r($array); /** * Output: * Array * ( * [loveBoplo] => absolutely * [loveAmirHossein] => dige_poroo_nasho * ) */
از PHP لذت ببريم.


Google Chrome
تو چی فکر می کنی؟