آپلود فایل ها به سرور توسط FTP یکی از کارهای اساسی هر توسعه دهنده وب است . ابزارهای FTP Client زیادی برای مدیریت فایل ها برای FTP Server وجود دارد . اما اگر قصد دارید از طریق اسکریپت خود به سرور FTP متصل شوید ، پس مقاله اتصال به سرور FTP در PHP دنبال کنید
PHP تابع های مختلفی برای کار با سرور FTP ارایه میدهد. در این آموزش , به شما نحوه اتصال به سرور FTP در PHP و اکثر قابلیت های مدیریت فایل های FTP سرور توسط PHP را توضیح خواهیم داد.
اتصال و لاگین در FTP Server
اول از همه , با تابع ftp_connect() به سرورFTP متصل می شویم. بعد اولین اتصال با تابع ftp_login() با نام کاربری و پسورد FTP لاگین می کنیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// FTP server details $ftpHost = 'ftp.example.com'; $ftpUsername = 'ftpuser'; $ftpPassword = '*****'; // open an FTP connection $connId = ftp_connect($ftpHost) or die("Couldn't connect to $ftpHost"); // try to login if(@ftp_login($connId, $ftpUsername, $ftpPassword)){ echo "Connected as $ftpUsername@$ftpHost"; }else{ echo "Couldn't connect as $ftpUsername"; } // close the connection ftp_close($connId); |
آپلود فایل در FTP Server
بعد از لاگین شدن به ftp سرور ، از تابع ftp_put() برای آپلود فایل ها به سرور استفاده می کنیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// FTP server details $ftpHost = 'ftp.example.com'; $ftpUsername = 'ftpuser'; $ftpPassword = '*****'; // open an FTP connection $connId = ftp_connect($ftpHost) or die("Couldn't connect to $ftpHost"); // login to FTP server $ftpLogin = ftp_login($connId, $ftpUsername, $ftpPassword); // local & server file path $localFilePath = 'index.php'; $remoteFilePath = 'public_html/index.php'; // try to upload file if(ftp_put($connId, $remoteFilePath, $localFilePath, FTP_ASCII)){ echo "File transfer successful - $localFilePath"; }else{ echo "There was an error while uploading $localFilePath"; } // close the connection ftp_close($connId); |
دانلود فایل از سرور FTP
بعد از لاگین شدن به ftp سرور ، از تابع ftp_get() برای دانلود فایل ها از سرور بهره می بریم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// FTP server details $ftpHost = 'ftp.example.com'; $ftpUsername = 'ftpuser'; $ftpPassword = '*****'; // open an FTP connection $connId = ftp_connect($ftpHost) or die("Couldn't connect to $ftpHost"); // login to FTP server $ftpLogin = ftp_login($connId, $ftpUsername, $ftpPassword); // local & server file path $localFilePath = 'index.php'; $remoteFilePath = 'public_html/index.php'; // try to download a file from server if(ftp_get($connId, $localFilePath, $remoteFilePath, FTP_BINARY)){ echo "File transfer successful - $localFilePath"; }else{ echo "There was an error while downloading $localFilePath"; } // close the connection ftp_close($connId); |
حذف فایل از سرور FTP
در این قسمت بعد از لاگین شدن به سرور FTP از تابع ftp_delete() برای پاک کردن فایل ها از سرور استفاده خواهیم کرد
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// FTP server details $ftpHost = 'ftp.example.com'; $ftpUsername = 'ftpuser'; $ftpPassword = '*****'; // open an FTP connection $connId = ftp_connect($ftpHost) or die("Couldn't connect to $ftpHost"); // login to FTP server $ftpLogin = ftp_login($connId, $ftpUsername, $ftpPassword); // server file path $file = 'public_html/index_old.php'; // try to delete file on server if(ftp_delete($connId, $file)){ echo "$file deleted successful"; }else{ echo "There was an error while deleting $file"; } // close the connection ftp_close($connId); |
در پایان همیشه از ftp_close() برا بستن کانکشن مربوطه از memory استفاده میکنیم تا فضای خالی برای پروسه دیگر درخواست ها ایجاد شود
FTP چیست؟
FTP از حروف اول کلمات File Transfer Protocol تشکیل شده است و به عبارتی سرنام آن سه کلمه است، که به طور اختصار از اصطلاح FTP استفاده میشود. همانطور که از نام آن میتوان فهمید، از آن برای تبادل فایل بین حسابهای مختلف یک رایانه، بین یک حساب و یک رایانه شخصی و یا برای دسترسی آنلاین به بایگانی نرم افزارها در یک شبکه استفاده میشود.
موفق باشید .
سلام و درود
ممنون بابت آموزش خوبتون. فقط در دانلود فایل توسط تابع ftp_get() فایل روی هاست فعلی دانلود میشود. چگونه میتوان فایل را از FTP مستقیما به هارد دیسک کامپیوتر دانلود کرد؟
سلام. متاسفانه مرورگر این اجازه رو نمیده. اول باید روی هاست بارگذاری بشه بعد روی سیستم بتونید دانلود کمید
سلام وتتون بخیر
ممنون از اطلاعات مفیدتون
من میخوام از اسکریپت php خودم برای آپلود فایل به هاست دانلود استفاده میکنم.
مشکلم اینه که اگر کانکشن رو روی حالت پسیو قرار بدم، فایل ، آپلود نمیشه و خطای زیر رو میده:
ftp_rawlist(): php_connect_nonb() failed: Operation now in progress (115)
و اگر کانکشن رو روی حالت اکتیو بگذارم، فایل، آپلود میشه ولی خطای زیر رو میده :
ftp_fput(): Could not open data connection to port xxxxx: Connection timed out
ممنون میشم راهنمایی م کنین.
سلام ممنون
باید داخل هاستی که اسکریپت php رو اجرا میکنید timeout اسکریپت رو افزایش بدید. که اگه این دسترسی رو ندارید به هاستینگ اطلاع بدید
سلام. من برای آپلود فایل از ftp_put استفاده کردم.. مسیر فایل محلی مدنظر برای آپلودم از چه طریقی به دست بیارم! ضمن اینکه عرض کنم من فایل رو با تگ input file وارد php کردم.
سلام
با تابع ftp_pwd() میتونید دایرکتری ای که اکانت ftp شما بهش دسترسی داره رو بگیرید و حالا کنارش دایرکتری زیرین رو هم مشخص کنید و اگر دسترسی نداشته باشید دیگه دایرکتی قبلی نمیتونید برید
سلام خسته نباشید من یه اسکریپت دارم میتونم با این روش وصلش کنم به ftp که اونجا به طور خودکار آپلود کنه
سلام ممنون.
بله میتونید
با سلام و احترام خدمت آقای شفیعی عزیز، از مطلب مفیدتون بسیار سپاسگزارم.
بنده نتوانستم اطلاعات ورود به ftp رو بدست بیارم. از پشتیبانی هاستم سوال کردم اما نمیدونم چرا خطا میده.
اگر براتون ممکنه بگید خودمون چطوری از طریق سی پنل هاست دانلود این اطلاعات رو پیدا کنیم و اصلا فرم اینا چجوریه؟ ( یعنی مثلا هاست ftp دامنخ خودمون هست یا دامنه دانلود یا سرور شرکت هاست یا آی پی هاستمون؟ و یوزر پسورد همون یوزر پس ورود به سی پنل هست یا نه؟!)
با تشکر فراوان
سلام. خوشحالیم که مفید واقع شده.
لطفا این آموزش را ببینید :
https://mizbanfa.net/blog/hosting/cpanel/create-ftp-accounts-in-cpanel
نحوه ساخت اکانت نمایش داده شده.
میتونید از آیپی هاست یا نام دامنه برای اتصال از طریق نرم افزار filezilla استفاده کنید:
https://mizbanfa.net/blog/hosting/cpanel/how-to-connect-filezilla-to-cpanel-ftp-account
موفق باشید.
بسیار سپاسگزارم
با سلام مجدد خدمت آقای شفیعی،
من با اطلاعات هاست دانلودم تونستم از طریق cuteftp متصل بشم اما از طریق php به هاست با همان اطلاعات متصل نمیشود یعنی خطای Couldnt connect to $ftpHost را میدهد.
فکر میکنید مشکل از چیه؟
با تشکر فراوان
سلام.
داخل else این خط کد رو قرار بدید تا ارور اصلی نمایش داده بشه
print_r( error_get_last() );
آقای شفیعی از راهنماییتون بسیار ممنونم.
من کد رو به صورت زیر نوشتم
اما هیچی رو برنمیگردونه.
<?php
$ftpHost = ”;
$ftpUsername = ”;
$ftpPassword = ”;
if(ftp_connect($ftpHost)){
$connId = ftp_connect($ftpHost);
echo 'connected';
$ftpLogin = ftp_login($connId, $ftpUsername, $ftpPassword);
ftp_close($connId);
}
else{
print_r(error_get_last());
}
از پشتیبانی هاستم اطلاعات رو خواستم همینارو بهم دادن گفتن که با cuteFtp وصل میشه چون سیستم خودم اینترنت نداره نمیدونم درسته یا نه.
کل سایتم روبراه شده فقط مونده همین ftp که اصلا ازش سر درنمیارم تنها امیدم شمایین لطفا کمکم کنید البته ببخشید که تا اینجای کار هم خیلی وقتتون رو گرفتم.
هر چقدر هزینه هم داشته باشه اشکالی نداره لطفا کمکم کنید مشکلم حل بشه.
خیلی ممنونم
)لطفا کدهارو تو سایت نمایش ندید)
سلام.
بنده الان تست کردم و روی دو هاست مختلف و لوکال اوکی بود و متصل می شد و پیام connected چاپ می شد.
مطمینا مشکل از محیط اجرا یا همان هاست شما هست. همچنین ورژن php ی که تست شد ۷٫۳ و ۵٫۶ بود
از وقتی که گذاشتین بسیار ممنونم.
فکر میکنید مشکل هاستم چی باشه؟
آیا تنظیماتش رو باید تغییر بدم یا افزونه ای رو فعال کنم؟ ( کدوم افزونه ها باید برای کار با ftp فعال باشند؟)
با تشکر فراوان
این مورد رو نمیشه دقیق گفت مشکلش چی هست و باید با هاستینگ مشورت کنید