پنج شنبه, 05 آذر 1394 14:56

آموزش نحوه استفاده از پروتکل FTP در زبان PHP

نوشته شده توسط
این مورد را ارزیابی کنید
(0 رای‌ها)

استفاده از FTP در PHP - مقدمه

در دنیای کنونی انتقال اینترنتی فایل ها از کامپیوتری به کامپیوتر دیگر روزانه هزاران هزاران اتفاق می افتد. حتی اگر همکاران شما در شهر دیگری مشغول به کار هستند و نیاز دارند فایلی را با شما به اشتراک بگذراند می توانند براحتی و به سرعت این کار را انجام دهند.

فایل ها را می توان یا از راه وب سرور (Web Server) و یا از راه FTP منتقل کرد. انتقال فایل ها از راه Web Server را در یادداشت دیگری آموزش خواهیم داد و در این مجموعه آموزشی به نحوه انتقال فایل ها از طریق FTP می پردازیم.

پروتکل ftp  امستقل از وب است. شما می توانید از ftp  برای انتقال فایل در اسکریپت های php  که بر روی وب اجرا میشوند استفاده نمایید و یا از آن در اسکریپت های مستقلی به تنهایی (stand-alone) استفاده کنید. FTP همچنین این امکان را برای شما فراهم می آورد تا بتوانید به فهرستی از دایرکتوری های (directory) یک کامپیوتر دیگر دسترسی پیدا کنید و همچنین یک یا چند فایل را به آن کامپیوتر آپلود و یا از آن دانلود کنید.

FTP یک نرم افزار client/server است. جهت استفاده از FTP برای انتقال فایل بین یک کامپیوتر و یک کامپیوتر Remote، ابتدا باید به سرور FTP درون Remote computer متصل شویم و سپس درخواست هایمان را به آن ارسال کنیم.

برای اینکه بتوانیم درون اسکریپت های PHP از امکانات FTP استفاده کنیم ابتدا می بایست هنگام نصب PHP، امکان پشتیبانی از FTP فعال شده باشد. اگر PHP را برای ویندوز نصب کرده اید برای فعال کردن پشتیبانی از FTP نیاز به انجام دادن هیچ کار اضافه ای ندارید. اما اگر می خواهید PHP را بر روی Unix، Linux و یا Mac کامپایل کنید می بایست برای فعال کردن FTP suport هنگام نصب از option زیر استفاده کنید.

--enable-ftp

لاگین کردن به سرور FTP - چگونه به سرور FTP متصل شویم؟

اگر می خواهید با کامپیوتر دیگری تبادل فایل کنید می بایست به FTP server آن وصل شوید؛ به همین منظور از تابع ftp_connect به صورت زیر استفاده می کنیم. توجه کنید که تابع ftp_connect یک شیء Resource برمی گرداند.

$connect = ftp_connect("ftp server address");

همچنین می توانید با استفاده از IP address سرور FTP هم به آن متصل شوید.

$connect = ftp_connect("id_address");

پس از اینکه اتصال به سرور FTP برقرار شد می بایست به آن لاگین (Login) کنیم. برای لاگین کردن به سرور به یک نام کاربری (username) و یک کلمه عبور (password) نیاز داریم. شما احتمالا نام کاربری و کلمه عبور مختص به خود را برای اتصال به سرور FTP مد نظرتان دارید.

 با استفاده از تابع ftp_login می توانیم به سرور FTP که پیشتر به آن متصل شده ایم لاگین کنیم. کد زیر فرض می کند که شما نام کاربری و کلمه عبور خود را در دو متغیر جداگانه ذخیره کرده اید.

$login_result = ftp_login($connect,$userid,$passwd);

همان طور که مشاهده می کنید اولین پارامتر تابع ftp_login یک متغیر از نوع Resource به نام $connection است. این متغیر همان مقدار برگشتی از تابع ftp_connect است. چنانچه اتصال به سرور به صورت موفقیت آمیز صورت نگرفته باشد، موقع استفاده از تابع ftp_login هشدار زیر به شما نمایش داده می شود:

