Есть ли альтернатива php readfile () в безопасном режиме сервера? - PullRequest
2 голосов
/ 13 июня 2011

Я размещаю свой сайт на общем хостинге, который в последнее время переключил сервер в безопасный режим (даже не уведомив об этом). Я использую функцию, которая загружает файлы с сервера, используя функцию readfile () (я использую php). Теперь в safe_mode эта функция больше не доступна. Есть ли замена или обходной путь, чтобы справиться с ситуацией, когда пользователь сможет загрузить файл?

Спасибо

Ответы [ 2 ]

8 голосов
/ 13 июня 2011

Как я писал в комментариях, readfile() отключается включением его в директиву disable_functions php.ini . Это не имеет ничего общего с безопасным режимом . Попробуйте проверить, какие функции отключены, и посмотрите, можете ли вы использовать любую другую функцию (-и) файловой системы, чтобы делать то, что делает readfile().

Чтобы увидеть список отключенных функций, используйте:

var_dump(ini_get('disable_functions'));

Вы можете использовать:

// 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);
}
1 голос
/ 13 июня 2011

Я предполагаю, что вы используете readfile для загрузки удаленных файлов, как вы сказали "с сервера".Если это правильно, ваша проблема не в безопасном режиме, но открытие URL с обычными функциями php-файла больше не разрешено (настройка allow_url_fopen отключена).

В этом случае вы можете использовать PHP curlфункции для загрузки файлов.Кроме того, file_get_contents является допустимой альтернативой.

...