Ошибка достижения предела перенаправления 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]:Не удалось открыть потоки:Достигнуто предел перенаправления, прерывание в /дата/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);
// ...
Пожалуйста, посмотри:
Другие советы
Очень вероятно, что файл, который вы пытаетесь открыть, пытается открыть ДРУГОЙ файл и, таким образом, достигает предела перенаправления.
Редактировать:Когда я говорю «вероятно», я имею в виду, что это может вызвать ошибку, и это может быть именно такая ситуация.