شما اینجا هستید
PHP » اسکریپت php انتقال فایل بین دو هاست

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

برای حل این مشکل می‌توان با یک اسکریپت php، کار انتقال فایل از طریق پروتکل http یا ftp را به آسانی و سرعت زیاد به انجام رساند.

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

نکته امنیتی

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

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

روش انتقال

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

برای مثال اگر می‌خواهید فایل http://example.com/old-site.tar.gz را به هاست جدید https://rokaweb.ir منتقل کنید، ابتدا یک شاخه‌ی جدید مانند upload در هاست جدید بسازید، آدرس فایل موجود در هاست قدیمی را در اسکریپت کپی کنید. اسکریپت را در هاست جدید آپلود کنید و در پایان با اجرای دستور https://rokaweb.ir/upload/transload.php فایل را با سرعت زیاد از هاست قدیمی به هاست جدید منتقل کنید.

انتقال فایل از سرور به سرور دیگر از طریق پروتکل http

اگر فایل موجود در هاست قدیمی با استفاده از پروتکل http یا ftp بدون رمز قابل دسترسی است، از کد زیر استفاده نمایید:

<?php ini_set( 'max_execution_time', 300 ); ?>
<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Billboard Transload</title>
</head>
<body dir="rtl">
	از سایت ما دیدن کنید: <a href="https://zardis.net/">زردیس</a>
	<br>
<?php
	$source = 'https://zardis.net/old-site.tar.gz';

	$fh = fopen( basename( $source ), 'w' );
	$ch = curl_init( $source );
	curl_setopt( $ch, CURLOPT_FILE, $fh );
	curl_exec( $ch );
	curl_close( $ch );

	fclose( $fh );

	echo 'انجام شد';
?>
</body>
</html>

انتقال فایل از هاست به هاست دیگر از طریق پروتکل ftp

اگر قصد انتقال فایل از طریق پروتکل ftp به همراه رمز را دارید، قطعه کد زیر را مطابق نیاز تغییر دهید و از آن برای جابجایی فایل کمک بگیرید:

<?php ini_set( 'max_execution_time', 300 ); ?>
<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Billboard Transload FTP</title>
</head>
<body>
<?php
	$source = 'ftp://zardis.net/old-site.tar.gz';

	$fh = fopen( basename( $source ), 'w' );
	$ch = curl_init( $source );
	curl_setopt( $ch, CURLOPT_FILE, $fh );
	curl_setopt( $ch, CURLOPT_USERPWD, "USER:PASSWORD");
	curl_exec( $ch );
	curl_close( $ch );

	fclose( $fh );

	echo 'done';
?>
</body>
</html>

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

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

مزیت استفاده از آپلود ftp به جای دانلود، عدم وجود محدودیت سرعت آپلود در بیشتر هاست‌ها می‌باشد.

جهت استفاده از این اسکریپت، متغیرهای لازم شامل نام فایل، مسیر فایل در سرور مقصد، نام سرور ftp، نام کاربری و گذرواژه را در اسکریپت زیر اصلاح کنید و سپس آن را با نامی دلخواه در هاست آپلود نمایید.

پس از اجرای این اسکریپت، فایل از طریق پروتکل ftp به هاست مقصد آپلود خواهد شد.

<?php ini_set( 'max_execution_time', 300 ); ?>
<!doctype html>
<html lang="fa">
<head>
	<meta charset="UTF-8">
	<title>آپلود کننده زردیس</title>
</head>
<body>
	از سایت ما دیدن کنید: <a href="https://zardis.net/">Zardis</a>
	<br>
	<?php
		$file = 'user.islh190.newparis.tar.zst';
		$remote_file = '/public_html/user.islh190.newparis.tar.zst';
	
		$ftp = ftp_connect( 'ftp.sitename.com' );
		$login_result = ftp_login( $ftp, 'username', 'pass' );
	
		if( ftp_put( $ftp, $remote_file, $file, FTP_BINARY ) ) {
			echo "فایل $file با موفقیت آپلود شد";
		} else {
			echo "رخداد خطا در آپلود فایل $file";
		}
	
		ftp_close( $ftp );
	?>
</body>
</html>

منبع : وبسایت روکا وب





اخبار زردیس | جدیدترین اخبار ایران و جهان