代码之家  ›  专栏  ›  技术社区  ›  Noah Goodrich

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

  •  0
  • Noah Goodrich  · 技术社区  · 15 年前

    执行以下代码块时:

    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(测试.html) [函数.fopen]:打开失败 流:达到重定向限制, 中止在 /数据/www/example.com/public/test.php 在线843

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

    2 回复  |  直到 9 年前
        1
  •  7
  •   Anil Purswani    12 年前

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

    如果您正在使用某个网络协议包装器,则此错误很可能与太多(HTTP-如果是HTTP(S)协议)连接,在从脚本到要打开的文件的过程中重定向。这个 default redirection limit should be 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);
    // ...
    

    请参阅:

        2
  •  0
  •   jerebear    15 年前

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

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