|
|
|
|
$id = $_GET['id']
if($id){ echo "поймал id<br/>";} else {echo "нет id<br/>";}
|
Вот так работает без ошибок на php5.31 А на хостинге php5.33 выдаёт ошибки.
Вопрос. Из-за чего так?
Виноват плохой скрипт, версия php или настройки хостинга? | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:00)
| | Если _GET['id'] не существует, то предупреждения от интерпитатора вполне предсказуемы.
Плюс, не стоит использовать if ($id), используйте if ( ! empty($id)), так ваш код будет основываться на четкой логике, а не на ошибке (а в первом случаи false получается, по сути, в результате ошибки) | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2011 в 15:05)
| | А как отключить вывод этих ошибок? | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:25)
| | их включить нужно, а не выключить.
А сами ошибки - исправить. | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:00)
| | потому что не существует элемента массива $_GET с индексом id.
<?php
$id = isset($_GET["id"]) ? abs((int) $_GET["id"]) : null;
if ($id) {
// ...
}
else {
// ...
}
|
| |
|
|
|
|
|
|
|
для: Красная_шляпа
(05.02.2011 в 15:05)
| | потому что не существует элемента массива $_GET с индексом id.
Даже если передать index.php?id=2
На том хостинге где php 5.33 Возникает ошибка.
С isset($_GET["id"]) не возникает. | |
|
|
|
|
|
|
|
для: Красная_шляпа
(05.02.2011 в 15:05)
| | потому что не существует элемента массива $_GET с индексом id.
Даже если передать index.php?id=2
На том хостинге где php 5.33 Возникает ошибка.
С isset($_GET["id"]) не возникает. | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:21)
| | Может, уже покажите ошибку? | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2011 в 15:22)
| | Notice: Undefined index: id
Хотя index.php?id=2 id я передавал | |
|
|
|
|
|
|
|
для: Красная_шляпа
(05.02.2011 в 15:05)
| | удал. повторное сообщение. | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:00)
| | Где-то уже писал:
$id=!empty($_GET['id']) ? intval($_GET['id']) : NULL;
|
| |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:00)
| | диагностика ошибок от версии php не зависит.
А скрипт плохой, уж коль скоро обращается к элементу массива без предварительной проверки, существует этот элемент или нет. | |
|
|
|
|
|
|
|
для: Trianon
(05.02.2011 в 15:25)
| | Скрипт я сразу подправил.
Но на домашнем компьютере и на хостинге бестхостер ошибки не выходят.
А на тот который я перешёл вчера эти ошибки выводятся. Весь мой сайт покрылся одними ошибками =) | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:28)
| | То что на хостинге ошибки не выводятся - это еще можно как-то по обывательски оправдать.
Все же вываливать на ни в чем неповинного посетителя сайта кучу ошибок как минимум странно, да и вредно - уйдет же и не вернется, и будет прав.
А вот то, что ошибки не выводятся на собственном компе - не оправдывается ничем.
Почему "по-обывательски"?
Потому что, если Вы скрипт проверили на своем компе, то львиная доля ошибок в скрипте будет исправлена еще до того, как он окажется на хостинге.
Тем не менее, поскольку конфигурации тестовой машины и хостинга всегда хотя бы немного да отличаются, условия для невыловленных ошибок так или иначе могут всплыть.
И тут одно из двух.
Либо регистрировать ошибки в лог-файл, подавляя вывод. И тогда этот лог-файл придется регулярно просматривать.
Либо таки оставлять вывод ошибок открытым. | |
|
|
|
|
|
|
|
для: Trianon
(05.02.2011 в 15:33)
| | На хостинге и на компе вывод ошибок включён. Так же в скрипте в самом начале стоит строчка error_reporting(E_ALL);
И ошибки выводятся. Но нет никаких ошибок связанных с тем что я писал в начале. | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:41)
| | >На хостинге и на компе вывод ошибок включён. Так же в скрипте в самом начале стоит строчка error_reporting(E_ALL);
>
>И ошибки выводятся. Но нет никаких ошибок связанных с тем что я писал в начале.
Был бы включен - выводились бы и на компе.
И включать, кстати, нужно не функцией в скритпе, а строкой в конфиге.
В крайнем случае - в .htaccess | |
|
|
|
|
|
|
|
для: Trianon
(05.02.2011 в 15:43)
| | Домашний компьютер. Денвер 3:
<?
ini_set('error_reporting', 1);
error_reporting(E_ALL|E_NOTICE);
$id=$_GET['id'];
?>
|
Ошибок нет
Хостинг с php 5.33:
<?
ini_set('error_reporting', 1);
error_reporting(E_ALL|E_NOTICE);
$id=$_GET['id'];
?>
|
ошибка Notice: Undefined index: id in /usr/home/webcam/htdocs/test2.php on line 4 | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:55)
| | Вам несколько раз показали, как надо исправить. | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2011 в 16:02)
| | я спрашиваю не как исправить. А почему на домашнем компьютере с php 5.31 И на хостинге бестхостер с php 5(не помню точно) Ошибок из-за $id=$_GET['id']; не возникает А на новом с php они есть? | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 16:07)
| | И на это вам тоже ответили.
Это не ошибка, а предупреждение, что вы обращаетесь к несуществующему индексу.
Сделайте print_r($_GET), и если там есть элемент с индексом id, значит, баг, что ж еще остается. | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2011 в 16:09)
| | вывело:
Array ( ) Notice: Undefined index: id in /usr/home/webcam/htdocs/test2.php on line 5
|
| |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 16:14)
| | Ну, пустой массив - предупреждение по делу. | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2011 в 16:15)
| | А как отключить вывод этих ошибок? И как включить вывод на своём компьютере? | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 16:18)
| | На рабочем (на хосте) ставите error_reporting(0); На домашнем - error_reporting(E_ALL); | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2011 в 16:22)
| | На рабочем (на хосте) ставите error_reporting(0); - так я не буду видеть другие важные ошибки
На домашнем - error_reporting(E_ALL); - Пробовал эти ошибки не отображаются | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 16:24)
| | Не понял.. Вы же на домашнем будете отрабатывать, зачем на хосте выводить ошибки и предупреждения?
Вам предложили еще одну форму записи - тоже не работает?
Создайте отдельную страницу, новую, чистую, девственную test.php
Введите такие строки:
<?php
error_reporting(E_ALL);
echo $var;
$var = array();
echo $var['id'];
|
Что выводит? | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2011 в 16:27)
| | Notice: Undefined variable: var in Z:\home\proekt9.ru\www\test2.php on line 3
Notice: Undefined index: id in Z:\home\proekt9.ru\www\test2.php on line 5 | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 16:30)
| | Вот видите. Все у вас выводит на компе.
А значит, вы неправильно выставляете уровень предупреждений.
Либо, например, выставляете в начале файлв в E_ALL, а потом где-то в середине у вас выставляется в 0 или еще во что-нибудь. | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 16:18)
| | Найдите конфигурационный файл php.ini, а в нем директиву error_reporting, отключить вывод сообщений можно исправив значение директивы на
error_reporting = E_ALL & ~E_NOTICE
|
включить
На хостинге, редактирование файла php.ini недоступно, можно управлять уровнем ошибок через функцию error_reporting()
<?php
error_reporting(E_ALL & ~E_NOTICE);
?>
|
ветку от сюда перенес | |
|
|
|
|
|
|
|
для: cheops
(05.02.2011 в 16:28)
| | У меня в компьютере в php.ini error_reporting = E_ALL & ~E_NOTICE
А на хостинге error_reporting = E_ALL
Правильно я понял? | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 16:44)
| | Да, правильно. | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:55)
| | попробуйте переписать тестовый скрипт следующим образом:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL|E_NOTICE);
$id=$_GET['id'];
echo '<br>php version: '.PHP_VERSION.'<br>$_GET: ';
var_dump($_GET);
?>
|
BTW. Как именно у Вас по умолчанию расставлены переменные конфигурации, можно узнать с помощью функции ini_get() .
Или посмотреть в фиолетовой странице php_info() - так даже проще. | |
|
|
|
|
|
|
|
для: Trianon
(05.02.2011 в 15:43)
| | Как включить через .htaccess? | |
|
|
|
|
|
|
|
для: BlueWolf
(05.02.2011 в 15:41)
| | У вас там не несколько ли копий скрипта?
А то и ошибки то включины - а не видно, и скрипт вы исправляете - а предупреждение все равно лезет.
Не бывает таких чудес. Только невнимательность. | |
|
|
|