Estoy buscando la manera más eficiente de escribir los contenidos del flujo de entrada de PHP en el disco, sin usar gran parte de la memoria que se otorga al script PHP. Por ejemplo, si el tamaño de archivo máximo que se puede cargar es de 1 GB, PHP solo tiene 32 MB de memoria.PHP usando fwrite y fread con el flujo de entrada
define('MAX_FILE_LEN', 1073741824); // 1 GB in bytes
$hSource = fopen('php://input', 'r');
$hDest = fopen(UPLOADS_DIR.'/'.$MyTempName.'.tmp', 'w');
fwrite($hDest, fread($hSource, MAX_FILE_LEN));
fclose($hDest);
fclose($hSource);
¿Frecuenta dentro de un fwrite como el código anterior muestra que significa que todo el archivo se cargará en la memoria?
Para hacer lo contrario (escritura de un archivo - el flujo de salida), PHP ofrece una función llamada fpassthru que creo que no se sostiene el contenido del archivo en la memoria del script PHP.
Estoy buscando algo similar pero en reversa (escribiendo desde flujo de entrada al archivo). Gracias por cualquier ayuda que pueda dar.
Gracias pauld, me gusta tu idea de usar unset también. – Lakey
@pauld ¡Agradable! Para obtener el mejor rendimiento, el desarmado debe usarse más como 'while (...) {...} unset ($ chunk);' reasignando la memoria cada iteración no tendría mucho impacto, pero liberando esa memoria _after_, es un poco más importante aquí. –
@TonyChiboucas ¿Por qué liberarías 1024 bytes de memoria? – marijnz0r