Ошибка достижения предела перенаправления PHP fopen()

StackOverflow https://stackoverflow.com/questions/705593

  •  22-08-2019
  •  | 
  •  

Вопрос

При выполнении следующего блока кода:

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]:Не удалось открыть потоки:Достигнуто предел перенаправления, прерывание в /дата/www/example.com/public/test.php в строке 843

Что вызывает эту ошибку и как ее исправить?

Это было полезно?

Решение

Где находятся файлы, которые вы пытаетесь открыть?Они находятся в локальной файловой системе или вы пытаетесь получить к ним доступ через HTTP(S)?

Если вы используете какую-либо оболочку сетевого протокола, то эта ошибка, скорее всего, связана со слишком большим количеством (HTTP - в случае протокола HTTP(S)) перенаправлений на пути от вашего скрипта к файлу, который вы хотите открыть.А лимит перенаправления по умолчанию должен быть 20.Поскольку 20 перенаправлений — это довольно много, в самом имени файла может быть ошибка (например,веб-сервер на другом конце выполняет некоторые проверки орфографии и перенаправления), или другой сервер неправильно настроен, или приняты какие-то меры безопасности, или...

Если вы чувствуете необходимость расширить 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);
// ...

Пожалуйста, посмотри:

Другие советы

Очень вероятно, что файл, который вы пытаетесь открыть, пытается открыть ДРУГОЙ файл и, таким образом, достигает предела перенаправления.

Редактировать:Когда я говорю «вероятно», я имею в виду, что это может вызвать ошибку, и это может быть именно такая ситуация.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top