Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 08.05.2019, 03:46   #1
usr-php
Новичок
 
Регистрация: 08.05.2019
Сообщений: 4
Репутация: 10
Вопрос В теле php-страницы вызвать 404 ошибку, если неверные get-параметры

Добрый день!
Есть сайт на php 5.6, хостинг на nic.ru (RU-CENTER) - структура каталогов на хостинге у nic.ru такая:
mysite.ru\docs - в этой папке хранится весь сайт.
mysite.ru\errordocs - хранятся html-страницы с ошибками, например mysite.ru\errordoc\404.html - страница, отображаемая пользователю, в случае возникновения 404 ошибки.

Стоит задача, если в строке запроса передано неверное значение параметра, то необходимо выводить пользователю 404 ошибку т.е. страницу 404.html. Как это сделать?
Например, если пользователь в браузере набрал неправильное значение параметра www.mysite.ru/art.php?art=unknownvalue выдавать 404-ошибку т.к. у параметра art значения могут быть только art1 и art2.

Ниже даю шаблон моей страницы
Код:
<html>
...
<body>
...
  <div id="page">
  ...
  <?
    $art  = $_GET['art'];
    switch($art) :
    default :
    if(isset($art) {
      //ЗНАЧЕНИЕ ПАРАМЕТРА НЕВЕРНО - необходимо вызвать 404-ошибки т.е. страницы errordoc/404.html на сервере
     } else {
      include_once('arts/artdef.php');
     }
     break;

     case ("art1");
     include_once('arts/art1.php');
     break;

     case ("art2");
     include_once('arts/art2.php');
     break;           

     endswitch;
      ?>       
  </div>
...
</body>
</html>
usr-php вне форума   Ответить с цитированием
Старый 08.05.2019, 10:52   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,613
Репутация: 5617
По умолчанию

у меня такой код сработал.
Код:
<?php
if(!isset($_GET['no404'])){
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
die();
}
echo "All Good! ".$_GET['no404'];
?>
ДА. Важно. до вывода header не должно быть НИКАКОГО вывода.
поэтому, либо проверяйте нужное условие в самом начале, до всякого вывода,
либо делайте переадресацию на отдельный скрипт

Последний раз редактировалось Serge_Bliznykov; 08.05.2019 в 10:54.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 08.05.2019, 14:31   #3
usr-php
Новичок
 
Регистрация: 08.05.2019
Сообщений: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
до вывода header не должно быть НИКАКОГО вывода.
Спасибо за ответ. В какое место, в указанном выше коде, нужно вставить код, чтобы заработало?
Код:
<?php
if(!isset($_GET['no404'])){
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
die();
}
?>
usr-php вне форума   Ответить с цитированием
Старый 08.05.2019, 14:41   #4
usr-php
Новичок
 
Регистрация: 08.05.2019
Сообщений: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
поэтому, либо проверяйте нужное условие в самом начале, до всякого вывода
т.е. php-скрипт разместить до тэга <html>
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
либо делайте переадресацию на отдельный скрипт
В смысле, где у меня в коде комментарий написать так?, в этом случае header писать не нужно?
Код:
readfile(dirname(__DIR__).'/errordocs/404.html');
usr-php вне форума   Ответить с цитированием
Старый 08.05.2019, 15:01   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,613
Репутация: 5617
По умолчанию

Цитата:
Сообщение от usr-php Посмотреть сообщение
т.е. php-скрипт разместить до тэга <html>
угу. обязательно. в идеале - прямо в начало страницы.


Цитата:
Сообщение от usr-php Посмотреть сообщение
readfile(dirname(__DIR__).'/errordocs/404.html');
так. стоп. это же совершенно разные подходы.

1) вернуть header с кодом статуса, что требуемой страницы нет на сервере, дальше уже сервер будет сам брать обработку ошибок на себя и показывать страницу 404.
Это может быть, например, обработчик Apache заданный в .htaccess
Цитата:
Код:
ErrorDocument 404 /404/index.php
2) можно самому отобразить некую страницу, в том числе и ту страницу, которую предполагается показывать на ошибку 404
вот через readfile Вы, похоже, как раз такую страницу пытаетесь прочитать.

какой из способов Вам именно нужен - я не знаю.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 10.05.2019, 17:56   #6
usr-php
Новичок
 
Регистрация: 08.05.2019
Сообщений: 4
Репутация: 10
Вопрос

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Это может быть, например, обработчик Apache заданный в .htaccess
ErrorDocument 404 /404/index.php
На хостинге у ru-center страницы ошибок хранятся в папке "errordocs". Правильно понимаю, что в таком случае в .htaccess нужно добавить строку
Код:
ErrorDocument 404 /errordocs/404.html
?
Добавил, но мой 404.html не выводиться - выводиться просто мол страница не найдена.

Последний раз редактировалось usr-php; 10.05.2019 в 17:58.
usr-php вне форума   Ответить с цитированием
Старый 13.05.2019, 18:11   #7
freebsdd
Пользователь
 
Регистрация: 18.04.2019
Сообщений: 26
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
... дальше уже сервер будет сам брать обработку ошибок на себя ....
Не все серваки так делают, у меня на сайте так ни делает, просто в хедере передаёт 404 ошибку, а там я уже сам выдаю страницу в зависимости в каком разделе чел находится... Везде по разному
freebsdd вне форума   Ответить с цитированием
Старый 13.05.2019, 18:13   #8
freebsdd
Пользователь
 
Регистрация: 18.04.2019
Сообщений: 26
Репутация: 10
По умолчанию

Цитата:
Сообщение от usr-php Посмотреть сообщение
На хостинге у ru-center страницы ошибок хранятся в папке "errordocs". Правильно понимаю, что в таком случае в .htaccess нужно добавить строку
Код:
ErrorDocument 404 /errordocs/404.html
?
Добавил, но мой 404.html не выводиться - выводиться просто мол страница не найдена.
Но по сути Вам верно подсказали, если отловили код 404, то выводите то, что Вам нужно или перенаправляйте на скрипт/страницу другую... Но лучше без перенаправлений, выводить страницу самому, а Хэдер передавать (для поисковиков это нужно)


И ПИШИТЕ БЕЗ ОРФОГРАФИЧЕСКИХ ОШИБОК! (Но это так, крик души)
freebsdd вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать другое приложение из AIR for Android? Skype можно вызвать, если в коде кнопки вызова будет записано так x1233 Общие вопросы Web 0 06.10.2015 22:06
Иероглифы в теле страницы cURL gunsoy PHP 0 13.09.2012 17:22
Параметры страницы и Элементов Кольша HTML и CSS 3 05.02.2012 12:50
TrackPopupMenuEx возвращает 87 ошибку (неверные входные параметры) TitoAlehandro Win Api 0 27.09.2011 11:01
Параметры страницы terwet Microsoft Office Word 4 12.11.2010 10:47


17:52.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru