最近サーバーをセーフモードに変更した共有ホスティングでサイトをホストしています(通知することさえありません)。readfile()関数 (私は php を使用)を使用して、サーバーからファイルをダウンロードする機能を使用します。現在、safe_mode では、この機能は使用できなくなりました。ユーザーがファイルをダウンロードできるようになる状況を処理するための代替手段または回避策はありますか?
ありがとう
最近サーバーをセーフモードに変更した共有ホスティングでサイトをホストしています(通知することさえありません)。readfile()関数 (私は php を使用)を使用して、サーバーからファイルをダウンロードする機能を使用します。現在、safe_mode では、この機能は使用できなくなりました。ユーザーがファイルをダウンロードできるようになる状況を処理するための代替手段または回避策はありますか?
ありがとう
コメントにも書きましたが、 php.iniディレクティブreadfile()
に含めることで無効化されます。セーフモードとは関係ありません。どの機能が無効になっているかを確認し、他のファイルシステム機能 (-s) を使用して何ができるかを確認してください。disable_functions
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 のcurl 関数を使用してファイルをダウンロードできます。また、file_get_contents
有効な代替手段です。