مدیریت فایلها در PHP قسمت سوم : پروتکل FTP - نسخهی قابل چاپ +- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir) +-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1) +--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13) +--- موضوع: مدیریت فایلها در PHP قسمت سوم : پروتکل FTP (/showthread.php?tid=2280) |
مدیریت فایلها در PHP قسمت سوم : پروتکل FTP - agotd - 01-09-2014 04:19 PM بعد از مدت زیادی غیبت دوباره برگشتم. اولا از دوستان به خاطر تاخیر در گذاشتن مطلب و پاسخ به سوالات عذرخواهی میکنم.در ادامه میتونید آموزش کار با پروتکل FTP در PHP رو مشاهده کنید. FTP چیست؟ FTP یا File Transfer Protocol یک پروتکل انتقال فایل بر پایه TCP/IP می باشد.از این پروتکل برای انتقال فایل ها بین هاست استفاده میشود.در این قسمت با هم یک کلاس کار با FTP خواهیم ساخت. قبل از اینکه شروع به ساخت کلاس کار با FTP کنیم نگاه کلی به کار این کلاس می اندازیم : - اتصال به سرور - ساخت پوشه روی سرور - آپلود فایل - تغییر مسیر - لیست کردن اطلاعات یک پوشه خاص - دانلود فایل چه زمانی باید از FTP استفاده کنیم ؟ استفاده از FTP کاربردهای زیادی دارد. اما شاید بیشترین کاربردهای این پروتکل موارد زیر باشد : - ساخت یک گالری تصاویر برای سایت و آپلود عکسها توسط کاربر - پشتیبان گیری از اطلاعات و محتویات سایت و دیتابیس مرحله اول : آماده کردن مقدمات در این مرحله ما دو فایل با نامهای index.php و ftp_class.php خواهیم ساخت. فایل Index.php صفحه اصلی ماست.جایی که از کلاس یک شیء ایجاد کرده و متدهای مورد نظر را فراخوانی میکنیم. فایل ftp_class.php فایلی است که کلاس کار با FTP را در آن خواهیم نوشت. مرحله دوم : ساخت کلاس یکی از مزیتهای برنامه نویسی شیء گرا این است که میتوان از کدهای نوشته شده در آینده نیز استفاده کرد.برای همین در این آموزش از برنامه نویسی شیء گرا کمک خواهیم گرفت. حالا فایل ftp_class.php را باز کرده و کدهای زیر را داخل فایل مینویسیم. کد php: بعد از مدت زیادی غیبت دوباره برگشتم. اولا از دوستان به خاطر تاخیر در گذاشتن مطلب و پاسخ به سوالات عذرخواهی میکنم.در ادامه میتونید آموزش کار با پروتکل FTP در PHP رو مشاهده کنید. نام کلاس ما FTPClient است.کدهای بالا برای کسانی که با برنامه نویسی شیء گرا آشنا هستند نیاز به توضیح ندارد. با استفاده از کلمه کلیدی class یک کلاس ایجاد کردیم.داخل این کلاس یک تابع (متد) قرار دارد با نام __construct. این متد ، متد سازنده نام دارد.هنگامی که از کلاس FTPClient یک شیء ایجاد می کنیم این تابع به صورت خودکار اجرا میشود. نکته : نام متد construct با دو زیرخط (underline) شروع میشود. مرحله سوم : متغیرهای کلاس در این مرحله متغیرهای مورد نیاز کلاس را ایجاد میکنیم. کد php: private $connectionId; نام کلاس ما FTPClient است.کدهای بالا برای کسانی که با برنامه نویسی شیء گرا آشنا هستند نیاز به توضیح ندارد. با استفاده از کلمه کلیدی class یک کلاس ایجاد کردیم.داخل این کلاس یک تابع (متد) قرار دارد با نام __construct. این متد ، متد سازنده نام دارد.هنگامی که از کلاس FTPClient یک شیء ایجاد می کنیم این تابع به صورت خودکار اجرا میشود. نکته : نام متد construct با دو زیرخط (underline) شروع میشود. مرحله سوم : متغیرهای کلاس در این مرحله متغیرهای مورد نیاز کلاس را ایجاد میکنیم. کد php: private function logMessage($message) به دلیل اینکه متغیر $messageArray یکی از اعضای کلاس است با استفاده از کلمه کلیدی $this-> به آن دسترسی پیدا میکنیم. برای برگشت دادن اطلاعات از متد زیر استفاده میکنیم. کدهای زیر را نیز به کلاس اضافه کنید : کد php: public function getMessages() همینطور که میبینید این متد یک متد public یا عمومی میباشد.کلمه کلیدی public مانند کلمه private نوع دسترسی به اجزاء کلاس را مشخص می کند. اجزائی که با کلمه کلیدی public مشخص می شوند در بیرون از کلاس نیز میتوان به آنها دسترسی داشت. مرحله پنجم : اتصال به سرور در این مرحله متد connect را در کلاس خواهیم نوشت. این متد برای اتصال به سرور به کار می آید : کد php: public function connect ($server, $ftpUser, $ftpPassword, $isPassive = false) ما اطلاعات مربوط به اتصال به سرور را به این متد ارسال کردیم.برای اتصال به سرور نام کاربری ($ftpUser) ، رمز عبور ($ftpPassword) و نام سرور ($server) نیاز خواهیم داشت. اولین دستور یک اتصال FTP را ایجاد میکند.اطلاعات این اتصال را درمتغیر $connectionId ذخیره میکنیم. دستور ftp_login برای ورود به سرور استفاده میشود.پارامتر اول اطلاعات سرورمورد نظر($connectionId) ، پارامتر دوم نام کاربری و پارامتر سوم این تابع رمز عبور برای ورود به سرور می باشد. Passive Ftp یک نوع امن تر انتقال اطلاعات در پروتکل FTP است.به هر حال با استفاده از دستور ftp_pasv میتوانید این قابلیت را فعال یا غیر فعال کنید. سپس در دستور if از صحت اتصال به سرور با خبر میشویم.در هر صورت با استفاده از تابع logMessage نتیجه این اتصال را ذخیره میکنیم. مرحله ششم : آزمایش اتصال تا این مرحله از کار ما کلاسی نوشتیم که یک تابع برای اتصال به سرور دارد.برای آزمایش از عملکرد این کلاس کدهای زیر را به فایل index.php اضافه کنید. کد php: // *** Define your host, username, and password همینطور که در کدهای بالا میبینید ابتدا جزئیات مربوط به اتصال را اضافه کردیم.این تنظیمات همچنین میتوانند در فایلی جداگانه قرار گیرند. سپس با استفاده از دستور include فایل ftp_class.php را به صفحه index.php وارد کردیم تا بتوانیم از کلاس FTPClient در فایل index.php استفاده کنیم. در خط بعد با استفاده از کلمه کلیدی new یک شیء از کلاس FTPClient ساختیم و در متغیر $ftpObj قرار دادیم. در انتها متد( تابع ) connect را از کلاس FTPClient فراخوانی کرده و نام سرور ، نام کاربری و رمزعبور را به این تابع ارسال کردیم. مرحله ششم بخش دوم : مشاهده خروجی در این مرحله کدهای قسمت قبل را کمی تغییر میدهیم. کد php: // *** Connect کدهای مرحله قبل را میتوانیم به وسیله یک شرط if چک کنیم. در کلاس FTPClient دو تابع برای مدیریت پیغام ها ایجاد کردیم.در صورتی که اتصال با سرور با موفقیت انجام نشد میتوانیم از دستور زیر برای نمایش پیغام مورد نظر استفاده کنیم. کد php: // *** Connect مرحله هفتم : ساخت پوشه (directory) خیلی خب، الان زمانش رسیده است که توابع کاربردی را اضافه کنیم.اولین متدی که اضافه خواهیم کرد متد makeDir میباشد. این متد یک پوشه روی سرور میسازد. این متد یک پارامتر میگیرد که مسیر و نام پوشه مورد نظر است.قسمت مهم این متد ، تابع ftp_mkdir میباشد که دو پارامتر میگیرد.پارمتر اول رشته اتصال و پارامتر دوم مسیر و نام پوشه است. کدهای زیر را به فایل ftp_class.php اضافه کنید: کد php: public function makeDir($directory) حالا برای ساخت یک پوشه جدید به صورت زیر از این متد در فایل index.php استفاده میکنیم : کد php: $dir = 'photos'; مرحله هشتم : آپلود فایل ادامه این بحث رو با اضافه کردن تابعی برای آپلود فایل روی سرور دنبال میکنیم. زمانی که بخواهیم یک فایل را روی سرور آپلود کنیم نیاز داریم تا نوع فایل را تشخیص دهیم( باینری یا اسکی). به طور ساده درصورتی که یک فایل متنی را آپلود کنیم این فایل از نوع ascci و در بقیه موارد نوع فایل Binary خواهد بود. برای فایلهای ascii یک آرایه می سازیم و پسوند فایلهای متنی را داخل این آرایه ذخیره میکنیم. کد php: $asciiArray = array(‘txt’,’csv’); سپس بعد از مشخص شدن نوع فایل ، تصمیم می گیریم که فایل در کجا ذخیره شود. برای فهمیدن پسوند فایل از تابع explode استفاده میکنیم : کد php: $extension = end(explode(‘.’ , $file)); در کد بالا ابتدا با تابع explode نام فایل را به آرایه تبدیل کردیم.سپس با دستور end آخرین عضو آرایه را برگرداندیم. متد زیر را به کلاس FTPClient اضافه کنید : کد php: public function uploadFile ($fileFrom, $fileTo) پس از ذخیره کردن پسوند فایل در متغیر $extension با استفاده از دستور in_array چک کردیم که آیا پسوند فایل یکی از دو پسوند موجود در آرایه $ascciArray میباشد یا خیر. در صورتی که این شرط برقرار باشد ثابت FTP_ASSCI در متغیر $mode قرار میگیرد در غیر اینصورت ثابت FTP_BINARY در این متغیر قرار خواهد گرفت. سپس با دستور ftp_put اقدام به انتقال فایل به سرور کردیم.اگر انتقال با موفقیت انجام نشود تابع uploadFile مقدار false را بر میگرداند. برای استفاده از این متد در فایل index.php به صورت زیر عمل میکنیم : کد php: $fileFrom = 'zoe.jpg'; مرحله نهم : تغییر مسیر برای حرکت بین پوشه های ساخته شده متد زیر را به کلاس FTPClient اضافه میکنیم : کد php: public function changeDir($directory) در متد changeDir تنها تابعی که نیاز به توضیح دارد تابع ftp_chdir است.همینطور که متوجه شدید این تابع وظیفه تغییر مسیر را بر عهده دارد. مرحله دهم : لیست فایلها حال برای نمایش لیست فایلهای موجود روی سرور متد getDirListing را به کلاس FTPClient اضافه میکنیم.این متد لیست فایلها و پوشه های سرور را به صورت یک آرایه بر میگرداند : کد php: public function getDirListing($directory = '.', $parameters = '-la') $directory : نام پوشه ایست که میخواهید لیست فایلهای آنرا ببینید. $parameter : این پارامتر به صورت پیش فرض ‘-la’ را در خودش جای داده. ‘-la’ یک دستور لینوکس برای نمایش اطلاعات بیشتری در مورد دایرکتوری مورد نظر میدهد. برای نمایش لیست فایلها در فایل index.php به صورت زیر عمل کنید : کد php: echo ‘<pre>’; |