0

次のコード ブロックを実行する場合:

foreach($eventfiles as $eventfile)
{
    if($eventfile['filename'])
    { 
        $file = $eventfile['filepath'];
        // Open File
        if( !($fp = fopen($file, "r")))
        {
            echo '<br>CAN NOT READ FILE.';
            exit;
        }
        // Read data from the file into $data
        $data = "";
        while (!feof($fp)) $data .= fread($fp,1024);
        query("update event_rtab set html = '".escape($data)."' where id = {$eventfile[id]}");
    }
    if($eventfile['eventType']=='email')
    {
        query("INSERT INTO event_email_rtab (event_id,subject) values ($eventfile[id],'".escape($eventfile[email_subject])."')");
    }
}

スクリプトは次のエラーで失敗します。

fopen(test.html) [function.fopen]: ストリームを開けませんでした: リダイレクトの制限に達しました。/data/www/example.com/public/test.php 行 843 で中止します

このエラーの原因と修正方法を教えてください。

4

2 に答える 2

7

開こうとしているファイルはどこにありますか? それらはローカル ファイル システム上にありますか、それとも HTTP(S) 経由でアクセスしようとしていますか?

ネットワーク プロトコル ラッパーを使用している場合、このエラーは、スクリプトから開きたいファイルへの途中でリダイレクトが多すぎる (HTTP (HTTP(S) プロトコルの場合)) に関連している可能性があります。デフォルトのリダイレクト制限は 20です。20回のリダイレクトは非常に多いため、ファイル名自体に何らかのエラーがある可能性があります(たとえば、反対側のWebサーバーがスペルチェックリダイレクトを実行する原因となる)、または他のサーバーの構成が間違っているか、セキュリティ対策が実施されているか...

20 回のリダイレクトを拡張する必要がある場合は、ストリーム コンテキストを使用できます。

$context = array(
    'http'=>array('max_redirects' => 99)
);
$context = stream_context_create($context);
// hand over the context to fopen()
$fp = fopen($file, 'r', false, $context);
// ...

参照してください:

于 2009-04-01T16:02:16.137 に答える