وبلاگ فيکسل برای گرافيست ها
SharpLife وبلاگ شخصی مهدی تقی زاده
بازگشت شاهو طوفانی
اين صداگذاری و ميکس آخرشه!
نکته جالبی در مورد تابع output_add_rewrite_var
کاراکتر های فارسی در عکس توسط PHP
مصاحبه من با مجله وزین IranAMP
واژه های فناوری اطلاعات و برابر های پیشنهادی فرهنگستان
دوره های آموزش IT
استانداردهای کدنويسی PHP
| صفحه قبل


IranPHP
نماينده رسمي سايت PHP.net

webilix
منبعي براي برنامه نويسان PHP

phprun
وبلاگي خواندني براي تمام PHP كارها

ם تعداد بازديدكنندگان
كل: 924754
ديروز: 915
امروز: 804
ם تعداد كاربران آنلاين
2 نفر
ם پنج مراجعه آخر
wworldpw.prv.pl
kinjoe.no-ip.be
serx.wml.in
dtpydryjd.hit.bg
dtpydryjd.hit.bg
 
 
نمونه عملی وب سرويس GlobalWeather
PEAR پريروز، در مورد استفاده از يک وب سرويس SOAP با کمک پکيج PEAR::SOAP مطلبی نوشتم، ديروز تصميم گرفتم که نمونه عملی اون رو هم روی سايت بگذارم تا نحوه کارکردش رو ببينيد. الان اکثر هوستينگها پکيج های استاندارد PEAR نظير PEAR::DB که يک Database Abstraction برای نوشتن اسکريپتهايی Portable برای بانک های اطلاعاتی مختلفه رو بصورت پيش فرض روی سيستم نصب میکنند. ولی مسلما گستردگی اين پکيج ها زياده و بجز چند پکيج استاندارد بقيه رو شما بايد بصورت Manual نصب کنيد. برای دريافت پکيج PEAR::SOAP تشريف می بريد اينجا. ویرایش آخر اين پكيج یعنی 0.8RC3، نياز به نسخه ۴.۱ به بالای PHP و نصب بودن اکستنشن PCRE (عبارات باقاعده سازگار با Perl) و نصب ۴ پکيج ديگه داره که معمولا Mail_Mime روی سرويس دهنده نصب هست و شما بايد زحمت سه تای ديگه رو بکشيد. پکيج HTTP_Request وابسته به پکيج Net_URL هست و بدون اون کار نمیکنه. بعد از دریافت این پکیج ها همشون رو کلا با دایرکتوری مربوطه روی سرویس دهنده منتقل میکنید و در یک پوشه قرار میدید، میتونید یه فایل htaccess. در روت اون دایرکتوری ایجاد کنید و این دایرکتوری رو به اینکلودهای php.ini اضافه کنید تا همیشه هر جا میخواستید از کتابخانه های PEAR استفاده کنید تا مجبور نباشید کل پکیج ها رو، تو روت صفحه اصلی بریزید تا اینکلود بشه!(در غیر اینصورت مجبورید تمام اینکلودها رو با آدرس نسبی تغییر بدید.)
من یک ساب دومین ساختم به نام ws که هر چی وب سرویس هست رو به مرور اینجا قرار میدم و شما می تونید نمونه عملی برخی از اونها رو ببینید.
برای دیدن این وب سرویس اينجا رو کليک کنيد و برای ديدن سورس کامل اينجا تقه! بزنيد. suprised

خارج از محدوده: اگه کسی سوالی تو کامنتها بپرسه، من اگه بلد باشم همونجا جوابشو ميدم. wink
 
نظرات شما(12)  
مطالعه موردی یک وب سرويس SOAP
XML Web Services امروز میخوام کمی در مورد Web Service ها و نحوه بکارگیری این خدمات توسط PHP صحبت کنم.
مقدمه
کسانی که تازه، وارد ِ وادی برنامه نویسی و اسکریپت نویسی میشن، همواره XML رو دیو دو شاخی می بینن که اصلا نمیشه حریفش شد و فکر می کنند این مفهوم خارج از کهکشان سایبر اومده و مثل shocked نیگاش میکنند!
در این پست که خیلی هم طولانی خواهد شد، میخوایم این دیو دو شاخ رو به زانو در بیاریم، البته به کمک PEAR و یه ذره سلیقه!
اصل قضیه
به زبان ساده، وب سرويسهای XML يک سری توابعی هستند که توسط سرويس دهنده ای در اينترنت در اختيار ما گذاشته می شه و ما می تونيم، اين توابع رو طوری در برنامه يا اسکريپت خودمون فراخوانی کنيم مثل اينکه اون توابع بصورت لوکال در دسترس مون هستند. تمام پروتوکلهای وب سرويس استاندارد، به فرمت سندهای XML بوده و رايج ترين اونها هم Simple Object Access Protocol يا به طور مختصر SOAP است.
وب سرويسهای SOAP معمولا با يک سند WSDL همراه هستند. WSDL مخفف Web Services Description Language می باشد و زبانی جهت توصيف وب سرويس هاست. سند WDSL وب سرويس GlobalWeather که من ميخوام به عنوان يک Case Study باهاش کارکنم در اين آدرس قرار داره:
http://live.capescience.com/wsdl/GlobalWeather.wsdl
ساده ترين راه برای استفاده از يک وب سرويس SOAP نظير GlobalWeather نصب پکيج PEAR::SOAP روی سرويس دهنده است.(برای دوستانی که با نصب PEAR آشنایی ندارند، بزودی مطالبی خواهم نوشت.) به مجرد نصب اين پکيج، می تونيم اسکريپتهای PHP، جهت بهره گيری از اين سرويس نوشت.
سرويس GlobalWeather به ما اجازه ميده تا ليستی از کشورها رو بازيابی کرده و فهرستی از فرودگاه های موجود در یک کشور خاص رو بدست بیاریم و نهایتا در مورد وضعیت آب و هوایی اون فرودگاه اطلاعاتی کسب کنیم. خوب؛ قسمت اول کد ما هم همين هدف رو دنبال می کنه:

