Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
PHP отдать 404 ошибку
Новая тема
Ответить
цитата
08/12/14 в 18:28
S_Flash
Скрипт по get параметру отдаёт страницы. Если параметр взят с потолка, то скрипту соотвественно надо отдать 404ю, например:
Код:
if (нихуя) {
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
die(file_get_contents('/404.html'));
}
1) Только предположим, что в апаче или htaccess уже есть настройка
ErrorDocument 404 /404_new.html
Программисту данный пример не понравится, так как есть дубли кода (путь к дизайну 404 страницы). Можно ли как-то на php отдавать вместе с заголовком дефолтную серверную 404 страницу в браузер сёрферу, чтоб не настраивать отдельно дизайн страницы в php и на сервере?
2) Корректно ли у меня в примере вариант хедера для fast-cgi пихать в одну кучу с апачевским?
цитата
08/12/14 в 18:49
Дартаньян
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
Так коректней, нет редирект 404 не выйдет.
цитата
09/12/14 в 14:59
S_Flash
Спасибо за совет.
А есть какя-то идея отдавать саму страницу\дизайн 404 в варианте, который настроен на сервере?
цитата
09/12/14 в 16:03
Ailk
отдавать любую страницу с заголовком 404. т.е. можешь сам генерить страничку с указанным заголовком, если нет контента.
цитата
09/12/14 в 17:49
S_Flash
Хотелось бы отдавать ту, которая настроена в апачевском конфиге или в htaccess, дапбы дизайн страниц саовпадал.
цитата
09/12/14 в 20:29
Mika
Ну так создай переменную окружения, значением которой будет путь к нужному файлу, и ее уже используй в апаче и пхп.
цитата
09/12/14 в 20:30
Ailk
так в .хтаксес отдавай свою 404
Код:
ErrorDocument 404
http://mysite.com/404.html
цитата
09/12/14 в 20:44
S_Flash
Ailk:
Как тогда не меняя кода в php отдать в скриптом ту же самую
http://mysite.com/404.html
?
Предположим я поменял URL к 404.html или установил скрипт на другой домен, на другой сервер...
цитата
09/12/14 в 21:19
Ailk
никак, только вручную задавать переменную в конфиге апача, как мика сказал. Или через хтакцесс.
цитата
10/12/14 в 01:25
rx
пути как правило как относительны так и абсолютны и всегда можно вычислить нужный,
ну и в хардкорном программинге нет слова нельзя
$default_404=$_SERVER["DOCUMENT_ROOT"]."/404.html";
$default_htaccess=$_SERVER["DOCUMENT_ROOT"]."/.htaccess";
function get_404()
{
global $default_404, $default_htaccess;
if(file_exists($default_htaccess))
{
if(preg_match("/^ErrorDocument\s+404(.*?)$/smi",file_get_contents($default_htaccess),$ar)) {return $_SERVER["DOCUMENT_ROOT"].trim($ar[1]);}
}
return $default_404;
}
print(get_404());
подобные рутины можно юзать рантаймом, можно закешить найденное вместе с датой проверки и периодически проверять или же обновлять по триггерам, тем самым получая самонастраивающуюся систему подстраивающуюся под хтаксесс в случае смены дефолтных значений
цитата
10/12/14 в 02:21
Evial
Не надо так делать
die(file_get_contents('/404.html'));
file_get_contents($default_htaccess)
Вы сервер до смерти затрахаете этим, если часто будет это выполняться. А выполняться оно будет часто, потому что 404 ошибок обычно много.
цитата
10/12/14 в 04:07
rx
Sargas писал:
Не надо так делать
die(file_get_contents('/404.html'));
file_get_contents($default_htaccess)
Вы сервер до смерти затрахаете этим, если часто будет это выполняться. А выполняться оно будет часто, потому что 404 ошибок обычно много.
хз что там у ТС с die(file_get_contents('/404.html')); (ибо readfile() адекватнее),
но что касается моего коммента - специально выделил
rx писал:
подобные рутины можно юзать рантаймом,
можно закешить найденное вместе с датой проверки и периодически проверять или же обновлять по триггерам,
тем самым получая самонастраивающуюся систему подстраивающуюся под хтаксесс в случае смены дефолтных значений
в тру хардкорных случаях после первого запуска полученное значение кидается в мемкеш или еще куда душе угодно или банально перезаписывается общий конфиг файл, и апдейтится по триггерам (событийные, кнопка "настроить", контроль спайдером смены размера/даты или банально резапуск по крону, етц)
и моя практика показывает что если сервак кончается от пары вызовов на чтение - это как правило не пара вызовов на чтение виноваты
цитата
10/12/14 в 06:46
Ailk
Ха! Смелое решение
Но что если 404 файл прописан не в верхнем акцессе, а прямо в конфиге апача для всех серверов? Или того хуже в качестве сервера стоит нгинкс голый или лайтхттпд?
цитата
10/12/14 в 09:39
rx
Ailk писал:
Но что если 404 файл прописан не в верхнем акцессе, а прямо в конфиге апача для всех серверов?
указать по умолчанию на поиск другой файл/симлинк или сделать htaccess каталогом выше. но задачи как на фри хосте что-то изобрести - это обычно из другой оперы
Ailk писал:
Или того хуже в качестве сервера стоит нгинкс голый или лайтхттпд?
у любого из них есть конфигурационный файл
та же подстрока error_page 404 для нгинкса или server.error-handler-404 для лайтхттпд
зы - нет универсального эффективного решения ВСЕХ проблем сразу. но если есть конкретная задача - всегда есть ее эффективное решение
цитата
10/12/14 в 11:31
Stek
Не понимаю, нафига себе пудрить мозги до такой степени. Взяли и решили "ошибку у нас отдает /404.php". В дальнейшем на него все и заворачивается. И в нем хоть редирект влупите по желанию.
S_Flash писал:
Предположим я поменял URL к 404.html или установил скрипт на другой домен, на другой сервер...
/404.php внутри домена будет всегда иметь один и тот же путь DOCUMENT_ROOT/404.php
цитата
10/12/14 в 21:45
S_Flash
Stek:
Какой итоговый код на php будет корректным для Apache и fast-cgi, если принять как правило, что страница дизайна ошибки /404.php?
цитата
10/12/14 в 22:04
ivango
Вот так нормально работает
----------------------------
header("HTTP/1.1 404 Not Found");
virtual("/404.php");
----------------------------
отдается страница из корня с хедером Not Found
цитата
10/12/14 в 22:17
Stek
S_Flash писал:
Какой итоговый код на php будет корректным для Apache и fast-cgi, если принять как правило, что страница дизайна ошибки /404.php?
Код:
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/404.php');
die;
В все заголовки и прочее уже в 404.php пихать. В таком случае если решите вдруг отдавать 302 или 200, то поменять придется только в одном месте.
Новая тема
Ответить
Эта страница в полной версии