Warning: ftp_login() expects parameter 1 to be resource, boolean given in ...

این هشدار برنامه را متوقف نمی کند. هرچند لاگین کردن با شکست روبرو می شود اما اسکریپت ادامه می یابد و دستورات بعدی اجرا می شود و این احتمالا باب میل شما نیست چون بقیه اسکریپت شما هم احتمالا وابسته به یک اتصال موفقیت آمیز است. اگر اتصال موفقیت آمیزی نداشته باشید، نمی توانید لاگین کنید و اگر نتوانید لاگین کنید نمی توانید به فایل های کامپیوتر سرور دسترسی یابید. بنابراین بهتر است اسکریپت را در صورت عدم موفقیت در اتصال به سرور متوقف کنید. دستورات زیر در صورتی که اتصال موفقیت آمیزی انجام نشود اسکریپت را متوقف می کند.

$connect = ftp_connect("ftp server")
	   or die("Can’t connect to server");
$login_result = ftp_login($connect,$userid,$passwd)
	   or die("Can’t login to server");

پس از اینکه توانستید به سرور FTP لاگین کنید، می توانید درخواست های خود را به آن بفرستید مثلا فهرستی از دایرکتوری ها را بگیرید و یا فایل آپلود و دانلود کنید.

چگونه فهرست دایرکتوری ها (directory list) را از سرور FTP بگیرم؟

یکی از معمولی ترین کارها گرفتن فهرست پوشه ها از سرور FTP است. تابع ftp_nlist فهرست محتویات یک دایرکتوری را از remote computer می گیرد و آن را به صورت یک آرایه برمی گرداند.

$filesArr = ftp_nlist($connect,"data");

پارامتر دوم تابع ftp_nlist نام directory که می خواهیم محتویات آن را بگیریم است. اگر نام directory را ندانیم میتوانیم با استفاده از تابع ftp_pwd از سرور تقاضا کنیم تا نام directory جاری را به ما بدهد.

$directory_name = ftp_pwd($connect);
$filesArr = ftp_nlist($connect,$directory_name);

همانطور که گفتیم تابع ftp_nlist آرایه ای به ما میدهند که هر عنصر آن نام فایل یا پوشه درون directory مورد نظر است. بنابراین می توانیم آنها را با استفاده از یک حلقه foreach به نمایش درآوریم.

foreach($filesArr as $value)
{
	echo $value\n;
}

چگونه فایل ها را با استفاده از FTP دانلود و آپلود کنم؟

با استفاده از تابع ftp_get می توانیم فایلی را از یک remote computer دانلود کنیم. بعد از اینکه موفق شدید به سرور FTP لاگین کنید می توانید با استفاده از دستور زیر فایلی را از remote computer دانلود کنید.

ftp_get($connect,"newfile.txt","data.txt",FTP_ASCII);

پارامتر دوم - یعنی newfile.txt - نامی است که بعد از دانلود شدن فایل روی کامپیوتر شما به آن اختصاص داده می شود. پارامتر سوم - یعنی data.txt - نام فایل موجود بر روی remote computer است که می خواهید آن را دانلود کنید.

عبارت FTP_ASCII به FTP می گوید که فایل به چه صورتی باید دانلود شود. اصطلاحا به آن file mode می گویند. می توانیم از mode های  FTP_ASCII و یا FTP_BINARY استفاده کنیم. فایل های باینری فایل های به زبان ماشین هستند. با بررسی محتوای یک فایل می توانید تشخیص دهید که آن فایل چه مدی دارد. اگر محتوای آن کاراکترهایی است که می توانید آنها را بخوانید و بفهمید، آن فایل اسکی (ASCII) است. اگر محتوای فایل نامفهوم است، فایل باینری (BINARY) است. برای نمونه فایل های گرافیکی از نوع باینری هستند.

همچنین می توانید با تابع مشابهی به اسم ftp_put فایل آپلود کنید. دستور زیر یک فایل به روی remote computer آپلود می کند.

