Un cliente mío decidió mover el sitio web de un servidor algo bueno a un ... vamos a llamarlo servidor menos bueno.¿Descarga de archivos en php, problema de límite de memoria?
El problema es que hay un archivo con 40MBs para ser descargado y el límite de memoria en el servidor es 32. Para que sea aún más difícil para mí, que no permiten fopen ...
Además, si reduzco el tamaño del archivo a 20 MB, funciona bien.
Entonces, mi pregunta es, ¿qué puedo hacer, además de reducir el tamaño del archivo, para que esto funcione?
Gracias
EDIT: `
$fsize = filesize($file_path);
$path_parts = pathinfo($file_path);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "pdf": $ctype = "application/pdf";
break;
case "exe": $ctype = "application/octet-stream";
break;
case "zip": $ctype = "application/zip";
break;
case "doc": $ctype = "application/msword";
break;
case "xls": $ctype = "application/vnd.ms-excel";
break;
case "ppt": $ctype = "application/vnd.ms-powerpoint";
break;
case "gif": $ctype = "image/gif";
break;
case "png": $ctype = "image/png";
break;
case "jpeg":
case "jpg": $ctype = "image/jpg";
break;
default: $ctype = "application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"" . basename($file_path) . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);
ob_clean();
flush();
readfile($file_path);`
El código vi en php.net
// If it's a large file, readfile might not be able to do it in one go, so:
$chunksize = 1 * (1024 * 1024); // how many bytes per chunk
if ($size > $chunksize) {
$handle = fopen($realpath, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
}
fclose($handle);
} else {
readfile($realpath);
}
¿Cómo es la sección principal de su phpinfo? ¿Podrías pegarlo? Si está buscando una solución rápida, es posible que pueda cambiar su configuración de php utilizando un archivo .htaccess. Son documentos de drupal, pero no son específicos de drupal. http://drupal.org/node/29268 y http://drupal.org/node/97193 – KyleWpppd
¿Alguna parte en particular? (es un poco grande publicar todo aquí) –
el código de php.net debería funcionar bien. simplemente quítese ob_ .. si no se usa. Si ob, considere agregar gz para una descarga más rápida. – Teson