English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، ستتعلم كيفية إجبار تحميل الملفات باستخدام PHP.
عادةً لست بحاجة إلى استخدام أي لغة برمجة على الجانب الخادم (مثل PHP) لتحميل الصور، ملفات zip، مستندات pdf، ملفات exe وما إلى ذلك. إذا كانت هذه الملفات مخزنة في مجلد عام قابل للوصول، فإنك تحتاج فقط إلى إنشاء رابط إلى الملف، وسيقوم المتصفح بتحميل الملف تلقائيًا كلما ضغط المستخدم على الرابط.
<a href="downloads/test.zip">تحميل ملف Zip</a> <a href="downloads/masters.pdf">تحميل ملف PDF</a> <a href="downloads/sample.jpg">تحميل ملف الصورة</a> <a href="downloads/setup.exe">تحميل ملف EXE</a>
النقر على رابط PDF أو ملف صورة لن يؤدي إلى تحميله مباشرة إلى محرك الأقراص الصلبة. سينتقل فقط إلى ملف في المتصفح. بالإضافة إلى ذلك، يمكنك حفظه على محرك الأقراص الصلبة. ولكن، بتفعيل التحميل التلقائي، يتم تحميل ملفات zip وexe تلقائيًا إلى محرك الأقراص الصلبة.
يمكنك استخدام دالة PHP readfile() لتجبر التحميل الفوري للصور أو أنواع الملفات الأخرى إلى قرص المستخدم.
لنقم بإنشاء ملف يسمى "image-gallery.php"، ونضعه فيه الكود التالي.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>مكتبة صور بسيطة</title> <style type="text/css"> .img-box{ display: inline-block; text-align: center; margin: 0 15px; } </style> </head> <?php //قائمة تحتوي على أسماء ملفات الصور المثال $images = array("kites.jpg", "balloons.jpg"); //تدوير القائمة لإنشاء مكتبة صور foreach($images as $image){ echo '<div class="img-box">'; echo '<img src="images/' . $image . '" width="200" alt="' . pathinfo($image, PATHINFO_FILENAME) . '">'; echo '<p><a href="download.html?file=' . urlencode($image) . '">تحميل</a></p>'; echo '</div>'; } ?> </html>
إذا نظرت بعناية إلى الكود المثال أعلاه، ستلاحظ رابط التحميل الذي يشير إلى ملف "download.php"، ويشمل هذا URL اسم ملف الصورة كقيمة للبحث. بالإضافة إلى ذلك، نستخدم دالة PHP urlencode() لت编码 اسم ملف الصورة، حتى نتمكن من نقلها بشكل آمن كمعامل URL، لأن اسم الملف قد يحتوي على أحرف غير آمنة للـ URL.
هذا هو كود الملف الكامل "download.php"، والذي يمكن استخدامه لتحميل الصور إجباريًا.
<?php if(isset($_REQUEST["file"])){ // الحصول على المعلمات $file = urldecode($_REQUEST["file"]); //解码 الأحرف URL الم编码ة /* اختبار ما إذا كانت اسم الملف يحتوي على أحرف غير قانونية على سبيل المثال، استخدم العبارات النمطية "../" في if(preg_match('/^[^.][-a-z0-9_.]+[a-z]$/i', $file)){ $filepath = "images/" . $file; // عملية التحميل if(file_exists($filepath)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($filepath).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($filepath)); flush(); // إفراغ منطق النسخ الناتج من نظام التخزين المؤقت readfile($filepath); die(); } else { http_response_code(404); die(); } } else { die("اسم الملف غير صالح!"); } } ?>
بالمثل، يمكنك إجبار التحميل بنسخة ملف أخرى، مثل ملفات .doc، pdf، وما إلى ذلك.
على سبيل المثال،السطر 8)العبارات النمطية في الملفات لن تسمح بتسمية الملفات التي تبدأ أو تنتهي بفاصلة علامة النقطة (.)، مثل، على سبيل المثال، يسمح باستخدام اسم ملف kites.jpg أو Kites.jpg، myscript.min.js، ولكن لا يسمح بـ kites.jpg. أو .kites.jpg.
الرجاء الرجوع إلىالعبارات النمطيةالتعليمات، للحصول على معرفة تفصيلية بالعبارات النمطية.