ftp_put($connect,"newfile.txt","data.txt",FTP_ASCII);

پارامتر دوم - یعنی newfile.txt - نامی است که بعد از آپلود شدن فایل روی remote computer به آن اختصاص داده می شود. پارامتر سوم - یعنی data.txt - نام فایل موجود بر روی رایانه ی شما است که می خواهید آن را آپلود کنید.

بستن اتصال به سرور FTP

زمانی که کار انتقال فایل بر روی اتصال FTP به پایان رسید می بایست اتصال را با استفاده از دستور زیر ببندید.

ftp_close($connect);

مثال کاربردی

اسکریپت زیر همه فایل های درون یک دایرکتوری که دارای پسوند .txt هستند را دانلود میکند. این فایل ها با استفاده از اتصال FTP و از remote computer دانلود می شوند.

<?php
/* Script name: downloadFiles 
 * Description: Downloads all the files with a txt 
 *              extension in a directory via FTP. 
 */ 
$dir_name = "data/";
$connect = ftp_connect("ftp server")
	   or die("Can’t connect to FTP server"); 
$login_result = ftp_login($connect,$userID,$passwd) 
	   or die("Can’t log in");			
$filesArr = ftp_nlist($connect,$dir_name);
foreach($filesArr as $value) 
{ 
	if(ereg("\.txt$",$value)) 
	{ 
		if(!file_exists($value)) 
		{ 
			ftp_get($connect,$value,$dir_name.$value,FTP_ASCII); 
		} 
		else 
		{ 
			echo "File $value already exists!\n"; 
		} 
	} 
}
ftp_close($connect);
?>

اسکریپت بالا فهرست محتویات دایرکتوری "data" را از remote computer میگیرد و آن را درون آرایاه $filesArr ذخیره می کند. دستور foreach درون عناصر آرایه $filesArr چرخ می زند و بررسی می کند که آیا آن عنصر - که یک رشته متن حاوی نام یک فایل یا یک پوشه است - دارای پسوند .txt هست یا نه. اگر بود، اسکریت بررسی می کند که آیا فایلی همان آن فایل همینک بر روی کامپیوتر ما موجود هست یا نه؟ اگر چنین فایلی بر روی کامپیوتر ما موجود نباشد، دانلود می شود، و اگر موجود باشد، پیغامی مبنی بر اینکه "فایل همینک موجود است" نمایش داده می شود. و فایل دانلود نمی شود.

سایر توابع FTP

PHP دارای توابع مرتبط با FTP دیگری نیز هست. مثلا تابعی برای رفتن به یک دایرکتوری دیگر بر روی remote computer، ساختن فولدر جدیدی روی remote computer. در جدول زیر این توابع را به همراه توضیحات مربوط به هر یک فهرست کرده ایم:

