گاهی اوقات شما نیاز دارید که فایلها را به سرور/هاست دیگری منتقل کنید، و شما فقط به سرور دسترسی FTP دارید. و برای دانلود این فایل ها و آپلود مجدد در سرور دیگر می توان با استفاده از سرویس گیرنده FTP مانند Filezilla زمان زیادی را صرف کرد. FTP قابلیت zip – unzip ندارد، بنابراین باید آن را یکی یکی آپلود کنید. و انتقال سرور به سرور بسیار سریعتر از این است که فایل ها را دانلود و سپس آپلود نمایید
شما می توانید از این اسکریپت ساده PHP برای انتقال فایل ها از یک سرور به سرور دیگر استفاده کنید.
توجه: این فقط یک مثال ساده است. و لازم است تنظیمات اتصال به FTP را براساس سرور خود تغییر دهید
1. استفاده از PHP Copy برای انتقال فایل ها از سرور به سرور.
شما فقط می توانید یک فایل php در سرور مقصد ایجاد کنید و یک بار فایل را در مرورگر خود بارگذاری کنید. به عنوان مثال شما این کد را در http://destination-url/copy-files.php و در copy-files.php این کد php را اضافه می کنید:
/** * Transfer Files Server to Server using PHP Copy * @link https://shellcreeper.com/?p=1249 */ /* Source File URL */ $remote_file_url = 'http://origin-server-url/files.zip'; /* New file name and path for this file */ $local_file = 'files.zip'; /* Copy the file from source url to server */ $copy = copy( $remote_file_url, $local_file ); /* Add notice for success/failure */ if( !$copy ) { echo "Doh! failed to copy $file...\n"; } else{ echo "WOOT! success to copy $file...\n"; }
2. استفاده از PHP FTP برای انتقال فایل ها از سرور به سرور
گاهی اوقات استفاده از PHP Copy کار نمی کند اگر فایل ها محافظت شده باشد (حفاظت از لینک یا همان hotlnk protection).
اما می توانیم از روش دیگری استفاده کنیم. استفاده از FTP (در PHP) برای انجام انتقال با استفاده از کد:
/** * Transfer (Import) Files Server to Server using PHP FTP * @link https://shellcreeper.com/?p=1249 */ /* Source File Name and Path */ $remote_file = 'files.zip'; /* FTP Account */ $ftp_host = 'your-ftp-host.com'; /* host */ $ftp_user_name = 'ftp-username@your-ftp-host.com'; /* username */ $ftp_user_pass = 'ftppassword'; /* password */ /* New file name and path for this file */ $local_file = 'files.zip'; /* Connect using basic FTP */ $connect_it = ftp_connect( $ftp_host ); /* Login to FTP */ $login_result = ftp_login( $connect_it, $ftp_user_name, $ftp_user_pass ); /* Download $remote_file and save to $local_file */ if ( ftp_get( $connect_it, $local_file, $remote_file, FTP_BINARY ) ) { echo "WOOT! Successfully written to $local_file\n"; } else { echo "Doh! There was a problem\n"; } /* Close the connection */ ftp_close( $connect_it );
با استفاده از FTP انعطاف بیشتری دارید، کد بالا از “`ftp_get“` برای وارد کردن فایل ها از سرور مبدا به سرور مقصد استفاده می کند. اما همچنین میتوانیم از ftp_put برای ارسال فایلهااز سرور مبدا به مقصد، با استفاده از این کد استفاده کنیم:
/** * Transfer (Export) Files Server to Server using PHP FTP * @link https://shellcreeper.com/?p=1249 */ /* Remote File Name and Path */ $remote_file = 'files.zip'; /* FTP Account (Remote Server) */ $ftp_host = 'your-ftp-host.com'; /* host */ $ftp_user_name = 'ftp-username@your-ftp-host.com'; /* username */ $ftp_user_pass = 'ftppassword'; /* password */ /* File and path to send to remote FTP server */ $local_file = 'files.zip'; /* Connect using basic FTP */ $connect_it = ftp_connect( $ftp_host ); /* Login to FTP */ $login_result = ftp_login( $connect_it, $ftp_user_name, $ftp_user_pass ); /* Send $local_file to FTP */ if ( ftp_put( $connect_it, $remote_file, $local_file, FTP_BINARY ) ) { echo "WOOT! Successfully transfer $local_file\n"; } else { echo "Doh! There was a problem\n"; } /* Close the connection */ ftp_close( $connect_it );
برای درک آسان تر:
ftp_connect برای اتصال از طریق FTP است.
ftp_login برای ورود به حساب FTP پس از برقراری ارتباط است.
ftp_close برای بستن اتصال پس از انجام انتقال (خروج از سیستم) است.
ftp_get برای دریافت کردن / دانلود / از طریق FTP است.
ftp_put برای فرستادن /ارسال/آپلود فایل از طریق FTP است.
پس از دریافت کردن/ارسال کردن فایل، همیشه فایل PHP را که برای انجام این کار استفاده میکنید، حذف کنید تا از استفاده دیگران از آن جلوگیری شود.
ZIP و UNZIP فایل ها با استفاده از PHP
البته برای سهولت در انتقال باید فایل ها را قبل از جابجایی زیپ کنیم و بعد از اینکه به مقصد رفتیم آن را از حالت فشرده خارج کنیم.
فایل های ZIP با استفاده از PHP
با استفاده از این کد می توانید تمام فایل های موجود در پوشه را فشرده کنید:
/** * ZIP All content of current folder * @link https://shellcreeper.com/?p=1249 */ /* ZIP File name and path */ $zip_file = 'files.zip'; /* Exclude Files */ $exclude_files = array(); $exclude_files[] = realpath( $zip_file ); $exclude_files[] = realpath( 'zip.php' ); /* Path of current folder, need empty or null param for current folder */ $root_path = realpath( '' ); /* Initialize archive object */ $zip = new ZipArchive; $zip_open = $zip->open( $zip_file, ZipArchive::CREATE ); /* Create recursive files list */ $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $root_path ), RecursiveIteratorIterator::LEAVES_ONLY ); /* For each files, get each path and add it in zip */ if( !empty( $files ) ){ foreach( $files as $name => $file ) { /* get path of the file */ $file_path = $file->getRealPath(); /* only if it's a file and not directory, and not excluded. */ if( !is_dir( $file_path ) && !in_array( $file_path, $exclude_files ) ){ /* get relative path */ $file_relative_path = str_replace( $root_path, '', $file_path ); /* Add file to zip archive */ $zip_addfile = $zip->addFile( $file_path, $file_relative_path ); } } } /* Create ZIP after closing the object. */ $zip_close = $zip->close();
UNZIP فایل ها با استفاده از PHP
با استفاده از این کد می توانید فایل را در همان پوشه از حالت فشرده خارج کنید:
/** * Unzip File in the same directory. * @link http://stackoverflow.com/questions/8889025/unzip-a-file-with-php */ $file = 'file.zip'; $path = pathinfo( realpath( $file ), PATHINFO_DIRNAME ); $zip = new ZipArchive; $res = $zip->open($file); if ($res === TRUE) { $zip->extractTo( $path ); $zip->close(); echo "WOOT! $file extracted to $path"; } else { echo "Doh! I couldn't open $file"; }
جایگزین دیگر برای فایل ZIP / UNZIP
در واقع، اگر از cPanel استفاده می کنید، می توانید به راحتی فایل های فشرده و با استفاده از مدیریت فایل cPanel از حالت فشرده خارج کنید.