Maison >développement back-end >Problème PHP >Pourquoi n'a-t-il pas réussi à télécharger le fichier php
La raison de l'échec du téléchargement du fichier php est que lorsque readfile lit le fichier, il placera le fichier dans le cache, provoquant un débordement de mémoire. La solution consiste à implémenter un téléchargement segmenté et à limiter la vitesse de téléchargement.
Recommandé : "Tutoriel vidéo PHP"
Résoudre l'échec de PHP lors du téléchargement de fichiers volumineux et limiter les téléchargements Vitesse
1. Problème :
Lorsque PHP utilise la fonction readfile pour définir un fichier à télécharger, le fichier ne peut pas être trop volumineux, sinon le téléchargement échouera, le fichier échouera. être endommagé et aucune erreur ne sera signalée ;
2. Raison :
En effet, lorsque readfile lit le fichier, il le placera dans le cache, provoquant un débordement de mémoire
3. Solution : Téléchargez par segments et limitez la vitesse de téléchargement<?php //设置文件最长执行时间 set_time_limit(0); if (isset($_GET['filename']) && !empty($_GET['filename'])) { $file_name = $_GET['filename']; $file = __DIR__ . '/assets/' . $file_name; } else { echo 'what are your searching for?'; exit(); } if (file_exists($file) && is_file($file)) { $filesize = filesize($file); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Accept-Ranges: bytes'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . $filesize); header('Content-Disposition: attachment; filename=' . $file_name); // 打开文件 $fp = fopen($file, 'rb'); // 设置指针位置 fseek($fp, 0); // 开启缓冲区 ob_start(); // 分段读取文件 while (!feof($fp)) { $chunk_size = 1024 * 1024 * 2; // 2MB echo fread($fp, $chunk_size); ob_flush(); // 刷新PHP缓冲区到Web服务器 flush(); // 刷新Web服务器缓冲区到浏览器 sleep(1); // 每1秒 下载 2 MB } // 关闭缓冲区 ob_end_clean(); fclose($fp); } else { echo 'file not exists or has been removed!'; } exit();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!