اخطار : این صفحه درباره APIهای قدیمی Google، Google Data APIها است. فقط مربوط به APIهایی است که در فهرست راهنمای Google Data APIs فهرست شده اند، که بسیاری از آنها با APIهای جدیدتر جایگزین شده اند. برای اطلاعات در مورد یک API جدید خاص، به مستندات API جدید مراجعه کنید. برای اطلاعات در مورد تأیید درخواستها با یک API جدیدتر، به تأیید اعتبار و مجوز حسابهای Google مراجعه کنید.
ویدئو: تروور جانز را تماشا کنید که نصب کتابخانه مشتری، معماری کتابخانه و بررسی کد را طی می کند.
به روز شده در اکتبر 2008 (در اصل توسط Daniel Holevoet نوشته شده است)
- معرفی
- پیش نصب
- در حال نصب PHP
- نصب Google Data PHP Client Library
- بررسی کنید تا مطمئن شوید که می توانید به فایل های کتابخانه مشتری دسترسی داشته باشید
- کجا بیشتر بدانیم
- پیوست A: ویرایش مسیر PHP خود در فایل پیکربندی
php.ini
- ضمیمه B: استفاده از PHP از خط فرمان
- پیوست ج: نکات و راهکارها
- تاریخچه ویرایشهای
معرفی
Google Data PHP Client Library مجموعه ای قدرتمند از کلاس ها است که به شما امکان می دهد با API های Google Data تعامل داشته باشید. برخلاف سایر کتابخانه های مشتری ما، به عنوان بخشی از چارچوب محبوب Zend بسته بندی شده است، اما می توان آن را به طور جداگانه نیز دانلود کرد. مشابه دیگر کتابخانه های مشتری ما، منبع باز است و به گونه ای طراحی شده است که ساده و کارآمد باشد، به شما امکان می دهد پروژه های خود را به سرعت شروع کنید.
پیش نصب
ممکن است PHP قبلاً روی ماشین توسعه یا وب سرور شما نصب شده باشد، بنابراین اولین قدم این است که این واقعیت را تأیید کنید و مطمئن شوید که نسخه PHP به اندازه کافی جدید است که برای کتابخانه مشتری استفاده شود. ساده ترین راه برای بررسی این است که یک فایل جدید را در دایرکتوری قابل دسترسی وب روی سرور خود قرار دهید. اطلاعات زیر را در فایل تایپ کنید:
<?php phpinfo(); ?>
سپس با تنظیم مجوزهای مناسب مطمئن شوید که از طریق وب قابل دسترسی است و از داخل مرورگر خود به مکان آن بروید. اگر PHP نصب شده است و سرور شما قادر به ارائه صفحات PHP است، باید چیزی شبیه به تصویر زیر مشاهده کنید:
اسکرین شات صفحه اطلاعات PHP را نشان می دهد. این صفحه نسخه نصب شده PHP (در این مورد 5.2.6) را به شما نشان می دهد که به همراه آن افزونه ها فعال شده اند (در قسمت 'Configure Command') و محل فایل پیکربندی داخلی PHP (در "بارگذاری شده" بخش فایل پیکربندی). اگر صفحه نمایش داده نمی شود یا اگر نسخه PHP شما قدیمی تر از 5.1.4 است، باید نسخه PHP خود را نصب یا ارتقا دهید. در غیر این صورت می توانید بخش بعدی را نادیده بگیرید و به نصب PHP Client Library ادامه دهید.
توجه: اگر به خط فرمان دسترسی دارید و قصد دارید از PHP برای اجرای اسکریپت های خط فرمان استفاده کنید، لطفاً بخش PHP خط فرمان را در این مقاله ببینید.
در حال نصب PHP
نصب بر اساس پلتفرم کمی متفاوت است، بنابراین مهم است که دستورالعمل های پلت فرم خاص خود را در حین نصب دنبال کنید. قبل از اینکه وارد بحث شویم، شایان ذکر است که بستههای از پیش نصب شده که شامل وب سرور آپاچی و پایگاه داده MySQL به همراه PHP نیز میشوند، محبوبیت زیادی پیدا کردهاند. برای Windows، Mac OS X و Linux، پروژه XAMPP وجود دارد. کاربران Mac OS X نیز حق انتخاب استفاده از پروژه MAMP را دارند. هر دوی این بسته ها از OpenSSL در PHP پشتیبانی می کنند (که برای تعامل با فیدهای احراز هویت شده لازم است).
اگر PHP را با استفاده از مراحل زیر نصب میکنید، مطمئن شوید که پشتیبانی از OpenSSL را نیز نصب و فعال کردهاید. جزئیات بیشتر در مورد آن را می توان در بخش OpenSSL سایت PHP یافت. بخش های زیر بر روی نحوه نصب PHP به تنهایی متمرکز شده است.
در ویندوز
ساده ترین راه برای نصب یا ارتقاء PHP در ویندوز، نصب کننده PHP است که در صفحه دانلودهای PHP موجود است.
- گزینه PHP installer (در قسمت Windows binaries) مربوط به جدیدترین نسخه PHP را انتخاب کنید و اجازه دانلود را به آن بدهید.
- نصب کننده را باز کنید و دستورالعمل های جادوگر نصب را دنبال کنید.
- وقتی جادوگر از شما درخواست کرد، وب سروری را که روی سیستم شما نصب شده است انتخاب کنید تا سرور را برای کار با PHP پیکربندی کند.
- نصب خود را با دنبال کردن مراحل ذکر شده در بخش بالا بررسی کنید.
در Mac OS X
PHP در OS X گنجانده شده است، اما قبل از استفاده از آن، باید به آخرین نسخه PHP ارتقا دهید. برای ارتقا، می توانید هر یک از چندین بسته باینری رایگان را نصب کنید یا خودتان آن را کامپایل کنید. برای جزئیات، به صفحه مستندات PHP در مورد نصب در Mac OS X مراجعه کنید.
پس از نصب یا راهاندازی OS X، با دنبال کردن مراحل ذکر شده در بخش پیشنصب این سند، نصب خود را بررسی کنید.
در لینوکس
بسته به توزیع لینوکس، ممکن است یک گزینه نصب داخلی یا آسان برای نصب PHP وجود داشته باشد. به عنوان مثال، در اوبونتو، می توانید از یک مدیریت بسته استفاده کنید یا فقط عبارت زیر را در ترمینال تایپ کنید:
sudo apt-get install php5
اگر نصب بسته بندی شده با توزیع لینوکس شما در دسترس نیست، باید از کد منبع نصب کنید. دستورالعمل های دقیقی برای کامپایل PHP برای Apache 1.3 و کامپایل PHP برای Apache 2 وجود دارد. PHP.net همچنین دستورالعمل هایی برای سرورهای دیگر دارد.
نصب Google Data PHP Client Library
اکنون که نسخهای از PHP را نصب کردهاید، نوبت به نصب کتابخانه مشتری رسیده است. کتابخانه سرویس گیرنده بخشی از چارچوب منبع باز Zend است اما می تواند به عنوان یک نسخه مستقل نیز دانلود شود. اگر قبلاً نسخهای از Zend Framework را نصب کردهاید (نسخه 1.6 یا بالاتر)، میتوانید از نصب صرفنظر کنید، زیرا کتابخانه Google Data Client در آن گنجانده شده است. با این حال، اطمینان از استفاده از آخرین نسخه فریم ورک تضمین می کند که تمام جدیدترین ویژگی ها و رفع اشکال در دسترس شماست، بنابراین معمولاً توصیه می شود.
دانلود فریم ورک کامل نه تنها به کتابخانه Google Data Client، بلکه به بقیه چارچوب نیز دسترسی خواهید داشت. خود کتابخانه سرویس گیرنده از چند کلاس دیگر استفاده می کند که بخشی از چارچوب کامل Zend هستند، اما نیازی به دانلود کل فریم ورک نیست زیرا ما آنها را در دانلود مستقل قرار داده ایم.
- فایلهای Google Data Client Library را دانلود کنید. (در آن صفحه «Google Data APIs» را جستجو کنید.)
- فایل های دانلود شده را از حالت فشرده خارج کنید. چهار زیرمجموعه باید ایجاد شود:
-
demos
- برنامه های کاربردی نمونه -
documentation
- اسناد برای فایل های کتابخانه مشتری -
library
- فایل های منبع کتابخانه مشتری واقعی. -
tests
- فایلهای تست واحد برای آزمایش خودکار.
-
- مکان پوشه
library
را به مسیر PHP خود اضافه کنید (به بخش بعدی مراجعه کنید)
بررسی کنید تا مطمئن شوید که می توانید به فایل های کتابخانه مشتری دسترسی داشته باشید
آخرین مرحله این است که مطمئن شوید که میتوانید به فایلهای PHP Client Library از دایرکتوری که در حال ساخت پروژه خود هستید، رجوع کنید و آنها را اضافه کنید. این کار با تنظیم متغیر include_path
در فایل پیکربندی PHP ( php.ini
) انجام می شود. متغیر include_path
حاوی تعدادی مکان دایرکتوری است که PHP هنگام صدور یک دستور مورد require
یا include
که کلاسها، کتابخانهها یا فایلهای خارجی را به اسکریپت فعلی شما میکشد، به آن نگاه میکند، شبیه به عبارت import
در جاوا. باید مکان فایلهای کتابخانه سرویس گیرنده را به آنچه قبلاً در include_path
شما تنظیم شده است اضافه کنید. این را می توان به دو روش انجام داد (که هر دو به تفصیل در زیر توضیح داده شده اند):
- دستورالعمل
include_path
را در فایل پیکربندیphp.ini
خود از خط فرمان به طور دائم تنظیم کنید - به دسترسی پوسته و مجوزهای نوشتن نیاز دارد. - متغیر مسیر
include_path
را در سطح "در هر فهرست" تنظیم کنید — به وب سرور آپاچی و توانایی ایجاد فایل های.htaccess
. نیاز دارد. - از تابع
set_include_path()
برای تنظیم پویا مسیر include در اسکریپت های خود استفاده کنید — می توانید به صورت پویا در هر یک از فایل های .php خود تنظیم کنید.
اگر به فایل php.ini
مجوز دسترسی و نوشتن پوسته دارید (یا اگر در حال نوشتن کد روی دستگاه محلی خود هستید)، به سادگی دستورالعمل های پیوست A را دنبال کنید. اگر از وب سرور آپاچی استفاده میکنید و توانایی ایجاد فایلهای htaccess . را دارید، میتوانید متغیر include_path
را در سطح "per directory" تنظیم کنید، به این معنی که همه فایلهای موجود در فهرستی که در آن کار میکنید به طور خودکار قادر هستند. برای ارجاع به دایرکتوری کتابخانه مشتری.
می توانید گزینه های پیکربندی PHP را همانطور که در قطعه زیر نشان داده شده است مشخص کنید:
# This works for PHP5 in both Apache versions 1 and 2 <IfModule mod_php5.c> php_value include_path ".:/usr/local/lib/php:/path/to/ZendGdata/library" </IfModule>
توجه: برای اطلاعات بیشتر در مورد تغییر تنظیمات پیکربندی به دفترچه راهنمای PHP مراجعه کنید.
اگر به سرور خود دسترسی پوسته ندارید و نمی توانید فایل های .htaccess را تغییر دهید یا ایجاد کنید، همیشه می توانید از تابع set_include_path
استفاده کنید. توجه داشته باشید که ممکن است مقداری مقداری برای include_path
خود تنظیم کرده باشید، بنابراین بهتر است به جای بازنویسی کل مسیر، از مدل زیر برای اضافه کردن مقادیر جدید پیروی کنید:
$clientLibraryPath = '/path/to/ZendGdata/library'; $oldPath = set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath);
توجه: لطفاً برای جزئیات بیشتر در مورد تابع set_include_path
به صفحات راهنمای PHP مراجعه کنید.
اجرای PHP Installation Checker
برای تأیید اینکه مسیر شامل شما به درستی تنظیم شده است، می توانید اسکریپت PHP Installation Checker را اجرا کنید. به سادگی محتویات آن فایل را کپی و در یک فایل جدید در دایرکتوری قابل دسترسی وب روی سرور خود کپی کرده و از مرورگر خود به آن پیست کنید. اگر خروجی مشابه زیر مشاهده کردید، پس همه چیز به درستی پیکربندی شده است و شما آماده استفاده از PHP Client Library هستید:
اگر خطا می بینید (مانند تصویر زیر)، مطمئن شوید که جهت را دنبال می کنید. ممکن است برنامه های افزودنی را از دست داده باشید یا مسیر شما هنوز به درستی تنظیم نشده باشد. به یاد داشته باشید که ممکن است لازم باشد سرور خود را مجددا راه اندازی کنید تا تغییرات اعمال شوند. این فقط در صورتی اعمال می شود که واقعاً فایل php.ini
را تغییر دهید. تصویر زیر نشان می دهد که include_path
روی /path/to/nowhere
تنظیم شده است:
توجه: لطفاً توجه داشته باشید که بررسیکننده نصب PHP موارد زیر را پشت سر هم بررسی میکند: (1) آیا پسوندهای PHP مورد نیاز نصب شدهاند، (2) آیا include_path
به فهرست راهنمای کتابخانه مشتری PHP اشاره میکند، (3) آیا میتوان اتصالات SSL ایجاد کرد و در نهایت، آیا می توان به YouTube Data API متصل شد. اگر آزمون خاصی ناموفق باشد، آزمون های باقی مانده اجرا نمی شوند.
اکنون که کتابخانه کلاینت نصب شده است، زمان اجرای نمونه ها فرا رسیده است.
اجرای نمونه ها
در ریشه دایرکتوری Zend/Gdata
یک پوشه از دموها وجود دارد - نمونه هایی برای کمک به شما برای شروع. برخی از این نمونه ها به گونه ای طراحی شده اند که از خط فرمان اجرا شوند مانند demos/Zend/Gdata/Blogger.php
و demos/Zend/Gdata/Spreadsheet-ClientLogin.php
، و می توانید آنها را با php /path/to/example
اجرا کنید. . نمونه های باقی مانده را می توان هم از خط فرمان و هم از یک مرورگر وب اجرا کرد. اگر میخواهید آنها را در مرورگر مشاهده کنید، باید در هر فهرستی که برای ارائه صفحات وب استفاده میکنید قرار داده شوند. این نمونهها باید یک ایده اولیه از نحوه نوشتن و اجرای یک برنامه Google Data را ارائه دهند، اما وقتی برای کارهای بیشتر آماده باشید، منابع دیگری برای برنامهنویس کنجکاو وجود دارد.
توجه: اگر علاقه مند به دیدن دموهای مبتنی بر وب به صورت آنلاین هستید، لطفاً از googlecodesamples.com دیدن کنید و برنامه های PHP را جستجو کنید.
کجا بیشتر بدانیم
بهترین مکان برای جستجوی اطلاعات در مورد کلاس هایی که بخشی از کتابخانه مشتری هستند، راهنمای مرجع API در سایت Zend Framework است. مطمئن شوید که بسته Zend_Gdata را از منوی کشویی انتخاب کنید.
در این مرحله باید برای شروع کدنویسی آماده باشید. بنابراین، ادامه دهید، چند برنامه عالی بنویسید. ما مشتاقانه منتظر دیدن نتایج شما هستیم!
می توانید راهنماهای توسعه دهنده PHP را برای خدمات زیر بیابید:
از آنجایی که PHP Client Library یک پروژه منبع باز است، پشتیبانی از API های بیشتری به طور مداوم اضافه می شود. هر سرویس گروه پشتیبانی خود را دارد، لطفاً برای فهرستی از گروههای پشتیبانی موجود، ورودی سؤالات متداول ما را ببینید.
اگر برای عیبیابی تماسهای API خود به کمک نیاز دارید، مقالاتی در مورد اشکالزدایی درخواستهای API با استفاده از ابزارهای ضبط ترافیک شبکه و استفاده از سرورهای پراکسی با Google Data API وجود دارد. همچنین چند مقاله خارجی در مورد نصب XAMPP در لینوکس و نصب XAMPP در ویندوز وجود دارد. علاوه بر همه این مقالات، حتماً پستهای مربوط به کتابخانه مشتری PHP را در وبلاگ نکات Google Data API بررسی کنید.
پیوست A: ویرایش مسیر PHP خود در فایل پیکربندی php.ini
مسیر PHP متغیری است که حاوی لیستی از مکانهایی است که PHP وقتی به دنبال کتابخانههای اضافی در حین بارگذاری میگردد، جستجو میکند. برای اینکه PHP بتواند فایلهای Google Data PHP Client Library را روی دستگاه یا سرور شما بارگیری کرده و به آنها دسترسی داشته باشد، باید آنها را در مکانی قرار دهید که PHP از آن اطلاع دارد. یا باید مکان فایل ها به مسیر PHP شما اضافه شود. توجه داشته باشید که تغییرات در php.ini
معمولا نیاز به راه اندازی مجدد سرور شما دارد. همیشه میتوانید با رفتن به صفحه اطلاعات PHP که قبلاً بحث شد ، مقدار فعلی متغیر include_path
را تأیید کنید. در جدول اول به دنبال سلول Loaded Configuration File بگردید و مسیر را در ستون سمت راست پیدا کنید.
توجه: اگر متوجه شدید که از php از خط فرمان استفاده می کنید، ممکن است لازم باشد یک متغیر مسیر اضافی را تغییر دهید. حتماً پیوست B را مرور کنید: استفاده از PHP از خط فرمان .
هنگامی که فایل php.ini
را پیدا کردید، این مراحل را دنبال کنید تا به مسیر اضافه شود.
- فایل
php.ini
را در ویرایشگر متن مورد علاقه خود باز کنید. - خطی را که به مسیر PHP ارجاع می دهد، پیدا کنید، باید با
include_path
شروع شود. - مسیری را که در Zend Framework ذخیره کردهاید به فهرست مکانهایی که قبلاً موجود است، اضافه کنید، و مسیر جدید خود را با جداکننده تعیینشده برای سیستمعامل خود (
:
در سیستمهای شبه یونیکس،;
در ویندوز) از قبل معلق کنید. یک مسیر صحیح در سیستم های یونیکس مانند چیزی شبیه به این است:/path1:/path2:/usr/local/lib/php/library
در ویندوز، چیزی شبیه به این خواهد بود:\path1;\path2;\php\library
- ذخیره کنید و فایل را ببندید.
توجه: در Mac OS X، Finder اجازه دسترسی به فایلهایی را که در مکانهای سیستمی مانند دایرکتوری /etc
هستند، نمیدهد. بنابراین، ویرایش آنها با استفاده از یک ویرایشگر خط فرمان مانند vi
یا pico
ممکن است سادهتر باشد. برای انجام این کار از دستوری مانند: pico /path/to/php.ini
استفاده کنید.
پیوست B: استفاده از PHP از خط فرمان
از نسخه 5 PHP، یک ابزار خط فرمان در PHP موجود است که به عنوان CLI برای "مفسر خط فرمان" نامیده می شود. استفاده از این ابزار به اسکریپت های php اجازه می دهد تا از خط فرمان اجرا شوند. شرایطی که این ممکن است مفید باشد این است که شما PHP را به صورت محلی روی دستگاه خود اجرا می کنید و به دنبال راه هایی برای آزمایش سریع برخی از اسکریپت ها هستید. البته در سرور شما، این به دسترسی پوسته نیاز دارد. نکته مهمی که باید به آن توجه داشت این است که PHP معمولا از دو php.ini
جداگانه استفاده می کند، یکی شامل گزینه های پیکربندی برای PHP در حال اجرا بر روی سرور شما و دیگری برای تنظیماتی است که PHP هنگام اجرا از خط فرمان استفاده می کند. اگر علاقه مند به اجرای برنامه های آزمایشی خط فرمان از کتابخانه مشتری هستید، باید فایل php.ini
خط فرمان را نیز تغییر دهید.
برای پیدا کردن آن، دستورات زیر را در سیستمهای شبه یونیکس (Mac OS X، Linux و غیره) تایپ کنید:
php -i | grep php.ini
این دستور باید منجر به نمایش اطلاعات زیر در ترمینال شما شود:
Configuration File (php.ini) Path => /etc/php5/cli Loaded Configuration File => /etc/php5/cli/php.ini
توجه: البته مکان های واقعی مسیر ( /etc/php...
) ممکن است در سیستم شما متفاوت باشد.
پیوست ج: نکات و راهکارها
این بخش شامل یک طرح مختصر از برخی از مسائلی است که توسعه دهندگان هنگام کار با PHP و راه حل های مناسب کشف کرده اند.
مشکل با پسوند dom-xml در XAMPP
کتابخانه مشتری PHP از کلاس های DODocument برای تبدیل درخواست ها و پاسخ های XML به اشیاء PHP استفاده می کند. پسوند dom-xml
میتواند در مدیریت XML مشکلاتی ایجاد کند و منجر به تبدیلهای نادرست شود. برخی از توسعهدهندگان ما دریافتهاند که هنگام استفاده از XAMPP، سازنده DOMDocument با یک فراخوانی تابع قدیمیتر، همانطور که در سایت PHP توضیح داده شد ، لغو میشود. برای رفع این مشکل، مطمئن شوید که مدیریت XML در فایل php.ini
شما رونویسی نشده است. مطمئن شوید که ارجاعات به php_domxml.dll
را از فایل پیکربندی خود حذف کرده اید.
زمانی که از کتابخانه سرویس گیرنده استفاده می کنید، درخواست ها به پایان می رسد
اگر از کتابخانه سرویس گیرنده برای انجام درخواستهای نسبتاً بزرگ، مانند آپلود ویدیوها در YouTube Data API استفاده میکنید، ممکن است لازم باشد پارامتر timeout
را در کلاس Zend_Http_Client
خود تغییر دهید. این را می توان به راحتی با پاس دادن یک پارامتر $config
در طول نمونه سازی انجام داد، که مقدار timeout
را روی چیزی غیر از پیش فرض 10 ثانیه تنظیم می کند:
// assuming your Zend_Http_Client already exists as $httpClient // and that you want to change the timeout from the 10 second default to 30 seconds $config = array('timeout' => 30); $httpClient->setConfig($config);
برخی از ارائه دهندگان هاست اجازه نمی دهند که اتصالات https از سرورهایشان ایجاد شود
شنیده ایم که برخی از ارائه دهندگان هاست به شما اجازه نمی دهند که از سرورهای پیش فرض خود اتصالات https
را ایجاد کنید. اگر پیام خطایی مشابه زیر دریافت کردید، ممکن است لازم باشد اتصالات https خود را از طریق یک پروکسی امن برقرار کنید:
Unable to Connect to sslv2://www.google.com:443. Error #110: Connection timed out
ارائه دهنده هاست شما باید اطلاعاتی در مورد آدرس واقعی سرور پراکسی برای استفاده داشته باشد. قطعه زیر نشان می دهد که چگونه می توان از یک پیکربندی پروکسی سفارشی با کتابخانه مشتری PHP استفاده کرد:
// Load the proxy adapter class in addition to the other required classes Zend_Loader::loadClass('Zend_Http_Client_Adapter_Proxy'); // Configure the proxy connection with your hostname and portnumber $config = array( 'adapter' => 'Zend_Http_Client_Adapter_Proxy', 'proxy_host' => 'your.proxy.server.net', 'proxy_port' => 3128 ); // A simple https request would be an attempt to authenticate via ClientLogin $proxiedHttpClient = new Zend_Http_Client('http://www.google.com:443', $config); $username = 'foo@example.com'; $password = 'barbaz'; // The service name would depend on what API you are interacting with, here // we are using the Google DocumentsList Data API $service = Zend_Gdata_Docs::AUTH_SERVICE_NAME; // Try to perform the ClientLogin authentication using our proxy client. // If there is an error, we exit since it doesn't make sense to go on. try { // Note that we are creating another Zend_Http_Client // by passing our proxied client into the constructor. $httpClient = Zend_Gdata_ClientLogin::getHttpClient( $username, $password, $service, $proxiedHttpClient); } catch (Zend_Gdata_App_HttpException $httpException) { // You may want to handle this differently in your application exit("An error occurred trying to connect to the proxy server\n" . $httpException->getMessage() . "\n"); }
تاریخچه ویرایشهای
1 اکتبر 2008
به روز شده توسط یوخن هارتمن. این به روز رسانی شامل تغییرات زیر است:
- پیکربندی PHP را برای سرورهای وب با انتقال بخشهایی که به PHP خط فرمان اشاره میکنند به یک ضمیمه واضحتر کرد.
- یادداشتی در مورد چندین فایل پیکربندی php.ini اضافه شد.
- بخش هایی در مورد نحوه تنظیم پویا include_path اضافه شده است.
- بخش اضافه شده در اسکریپت بررسی کننده نصب.
- لینک به نمونه های آنلاین اضافه شد.
- پیوندهایی برای XAMPP و MAMP اضافه شده است.
- ضمیمه "نکات و راه حل ها" اضافه شده است.