<?php
require_once 'SOAP/Client.php';
$wsdl = new SOAP_WSDL(
  
'http://live.capescience.com/wsdl/GlobalWeather.wsdl');
//...
?>

اولين گام، همونطور که مشاهده می کنيد، خواندن سند WSDL وب سرويسی هست که ميخوايم ازش استفاده کنيم. بعد ِ اون يک آبجکت می سازيم که حاوی توابعيه که توسط وب سرويس ارائه ميشه. به اين آبجکت Proxy میگیم.

<?php
//...
$weather $wsdl->getProxy();
//...
?>

اولين کاری که بايد با پراکسی انجام بديم، فراخوانی تابع listCountries هست. خروجی اين تابع از نوع آرايه است، که از اون برای پر کردن يک منوی Drop-Down استفاده خواهيم کرد. کار رو می سپاريم به ساختار foreach که اين امکان رو به ما میده المنتهای يک آرايه رو خيلی راحت تراورس کنيم.(آخ که حال ميکنم با اين ساختارهايی که اينقدر کار رو راحت ميکنه suprised)

<?php
//...
$countries $weather->listCountries();
$select '<select name="country">';
foreach (
$countries as $country) {
  
$select .= '<option>' $country '</option>';
}
$select .= '</select>';
//...
?>

حالا اگه کاربر، يک کشور رو از ليست پايين افتادنی(Drop-Down) انتخاب کنه، نوبت فراخواني ِ تابع searchByCountry وب سرويس هست تا تمام فرودگاه های اون کشور رو ليست کنه و در يک جدول HTML نمايش بده.

<?php
//...
$table '';
if (isset(
$_GET['country']) and
    
in_array($_GET['country'], $countries)) {
  
$table '<table>';
  
$table .= '<tr><th>Airports in ' $_GET['country'] .
            
'</th></tr>';

  
$airports $weather->searchByCountry($_GET['country']);

  foreach (
$airports as $airport) {
    
$table .= '<tr><td>' $airport->string '</td></tr>';
  }
  
$table .= '</table>';
}
?>

در مورد تکه اسکريپت بالا هم توضيح خاصی نمی بينم. ولی از اونجايی که PHP يک زبان Loosly Type هست، ابتدا ما متغير table$ را با مقدار رشته کاراکتر تهی مقدار دهی اوليه می کنيم تا با Notice های بيخود مواجه نشيم. توجيه ديگش هم اينه که ابتدا جدول ما بايد خالی باشه. (یعنی قبل از انتخاب کشور از منوی پایین افتادنی)
بعد نکته بعدی اينکه اگه بخواهید متغيرهای GPC رو استفاده کنيد اول از تابع ()isset برای مطمئن شدن از گرفتن مقدار اوليه متغير کمک بگيريد. با استفاده از اين تابع همونطور که گفتم با Notice های اعصاب خرد کن برخورد نمی کنيم.(همیشه در زمان طراحی Error Reporting روی E_ALL باشه و فقط در محیط Productive هست که E_ALL ~ E_NOTICE توصیه میشه)
مثل اينکه زيادی زدم تو آفسايد! confused ولی خوب اين نکته ها، برای بعضی ها ميتونه مفيد باشه.
در نهايت با کمی HTML نوشتن ماحصل کار خودمون رو مشاهده خواهيم کرد:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> Global Weather Service </title>
<meta http-equiv="Content-Type"
  content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method="GET" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Pick a Country: <?php echo $select?>
<input type="submit" value="Search" />
</form>
<?php echo $table?>
</body>
</html>

فقط حواستون باشه که برخی کشورها، مثل ايالات متحده، فرودگاه های زيادی دارن و ممکنه باعث Timeout(گذر وقت!) شدن اسکريپت بشه چون ممکنه زمان زیادی برای واکشی تمام داده ها صرف بشه.
حالا ديديد استفاده از وب سرويسهای XML چقدر راحت و سادست؟! cool
 
نظرات شما(99)  

 
 
نام: نيما شايافر
متولد: 7/7/1362
تحصيلات: دانشجو
شغل: طراح وب و برنامه نويس
وضعيت: آفلاين

ماهيانه
مرداد 86 (2)
خرداد 86 (1)
دي 84 (4)
آذر 84 (5)
مرداد 84 (1)
تير 84 (1)
ارديبهشت 84 (2)
دي 83 (1)
آذر 83 (2)
آبان 83 (2)
مهر 83 (4)
شهريور 83 (6)
مرداد 83 (3)
تير 83 (7)
خرداد 83 (7)
ارديبهشت 83 (8)
فروردين 83 (13)
اسفند 82 (12)

موضوعي






جستجوي پيشرفته

BlogRolling is currently inaccessible.
©2004, Design & Developed by: Nima Shayafar. All rights reserved.