تابع کاری که انجام می دهد
ftp_cdup($connect)
یک دایرکتوری بالاتر می رود یا به عبارتی به دایرکتوری که قبلا در آن بوده است برمی گردد.
ftp_chdir($connect, "directoryname")
به یک داریکتوری دیگر در remote computer می رود.
ftp_close($connect)
اتصال FTP را می بندد.
ftp_connect("servername")
اتصالی را به remote computer باز می کند. servername می تواند نام دامنه و یا آدرس IP باشد.
ftp_delete($connect, "path/filename")
فایلی را بر روی remote computer حذف می کند.
ftp_exec($connect, "command") 
یک دستور سیستمی (system command) را بر روی remote computer اجرا می کند.
ftp_fget($connect,$fh, ”data.txt”,FTP_ASCII) 
محتویات فایلی را از روی remote computer به درون یک فایل باز (در حال استفاده) دانلود می کند. متغیر $fh در واقع handle فایل باز است.
ftp_fput($connect, ”new.txt”,$fh,FTP_ASCII) 
یک فایل باز (در حال استفاده) را به remote computer آپلود می کند. $fh در واقع handle فایل باز است.
ftp_get($connect,"d.txt", "sr.txt",FTP_ASCII) 
فایلی را از remote computer دانلود می کند. sr.txt نام فایلی که می خواهیم دانلود کنیم است و d.txt نام فایل بعد از دانلود شدن است.
ftp_login($connect, $userID,$password)
به سرور FTP لاگین می کند.
ftp_mdtm($connect, "filename.txt") 
زمانی را که فایل آخرین بار ویرایش شده است برمی گرداند.
ftp_mkdir($connect, "directoryname") 
یک دایرکتوری جدید بر روی remote computer ایجاد می کند.
ftp_nlist($connect, "directoryname") 
فهرست فایل های درون دایرکتوری روی remote computer را برمی گرداند. مقدار بازگشتی یک آرایه است.
ftp_put($connect,"d.txt", "sr.txt",FTP_ASCII)
فایلی را روی remote computer آپلود می کند. sr.txt نام فایل که میخواهیم آپلود کنیم است و d.txt نام فایل بعد از آپلود شدن است.
ftp_pwd($connect)
نام دایرکتوری جاری روی remote computer را برمیگرداند.
ftp_rename($connect, "oldname","newname")
فایلی بر روی remote computer را تغییر نام می دهد.
ftp_rmdir($connect, "directoryname") 
یک دایروکتوری روی remote computer را حذف می کند.
ftp_size($connect, "filename.txt")
اندازه فایلی روی remote computer را برمی گرداند.
ftp_systype($connect)
نوع سیستمی (system type) مربوط به remote server را برمی گرداند. برای مثلا: Unix

معرفی سایت های Anonymous FTP

بعضی سایت های عمومی روی اینترنت هست که به همه ی افراد اجازه می دهند تا نام کاربری anonymous و همچین ایمیل کاربر بعنوان کلمه عبور به سرور FTP آنها وصل شوند. بعضی از این سایت های عمومی حتی نام کاربری و کلمه عبور هم نمی خواهند. چنانچه به سرور FTP دسترسی ندارید می توانید به منظور یادگیری کار با سرور FTP از این سرورهای رایگان استفاده کنید. سایت http://www.ftp-sites.org شمار زیادی از این سایت ها را به شما معرفی می کند.

 

جهت اطلاعات بیشتر درباره FTP به مستندات آن مراجعه کنید: http://php.net/manual/en/book.ftp.php

 

همچنین بخوانید


کار کردن با رشته متن ها در PHP

تابع substr در PHP

تابع substr_replace در PHP

اعتبارسنجی داده ها در PHP

بازدید 1689 بار آخرین ویرایش در پنج شنبه, 19 آذر 1394 22:26

اضافه کردن نظر


کد امنیتی
تازه سازی

جدیدترین های آندروید

جدیدترین های آموزش زبان فرانسوی

جدیدترین های آموزش زبان انگلیسی

جدیدترین های صوتی

جدیدترین های ویندوزفون

جدیدترین های الگوریتم

جدیدترین های آموزش PHP

جدیدترین های پیامک

ورود

رضایت از بهگذر را به گوش گوگل برسانید
Web Analytics

بیشتر بخوانید

بیشتر بخوانید

بیشتر بخوانید

Windows Phone People

تغییر دادن و اختصاص دادن صدای زنگ جداگانه به هر مخاطب برای بسیاری از کاربران گوشی های تلفن همراه از اهمیت بسیار بالایی برخوردار است. با دانستن اینکه چه کسی در حال تماس گرفتن با شماست به راحتی می توانید تصمیم بگیرید که آیا به آن تماس پاسخ بدهید و یا آن را نادیده بگیرید. از همین روی تصمیم گرفتیم تا نحوه ی اختصاص صدای زنگ جداگانه به هر مخاطب را در گوشی های هوشمند تلفن همراه مجهز به سیستم عامل ویندوز فون 8 آموزش دهیم.

بیشتر بخوانید

رضایت از بهگذر را به گوش گوگل برسانید