Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ассоциативный массив и кавычки
Форумы портала PHP.SU » PHP » Программирование на PHP » Ассоциативный массив и кавычки

Страниц (1): [1]
 

1. SlavikSG - 24 Марта, 2008 - 08:47:12 - перейти к сообщению
Как для новичка, мне не ясен такой момент...
Есть сторонняя, довольно большая и наворочанная программа. Когда я ее в первый раз запустил, то увидел в браузере не интерфейс программы, а длиннющий список ошибок, уходящий глубок вниз браузера. Начал разбираться в чем дело и понял, что все ассоциативные массивы написаны в коде этой программы таким образом:
$G[country] = 7;

а не так:
$G['country'] = 7;
и не так:
$G["country"] = 7;
То есть, имя в ассоциативном массиве не берется в кавычки. Если в настройках самого PHP, в файле php.ini директиву написать так:
display_errors = Off
то ошибки в браузере сразу пропадают и программа начинает замечательно работать. И вроде бы, можно было бы про это дело забыть. Но потом вылезла другая бяка. В "лог-файл" самого веб сервера Апач, в его родной файл error.log, начали писаться те же самые сообщения об ошибках, что были до этого в браузере. За ночь работы этой программы, лог-файл мог вырасти до 2ггб!!! Недовольство, огорчение

Не могу понять, как это должно лечится. Пока вижу для себя лишь один способ. Переписывать весь код этой проги и поставить везде кавычки. Это конечно можно сделать, но я просто не уверен, правильно ли это будет. Может что-то нужно в самом PHP настроить, и тогда такое написание станет вполне возможным и разрешенным? Скажите, плиииз!!!

Связка:
Windows XP SP-2
Apache HTTP Server v2.2.4
PHP v5.2.3
MySQL v5.0.45
2. RomAndry - 24 Марта, 2008 - 09:44:51 - перейти к сообщению
Можно отключить вообще вывод ошибок и запись их в лог, но я бы посоветовал всеже поставить кавычки!
3. EuGen - 24 Марта, 2008 - 09:46:51 - перейти к сообщению
Вам скорее всего, проще настроить Apache так, чтобы не логировались ошибки.
Автор программы, видимо, не слишком утруждал себя контролем таких вещей. Правильно, конечно, указывать все ключи ассоциативных массивов в кавычках.
4. SlavikSG - 24 Марта, 2008 - 11:00:48 - перейти к сообщению
Ага, понял. Пасиб!

Значит это все же небольшой ляп со стороны разработчиков. Я уж было подумал, что оба варианта написания кода правильные и что у меня что-то на так в ПХП настроено.

Тогда у меня возникает другой вопрос. Сори, не по теме. Отключение записи в лог файл Апача ошибок не приведет ли к отключению записи туда вообще всех ошибок? Это было бы крайне нежелательно делать.
5. EuGen - 24 Марта, 2008 - 11:45:41 - перейти к сообщению
Если у Вас система построена на VirtualHost то нет.
6. SlavikSG - 24 Марта, 2008 - 13:45:15 - перейти к сообщению
Понял. В общем, нужно изменять код. В будущем, по любому это будет удобнее.

Всем спасибо!
7. valenok - 24 Марта, 2008 - 15:56:37 - перейти к сообщению
Цитата:
Я уж было подумал, что оба варианта написания кода правильные

Ак так можно было подумать если вам php пишет: Ошибка

А для переписки кода можно воспользоваться одним и многих редакторов кода
поддерживающих автозамену с регулярными выражениями. ( Editplus.com поддерживает )
8. SlavikSG - 25 Марта, 2008 - 08:19:00 - перейти к сообщению
valenok пишет:
Цитата:
Я уж было подумал, что оба варианта написания кода правильные

Ак так можно было подумать если вам php пишет: Ошибка

Дык, ведь все же позволяет он так писать, если выключить контроль ошибок! Вот я и подумал, что если выключить или включить в настройках PHP еще что-то, то вообще все станет шоколадным. Улыбка

valenok пишет:

А для переписки кода можно воспользоваться одним и многих редакторов кода
поддерживающих автозамену с регулярными выражениями. ( Editplus.com поддерживает )

Вряд ли там прокатят регулярные выражения. Где-то кавычки все же есть, где-то их нет. Где-то кавычки нужно ставить, где-то нет. Где-то нужно учитывать знак $, где-то не нужно. В общем, по любому, нужно контролировать все глазами, которые сломаются уже через 15 минут такой автозамены. Улыбка Одна малейшая ошибка может привести к ошибке, которую потом фиг найдешь, учитывая, что это чужой код, а не мой.

 

Powered by ExBB FM 1.0 RC1