2016-05-14 2 views
-3

Fopen работает, я могу читать файлы и прочее, но когда я укажу неверный, я хочу, чтобы он возвращал заголовок 404, но он не работает точно.Если fopen не существует, он не изменяет заголовок на 404?

$handle = fopen($filepath, "rb"); 

if (!$handle) { 
    header("HTTP/1.0 404 Not Found"); 
    exit; 
} 

Около 5 сообщений, которые я прочитал здесь, это примеры, и они выглядят одинаково для меня.

+1

См. [Здесь] (http://php.net/manual/en/function.http-response-code.php), как это сделать –

+0

Я думаю, нам не хватает кода, который воспроизведет проблему –

ответ

-1

Вот проблема: когда вы сделали $ handle = fopen ($ filepath, "rb"); PHP-fopen пытается найти файл. В случае обнаружения файла он генерирует ошибку, которая привела к тому, что в Stream был отправлен некоторый вывод. С выходом, уже отправленным в Stream; не больше можно послать заголовок ... так ПЧ-ELSE заявление может сделать Trick:

<?php 


     $filepath = "page-1.php"; 

     if(file_exists($filepath) && ($handle = @fopen($filepath, "rb"))){ 
      // WORK WITH YOUR $handle IN THIS BLOCK 
     }else{ 
      header("location: page-2.php"); // YOU SHOULD REDIRECT TO A LOCATION SENDING IT THE HEADER... 
      //header("location: page-1.php"); // SENDING TO THE SAME LOCATION WORKS AS WELL... 
      header("HTTP/1.0 404 Not Found"); 
      exit; 
     } 
+1

Have вы это пробовали? BTW - Что вызывает исключение в этом коде? Также файл может существовать, но вы не сможете его прочитать! –

+0

@Ed Heal О Try-Catch: возможно, не нужно ... теперь ушло ... *** Возможно, вам стоит попробовать и просветить нас больше ... *** здесь было опробовано ***; -) *** – Poiz

+0

@Poiz Вы не можете использовать заголовки 'Location' и' 404'. – Barmar

1

Это код, который вы хотите

$handle = fopen($filepath, "rb"); 

if ($handle === false) { 
    http_response_code(404); 
    exit; 
} 

Он устанавливает код ответа, когда вы не можете открыть файл (согласно страницам руководства)

+0

Зачем вам строгое сравнение? Любое успешное значение '$ handle' будет правдивым. – Barmar

+0

Просто быть педантичным Я полагаю, –

+0

Ответ должен решить проблему, а не просто показать другой способ сделать это. Если его исходный код не работает, нет причин ожидать, что это будет работать лучше, не так ли? – Barmar

1

Итак, поскольку эта тема становится большой, я не понимал, что получаю так много ответов. Спасибо вам всем!

Итак, проблема была не в том коде, который у меня был ... Я был буквально глуп, это давало мне 404 Not Found все это время, но по какой-то причине это не похоже. Защитите, не выключайте отчет об ошибках и не используйте альтернативную функцию PHP, чтобы отменить ошибки &.

Спасибо всем, но на самом деле не было ошибок в коде, просто моя чистая глупость.

+0

Это не должно быть ответом, поскольку он не дает никакой полезной информации для будущих читателей о том, как решить проблему. Поскольку у вопроса нет каких-либо утвержденных ответов, я думаю, вы можете удалить его.Если нет, отметьте это для модераторов, чтобы закрыть его. – Barmar

Смежные вопросы