Pregunta

Alojo mi sitio en un alojamiento compartido, que últimamente cambió el servidor a modo seguro (sin siquiera notificar eso). Utilizo una función que descargue archivos desde el servidor, utilizando el readfile () función (uso php). Ahora, en SAFE_MODE, esta función ya no está disponible. ¿Hay un reemplazo o una solución para manejar la situación en que el usuario podrá descargar el archivo?

Gracias

¿Fue útil?

Solución

Como escribí en comentarios, readfile() está discapacitado al incluirlo en disable_functions php.ini directiva. No tiene nada que ver con modo seguro. Intente verificar qué funciones están deshabilitadas y vea si puede usar alguna otra función del sistema de archivos (-s) para hacer lo que readfile() lo hace.

Para ver la lista de funciones deshabilitadas, use:

var_dump(ini_get('disable_functions'));

Podrías usar:

// for any file
$file = fopen($filename, 'rb');
if ( $file !== false ) {
    fpassthru($file);
    fclose($file);
}

// for any file, if fpassthru() is disabled
$file = fopen($filename, 'rb');
if ( $file !== false ) {
    while ( !feof($file) ) {
        echo fread($file, 4096);
    }
    fclose($file);
}

// for small files;
// this should not be used for large files, as it loads whole file into memory
$data = file_get_contents($filename);
if ( $data !== false ) {
    echo $data;
}

// if and only if everything else fails, there is a *very dirty* alternative;
// this is *dirty* mainly because it "explodes" data into "lines" as if it was
// textual data
$data = file($filename);
if ( $data !== false ) {
    echo implode('', $data);
}

Otros consejos

Supongo que estás usando readfile Para cargar archivos remotos, como dijo "desde el servidor". Si eso es correcto, su problema no es el modo seguro, pero que la apertura de URL con funciones normales del archivo PHP ya no está permitido (configuración allow_url_fopen desactivado).

En ese caso, puede usar Php's Funciones de rizos para descargar archivos. También, file_get_contents es una alternativa válida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top