Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Исскуственно создать HTTP код 404
 
 автор: Den*s   (21.11.2013 в 16:57)   письмо автору
 
 

Здравствуйте.
Столкнулся с проблемой, когда на сайте страница удалена или не существует, и при этом во время её посещения отображается пустая страница, сообщение о том что она не существует
Вот как этот механизм реализован

<?
 $query 
mysql_query("SELECT * FROM content WHERE namePage = '$url'  ");
 
$show_content mysql_fetch_assoc($query);
 
 if (
$show_content)
 {
     print 
$show_content["contentPage"];
 }
 else print 
"<p><h3>Ошибка 404.</h3> Страница не найдена</p>";
?>


Это не правильно, нужно каким то образом сделать так, что бы сервер выдавал ошибку 404, подскажите как это сделать

  Ответить  
 
 автор: psychomc   (21.11.2013 в 17:09)   письмо автору
 
   для: Den*s   (21.11.2013 в 16:57)
 

http://php.net/manual/ru/function.header.php

  Ответить  
 
 автор: Den*s   (21.11.2013 в 17:48)   письмо автору
 
   для: psychomc   (21.11.2013 в 17:09)
 

Спасибо, то что нужно

  Ответить  
 
 автор: Den*s   (21.11.2013 в 18:44)   письмо автору
 
   для: psychomc   (21.11.2013 в 17:09)
 


<?
if (условие выполняется)
   {
      
//
   
}
   else
   {
       
header("HTTP/1.0 404 Not Found");
   }
?>

Не срабатывает, заливаю на хостинг, проверяю, пишет

HTTP/1.1 200 OK
Date: Thu, 21 Nov 2013 14:41:48 GMT
Server: Apache
X-Powered-By: PHP/5.3.3
X-SERVER: 73
Transfer-Encoding: chunked
Content-Type: text/html

  Ответить  
 
 автор: psychomc   (21.11.2013 в 19:08)   письмо автору
 
   для: Den*s   (21.11.2013 в 18:44)
 

нужен весь код, а желательно сам файл скрипта

  Ответить  
 
 автор: Den*s   (21.11.2013 в 19:13)   письмо автору
 
   для: psychomc   (21.11.2013 в 19:08)
 


<?
   
include_once("config/config.php");
   include_once(
"inc/top_code.php");
   
$tableName "content";
   
$current_url mysql_real_escape_string($_SERVER['REQUEST_URI']);
   
//
   
$cur explode("?"$current_url);
   
//
   
$query mysql_query("SELECT * FROM $tableName WHERE namePage = '$url' ");
   
$content_show mysql_fetch_assoc($query);
   
//
   
if ($content_show && $url && count($cur) < 2)
   {
       
$text $content_show["content"];
       
//print $content_show["content"];
       //  
       //if ($url == "contacts") include_once("contact_form.php");
   
}
   else
   {
        
header("HTTP/1.0 404 Not Found");
        
//exit();
        /*$sapi_name = php_sapi_name();
        if ($sapi_name == 'cgi' || $sapi_name == 'cgi-fcgi') {
            header('Status: 404 Not Found');
        } else {
            header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
        }*/
   
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<title><?=$title;?></title>
<meta content="<?=$keywords;?>" name="keywords" />
<meta content="<?=$description;?>" name="description" />

<? include_once("meta.php"); ?>

<link href="/style.css" rel="stylesheet" type="text/css" />

</head>

<body>
<? include_once("top.php"); ?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="40%" height="503" valign="bottom" background="images/center_left.jpg" style="background-position:top right; background-repeat:no-repeat;">&nbsp;</td>
    <td valign="top" background="images/fon2.jpg" style="background-position:top; background-repeat:no-repeat;">
     <img src="images/space.png" width="910" height="5" /> 
          
     <table width="910" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="100" valign="top">&nbsp;</td>
    <td valign="top" class="content">
<?
 
if ($text)
 {
     print 
$text;
     
     if (
$url == "contacts") include_once("contact_form.php");
 }
 else print 
"<p><h3>Ошибка 404.</h3> Страницы не существует</p>";
 
?>    
      </td>
    <td width="190" align="right" valign="top"><? include_once("right_menu.php"); ?></td>
  </tr>
</table>

        
    </td>
    <td width="60%" background="images/center_right2.jpg" style="background-position:top left; background-repeat:no-repeat;">&nbsp;</td>
  </tr>
</table>
<? include_once("bottom.php"); ?>
</body>
</html>

  Ответить  
 
 автор: psychomc   (21.11.2013 в 20:15)   письмо автору
 
   для: Den*s   (21.11.2013 в 19:13)
 

думаете я у вас просто так попросил файл скрипта? срочненько курить мануал по функции header. невооруженным взглядом видно что у вас в самом верху пустая строка до откр. тэга PHP. никакого вывода в браузер до использования header быть не должно. заодно почитайте что такое BOM

  Ответить  
 
 автор: psychomc   (21.11.2013 в 22:57)   письмо автору
 
   для: Den*s   (21.11.2013 в 19:13)
 

и обязательно в самый верх скрипта добавьте error_reporting(E_ALL);

  Ответить  
 
 автор: Den*s   (22.11.2013 в 14:03)   письмо автору
2.5 Кб
 
   для: psychomc   (21.11.2013 в 22:57)
 

Мануал я читал, убрал в подключаемых страницах и вверху все пустые строки и пробелы.
Просто при копировании кода вставилось лишнее.
Файл во вложении.

  Ответить  
 
 автор: Den*s   (23.11.2013 в 19:52)   письмо автору
 
   для: Den*s   (22.11.2013 в 14:03)
 

Содержимое .htaccess

RewriteEngine on
RewriteBase /

RewriteRule ^([a-zA-Z0-9_-]+)$ inner.php?url=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ inner.php?url=$1

  Ответить  
 
 автор: Deed   (23.11.2013 в 21:21)   письмо автору
 
   для: Den*s   (23.11.2013 в 19:52)
 

Для реакции на на ошибки нужно прописать адреса к страницам, которые эти ошибки выдают.
Если у вас включен RewriteEngine, то можно прописать дальше такие директивы:

ErrorDocument 401 /error/401
ErrorDocument 403 /error/403
ErrorDocument 404 /error/404
ErrorDocument 500 /error/500

А в php, если, к примеру, запрос в базе ничего не дал, можно написать примерно так:

<?
header
($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
include(
"notFound.php");
?>

Где можно со вкусом оформить свою страницу ошибки.
Или же явно генерировать переход на страницу ошибок:

<?
header
("Location:".$mainlink."/error/404");
?>

  Ответить  
 
 автор: Den*s   (25.11.2013 в 09:15)   письмо автору
 
   для: Deed   (23.11.2013 в 21:21)
 


ErrorDocument 404 /error/404

Не поможет, так как ответ сервера 200, получается запись бесполезна
Далее

<?
header
($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
include(
"notFound.php");
?> 

Получается ответ сервера 200, просто по этой странице откроется страница с ошибкой.
Яндекс не даст удалить страницу в вебмастере, так как ответ страницы 200.

То есть в динамической странице выдать 404 ошибку сервера не возможно :(

  Ответить  
 
 автор: MHz   (25.11.2013 в 18:18)   письмо автору
 
   для: Den*s   (25.11.2013 в 09:15)
 

Попробуй полный ее вариант использовать.
<?php header (getenv ("SERVER_PROTOCOL") . "404 not found"true404); ?>

Хотя наверняка что-то выводит данные до установки заголовка. Еще посмотреть про буферизированный вывод.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования