دانلود فایل روی هاست با PHP یعنی سرور فایل را از یک نشانی دیگر دریافت کند. در این روش، فایل ابتدا روی رایانهٔ شما دانلود و دوباره آپلود نمیشود. بااینحال، سرعت و موفقیت انتقال به مسیر شبکه، محدودیت مبدأ و منابع هاست بستگی دارد.
پیشنیاز دانلود فایل روی هاست با PHP
فقط نشانی مستقیم و مجاز یک فایل از منبع معتبر را استفاده کنید. صفحهٔ ورود یا لینک دانلود وابسته به نشست مرورگر ممکن است بهجای ZIP، HTML برگرداند. مقصد باید فضای کافی و امکان نوشتن داشته باشد. برای دریافت URL با copy، قابلیت allow_url_fopen و پشتیبانی لازم پروتکل باید در محیط PHP فعال باشد.
روش مناسب اجرای این نمونه، Terminal یا SSH مجاز در پوشهای خصوصی خارج از ریشهٔ وب است. فایل دانلودکنندهٔ عمومی نسازید که هر بازدیدکننده بتواند آن را اجرا کند. اگر دسترسی خط فرمان ندارید، از قابلیت انتقال موردپشتیبانی میزبان یا SFTP استفاده کنید.
نمونهٔ انتقال با تابع copy
فایل copy.php را در پوشهٔ خصوصی ایجاد کنید. نشانی نمونه را با URL نهایی HTTPS فایل موردنظر جایگزین و سپس با PHP سازگار، php copy.php را اجرا کنید. کد ورودی URL از بازدیدکننده دریافت نمیکند و فایل موجود را عمداً جایگزین نمیکند:
<?php
if (PHP_SAPI !== 'cli') {
http_response_code(403);
exit;
}
$source = 'https://example.com/approved-file.zip';
$target = __DIR__ . '/download.part';
if (file_exists($target)) {
exit("Destination already exists.\n");
}
$context = stream_context_create([
'http' => ['timeout' => 60, 'follow_location' => 0],
'ssl' => ['verify_peer' => true, 'verify_peer_name' => true],
]);
if (!copy($source, $target, $context)) {
exit("Transfer failed; check logs and any partial file.\n");
}
echo "Transfer finished; verify the file before use.\n";
طبق مستند copy، خروجی موفق تابع فقط پایان عملیات کپی را نشان میدهد؛ صحت محتوا را باید جدا بررسی کرد. نام موقت download.part برای جلوگیری از اشتباهگرفتن انتقال اولیه با فایل آمادهٔ انتشار انتخاب شده است.
خطاهای متداول و محدودیت حجم
- Permission denied: مسیر و مالکیت مقصد را بررسی کنید.
- Failed to open stream: URL، دسترسی شبکه و تنظیم PHP را بررسی کنید.
- خطای TLS: گواهی و زنجیرهٔ اعتماد مبدأ را اصلاح کنید؛ اعتبارسنجی را خاموش نکنید.
- توقف انتقال: زمان اتصال، سهمیه و محدودیت پردازش میزبان را بررسی کنید.
عدد ثابت ۱۰۰ مگابایت، سقف عمومی این روش نیست. upload_max_filesize برای دریافت فایل آپلودشده از درخواست وب است و سقف کلی همهٔ دانلودهای خروجی سرور محسوب نمیشود. تنظیم timeout نمونه نیز تضمین زمان کل انتقال در تمام محیطها نیست.
این نمونه تغییرمسیر خودکار را دنبال نمیکند؛ اگر مبدأ ریدایرکت دارد، URL نهایی معتبر را مشخص کنید. جزئیات در گزینههای HTTP و اعتبارسنجی TLS در PHP آمده است.
پیش از استفاده از فایل
اندازه، نوع واقعی و در صورت ارائهٔ ناشر، مقدار checksum را تطبیق دهید. فایل ZIP را پیش از استخراج از نظر مقصد و محتویات بررسی کنید. در انتقال ناموفق ممکن است فایل ناقص باقی بماند؛ قبل از تکرار، وضعیت همان فایل موقت را مشخص کنید. سپس فقط فایل تأییدشده را به محل لازم منتقل و ابزار موقت را جمع کنید.
مطالعهٔ مرتبط
بازبینی فنی: ۱۳ آبان ۱۴۰۵. تاریخ انتشار اولیه و نشانی قبلی حفظ شدهاند.