質問

共有ホスティングでサイトをホストしていますが、最近サーバーをセーフモードに変更しました(通知することなく)。サーバーからファイルをダウンロードする機能を使用して、 readfile() 関数(PHPを使用しています)。これで、safe_modeでは、この関数は使用できなくなりました。ファイルがユーザーがダウンロードできる状況を処理するための交換または回避策はありますか?

ありがとう

役に立ちましたか?

解決

コメントで書いたように、 readfile() それを含めることによって無効になります disable_functions php.ini 指令。それは何の関係もありません セーフモード. 。どの機能が無効になっているかを確認してみて、他のファイルシステム関数(-s)を使用して何をすることができるかを確認してみてください 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);
}

他のヒント

私はあなたが使用していると思います readfile 「サーバーから」と言ったように、リモートファイルをロードします。それが正しい場合、あなたの問題はセーフモードではありませんが、通常のPHPファイル機能を備えたオープニングURLはもう許可されていません(設定はもはや許可されていません allow_url_fopen 無効)。

その場合、PHPを使用できます カール関数 ファイルをダウンロードします。また、 file_get_contents 有効な代替手段です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top