PHP fopen()重定向限制到达错误

时间:2009-04-01 13:54:36

标签: php fopen

执行以下代码块时:

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]:无法打开   stream:达到重定向限制,   流产   /data/www/example.com/public/test.php   在第843行

导致此错误的原因是什么?如何纠正?

2 个答案:

答案 0 :(得分:7)

您尝试打开的文件在哪里?它们是在本地文件系统上还是您尝试通过HTTP(S)访问它们?

如果您正在使用某些网络协议包装器,则此错误很可能与太多连接(HTTP - 在HTTP(S)协议的情况下)重定向从您的脚本到您要打开的文件的路上。 default redirection limit should be 20Streams。由于20个重定向非常多,文件名本身可能会出现一些错误(导致另一端的网络服务器执行某些拼写检查重定向)或其他服务器配置错误或存在一些安全措施或...... / p>

如果您觉得需要扩展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);
// ...

请参阅:

答案 1 :(得分:0)

很可能是因为您尝试打开的文件正在尝试打开另一个文件,从而达到了重定向的限制。

编辑:当我说可能时,我的意思是可能导致错误,这可能是那种情况。