Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> error.log сайта, ограничение логов, ошибки сайта 
V
    Опции темы
nicka47
  Дата 11.7.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Сайт создает огромные error.log логи, почему то на всех остальных сайтах подобная проблема никогда не вставала, то ли на других серверах  происходит какой то контроль за логами, ограничение их размеров. 

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

типы ошибок  - PHP Warning, PHP Notice

лог раздуваеться за пару часов до нескольких мегабайт, наверно это ненормально, можно ли исходя из такого количества ошибок сделать вывод, что они могут приводить сервер к зависанию?

Понимаю, что без представления тут конкретных ошибок, трудно ответить. Но меня пока интересуют ощие ответы на вопросы, типа способы работы с лог файлами. Должен ли контролировать их создатель сайта, или это задача администратора сервера. Нормальное ли дело такое количество ошибок, если учитывать, что сайт достаточно большой, и работает правильно. ПОрядок уникальных посетителей небольшой, приблизительно 500 человек
PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Цитата(nicka47 @  11.7.2008,  10:38 Найти цитируемый пост)
Поскольку система написания кодов одна, то такая же проблема с ошибками должна была вставать на всех остальных сайтах.

Нет. Другие сайты пишут прямыми руками, так, чтобы при нормальной работе они сообщений об ошибках не выдавали.


PM   Вверх
nicka47
Дата 11.7.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Feldmarschall, я имела все свои предыдущие работы.

ТО есть, вы хотите сказать, что правильно написаный код, не может выдавать никаких ошибок в логах?

Добавлено через 2 минуты и 29 секунд
хорошо, давайте попробуем конкретно, вот одна из ошибок, помогите разобраться и устранить:

[Fri Jul 11 09:05:02 2008] [error] [client 212.58.116.72] PHP Warning:  reset() [<a href='function.reset'>function.reset</a>]: Passed variable is not an array or object in /var/www/db1/web/Conn/var.inc on line 9

в данном файле(var.inc ), на 9 строчке у меня написано: 

Код
for(reset($HTTP_POST_VARS); list($k,$v)=each($HTTP_POST_VARS);) {$$k=$v;}


что не так?
PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



При штатной работе - не должны. Это, мне кажется, само собой разумеется. Сообщения об ошибках код должен выдавать только при возникновении ошибок.

К примеру:
Есть код, который принимает данные из формы.
Если данные пришли, то код нормально отработал без ошибок.
Если данных нет - код выдает ошибку - "Нету такой переменной там, где вы ожидаете, что она должна быть".
Разработчик смотрит - опа, и правда, опечатку в имени сделал. И исправляет ошибку. 

Или малолетний хакир играется с формой, посылает не то, что ожидалось, а мы в логе смотрим - ага, что-то здесь было не то!

Вот для чего служат сообщения об ошибках.

чтобы исправить ситуацию сейчас, надо поставить вначале 
error_reporting(E_ALL ~E_NOTICE);

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

Чтобы при штатной работе они ошибок НЕ ВЫДАВАЛИ. Как это делают сейчас.
PM   Вверх
nicka47
Дата 11.7.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



или еще одна: 

[Fri Jul 11 09:05:28 2008] [error] [client 80.92.179.135] PHP Notice:  Undefined variable: id in /var/www/db1/web/index.php on line 50, referer: http://top.ge/search.php?q=er

У меня в коде в этом месте стоит небольшая операция с этой переменной, если переменная не определена, я не выполняю операцию, 

Код

$int = (int)$id;
return ((is_int((int)$id) && $id== (string)$int)) ? $id: 0;



допустим в урл строке эта переменная при данном запросе не передаеться, это уже ошибка?

Добавлено через 1 минуту и 25 секунд
Feldmarschall, вы не поняли, ошибки выдает не сайт, а апаче фиксирует и сохраняет в  логи.
PM MAIL   Вверх
Pokoinik
Дата 11.7.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 17.3.2007
Где: /dev/null

Репутация: 2
Всего: 3



Цитата(nicka47 @  11.7.2008,  10:54 Найти цитируемый пост)
что не так?

1. $HTTP_POST_VARS устаревший синтаксис, следует использовать $_POST;
2. $HTTP_POST_VARS не является массивом или объектом.
3. Ворненги, нотейсы и ошибки нужно исправлять.



--------------------
ICQ: 490-993
Существует только 10 типов людей: те, которые понимают двоичную систему, и которые ее не понимают!!!
Опасайтесь людей верующих, ибо у них есть боги, которые им все прощают.

Делай или не делай! Никаких попробую!
Йода (Yoda), мастер-джедай
PM MAIL ICQ   Вверх
Feldmarschall
Дата 11.7.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Цитата(nicka47 @  11.7.2008,  11:10 Найти цитируемый пост)
вы не поняли, ошибки выдает не сайт, а апаче фиксирует и сохраняет в  логи. 

Оч. смешно. 
Я все прекрасно понимаю. 
Только выдает ошибки все равно сайт. А куда именно - определяется настройками. И пишет в логи PHP, а не апач. Это ошибки РНР, а не апача. С какой стати он будет чужие ошибки писать?

Сайт не выдает ошибки в браузер. но так и надо писать, а не "сайт не выдает ошибки"



Это сообщение отредактировал(а) Feldmarschall - 11.7.2008, 11:22
PM   Вверх
nicka47
Дата 11.7.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



error_reporting(E_ALL);

поставила это в начало страницы, и при загрузке сайта вышло огромное количество ошибок типа

Undefined variable: pp in C:\xampp\htdocs\site\index.php on line 323

получаеться я должна перед тем как выполнять например тако код:
Код

if ($pp=="ab") {
     include("aa/about.php"); 
}


я должна как то проверить пришла ли эта переменная pp ко мне? Так делают все?
А то что я делаю  - грубая ошибка написания кода?

Добавлено через 1 минуту и 47 секунд
Feldmarschall, ну так и знала, щас пойдут смеяться над моей неграммотностью.

Послушайте , я не за этим пришла сюда, я пришла сказать, что не знаю чего то, и прошу научить меня.

Добавлено через 10 минут и 47 секунд
Pokoinik, хорошо, поняла, значит это моя вина, все эти ошибки. А мы как то оправдывались...

Тогда помогите устранить их. Вот у меня вопрос выше насчет нобьявленных переменных. Как с этим моментом работать правильно?

И еще тогда вопрос, наверно вы в курсе будете, почему при таком моем изначальном неправильном подходе к написанию кода, во всех остальных проектах проблем с логами ан других серверах не было? Значит ли это, что возможно администраторы серверов как то ставят ограничение на размеры этих лог файлов, или что то подобное? 

И еще один вопрос, насколько такое кол-во элементарных ошибок при неккоректном написании кода, может тормозить работу сайта и перегружать сервер?
PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



nicka47, во-первых, не стоит апеллировать к таким вещам, как "я не за этим пришла сюда". Мало ли кто зачем приходит. Жизнь такая штука, что нам приходиться сталкиваться не с тем, с чем нам бы хотелось.
Во-вторых, смех - одна из самых положительных эмоций. Смех продлевает жизнь. Что в этом плохого - непонятно. 
В-третьих, я исправил свое сообщение, когда понял, что имеется в виду.

По поводу $HHTP_POST_VARS. На сервере стоит новая версия РНР, в которой эти устаревшие массивы отключены.

Цитата(nicka47 @  11.7.2008,  11:18 Найти цитируемый пост)
я должна как то проверить пришла ли эта переменная pp ко мне? Так делают все?
А то что я делаю  - грубая ошибка написания кода?

Ошибка, но по классификации разработчиков языка, не грубая.
PM   Вверх
nicka47
Дата 11.7.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



короче у меня весь сайт кишит операциями с необьявленными переменными Undefined variable, помогите хоть эту проблему устранить, научите как правильно надо обращаться к переменной, прежде чем начинать с нею какие то операции.
PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Сам код for(reset(... - из третьей версии РНР. А сейчас уже на подходе шестая
Для перебора ассоциативных массивов уже 10 лет, как используется оператор foreach.
заменить этот фикл надо таким:
foreach ($_POST as $k => $v) {
Другое дело, что сама по себе эта строчка представляет собой огромную дыру. С её помощью хакер может изменить любую переменную в коде.

Добавлено через 2 минуты и 16 секунд
Быстро решить проблемы с необъявленными переменными не получится. 
Надо переписывать весь код.

Быстро можно решить только проблему с сообщениями о таких переменных. Как - я уже писал.
PM   Вверх
nicka47
Дата 11.7.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Feldmarschall, поняла, простите за реакцию, такой мой характер. 

Насчет неграммотных моих замечаний, да я всегда от этого страдала, по причине отсутствия базовых знаний, но необходимости все же как то реагировать на возникающие проблемы.



Ошибка, но по классификации разработчиков языка, не грубая.  
- спасибо и на этом, вздохнула с облегчением.

Но придеться на нею все таки поработать, так как логи разбухаються во основном за их счет.

Добавлено через 6 минут и 44 секунды
error_reporting(E_ALL ^ E_NOTICE);

значит, если это будет сидеть у меня на сайте, то все PHP Notice ошибки не будут фиксироваться? - замечательно для начала smile

Добавлено через 13 минут и 6 секунд
Код

error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING );


синтаксис верно записала? два раз по ^ ? вроде ошибки не выдает

значит таким образом  E_WARNING  тоже исключаем для штатной работы?  smile 


PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Нет. c warning-ом все гораздо хуже.
Если оно есть, это значит, что сайт просто не работает.

Сама идея так сделать меня огорчает зело. Как я и ожидал, возможность сунуть голову в песок и не видеть сообщений об ошибках, оказалась гораздо привлекательнее, чем ошибки исправлять.

Добавлено через 1 минуту и 6 секунд
В принципе, если уж на то пошло, сделай error_reporting(0)
Никаких ошибок.
Логи - девственно чистые. Никаких забот.
PM   Вверх
nicka47
Дата 11.7.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



.no_delete - а что за файл сидит в папке с логами ? не подскажете его предназначени?


Цитата(Feldmarschall @  11.7.2008,  11:34 Найти цитируемый пост)
заменить этот фикл надо таким:
foreach ($_POST as $k => $v) {


у меня в var.inc  файле стоит след код, которые годами переноситься мною из одно проекта в другое, поскольку до сих пор все меня устраивало, то я не в никала в его глубинное назначение

Код

foreach($_GET as $k=>$v)
        $$k=addslashes($v);
        
    foreach($_POST as $k=>$v)
        $$k=addslashes($v);
        
   for(reset($HTTP_POST_VARS); list($k,$v)=each($HTTP_POST_VARS);) {$$k=$v;}





Цитата(Feldmarschall @  11.7.2008,  11:34 Найти цитируемый пост)
Другое дело, что сама по себе эта строчка представляет собой огромную дыру. С её помощью хакер может изменить любую переменную в коде.
 - какой ужас? это вы о каком коде? 

Код

foreach($_GET as $k=>$v)
 -об этом или
Код

 for(reset($HTTP_POST_VARS); 
 об этом???

хотя у меня и то и другое сидит...........

вообщем, прошу мне более подробно обяснить в чем дыра, как для самого непонятливого, пожалуйста

Добавлено @ 12:03
Feldmarschall,  нет, я имела в виду для ближайшего спасения, поскольку логи раздуваються, и с меня отчет.

А для решения, я все таки вас помочь тут мне. Например вопрос с необьявленными переменными - как надо делать это правильно, пока кажеться никто не написал??? 
Чтобы в дальнейшем придерживаться правильной манере написания кода, по мере моих умственных возможностей.


Цитата(Feldmarschall @  11.7.2008,  11:56 Найти цитируемый пост)
Нет. c warning-ом все гораздо хуже.
Если оно есть, это значит, что сайт просто не работает.


но как?? сайт у меня работает , а подобных в ворнингов в изучаемом мною сейчас логе мягко говоря до фига?? поясните пожулайста

Добавлено @ 12:06
[Fri Jul 11 09:05:34 2008] [error] [client 212.58.116.72] PHP Warning:  Call-time pass-by-reference has been deprecated - argument passed by value;  If you would like to pass it by reference, modify the declaration of fsockopen().  If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file.  However, future versions may not support this any longer.  in /var/www/db/web/includes/mail_class.php on line 76


вот например одна из подобных ворнингов... это сидит в готовом классе для оправки писем. Что все это может означать? ведь письма с помощью этого класса у меня все таки стабильно отправляються...


вот такая строчка там на 76 строке:
Код

function send($server, $to, $from, $subject="", $headers="") { 


Добавлено @ 12:09
все  - поняла, это 2 основные ошибки моего кода. 
1 - необлявленные переменные (прошу помочь с решением)
2- это проблема с этим устаревшим кодом 
Код
for(reset($HTTP_POST_VARS); list($k,$v)=each($HTTP_POST_VARS);) {$$k=$v;}


Тема начинает приобретать более четкие очертания smile

Добавлено @ 12:13
// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);

подучаеться на моем сервере по умолчанию эта установка измененая, и иза этого шло раздвание логов, а ведь сколько раз просила админа, сделать с этим что нибудь(я тогда четко не знала что), не понимаю зачем было трогать эту установку. Кому на руку сбор эти НОтисных сообщений на деуйствующем сайте?




Это сообщение отредактировал(а) nicka47 - 14.7.2008, 13:05
PM MAIL   Вверх
skyboy
Дата 11.7.2008, 12:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  11.7.2008,  10:58 Найти цитируемый пост)
 сайт у меня работает

пробито у машины колесо. вроде как едет, но при поворте можно и разбиться.
warning означает реально нехорошие вещи.  конечно, может быть, что все эти варнинги приводят только к тому, что у тебя что-то не отображается при выводе... но все равно - рано или поздно сломается все. при таком подходе-то.
Цитата(nicka47 @  11.7.2008,  10:58 Найти цитируемый пост)
Например вопрос с необьявленными переменными - как надо делать это правильно, пока кажеться никто не написал??? 

надо просто подумать.
ты пытаешься работать с переменной, которая была необъявлена. тебе об этом говорится прямо. так объяви её. инициализируй каким-то значением по умолчанию. и будет нормально.
для проверки, задана ли переменная, существует функция isset. которая не выдает нотисы, а возвращает "false", если переменная не была определена.
Цитата(nicka47 @  11.7.2008,  10:58 Найти цитируемый пост)
какой ужас? это вы о каком коде? 

и тот, и тот код загоняет все полученные через GET/POST/COOKIE переменные в переменные кода. это практически механизм register_globals
учитывая, что ты ещё и не инициализируешь переменные, я могу передавать любые переменные через GET. и они будут приниматься твоим скриптом, как "родные". само по себе это ни плохо, ни хорошо. но потенциально - дыра в безопасности.
надо больше читать сообщения об ошибках. там, обычно, сразу указывается причина.
остается только исправить.

Добавлено через 1 минуту и 2 секунды
Цитата(nicka47 @  11.7.2008,  10:58 Найти цитируемый пост)
А для решения, я все таки вас помочь тут мне.

потрясающе smile
PM MAIL   Вверх
nicka47
Дата 11.7.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



skyboy, все поняла, спасибо.

ПРоблема прояснилась, буду разбираться, всем спасибо smile 

PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Я уже писал - кому на руку. Разработчику. приводил примеры, целых два.

Цитата(nicka47 @  11.7.2008,  11:58 Найти цитируемый пост)
но как?? сайт у меня работает

Это правда. ворнинги бывают разные. чаще всего они означают, что строка с такой ошибокй просто не работает, к примеру - самый первый, который ты привела.
В последнем же ошибка не критическая. В коде функции по отправке почты, при вызове функции fsockopen перед какой-то переменной стоит значок &. Он там нафиг не нужен и его надо оттуда убрать.

Цитата(nicka47 @  11.7.2008,  11:58 Найти цитируемый пост)
акой ужас? это вы о каком коде? 

$$k=$v; - вот об этом.
первая переменная - это имя. вторая - значение. хакер просто пишет в адресной строке имя значение любой переменной, а этот код добросовестно перезаписывает любую переменную сайта.

Цитата(nicka47 @  11.7.2008,  11:58 Найти цитируемый пост)
вопрос с необьявленными переменными - как надо делать это правильно,

Это самый сложный вопрос из всех.
В большинстве языков программирования переменную надо обязательно объявить перед использованием. просто сказать скрипту, что мы будем использовать такие-то переменные. 
В самом начале, когда только Расмус Лердорф писал язык РНР, он подумал, что это неудобно, и можно использовать переменную сразу, как только она была написана (как в бейсике). 
Но со временем, когда язык стал развиваться, стало понятно, что это прямая дорога к ошибкам и проблемам. На эту тему есть анекдот:
Цитата

Мальвина дала Буратину два яблока. Некто взял у него одно яблоко. Сколько яблок осталось у Буратино?
Правильный ответ: неизвестно. Мы не знаем, сколько яблок было у Буратино до этого.
Мораль: надо инициализировать переменные перед использованием.


Можно перечислить в самом начале скрипта все переменные, которые мы будем использовать.
К примеру, если у нас используется переменная $i, то можно написать
Код

$i=0;

И у нас в скрипте теперь будет переменная, значение которой мы точно знаем.
И так надо поступить со всеми переменными, используемыми в скрипте.
Но с данными, приходящими из браузера, так не получится. Мы же не можем предугадать, какое значение они будут иметь?
поэтому надо писать специальный код
не $var="";
а
Код

if (isset($_POST['var'])) $var=$_POST['var']; else $var="";
if (isset($_POST['var1'])) $var1=$_POST['var1']; else $var1="";
if (isset($_POST['var2'])) $var2=$_POST['var2']; else $var2="";


Главное достоинство этого кода в том, что мы здесь контролируем, какие переменные пускать в свой скрипт, а какие - не пускать. В отличие от твоих циклов, которые запускают всех без разбору.



PM   Вверх
nicka47
Дата 11.7.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Цитата(Feldmarschall @  11.7.2008,  12:54 Найти цитируемый пост)
Я уже писал - кому на руку. Разработчику. приводил примеры, целых два.

 да нет же, если мне как разработчику , понадобиться прочитать ошибки, я сделаю это локально у себя, а на реальном сервере это только приводит к раздуванию логов, что мне, как разработчику не нужно, так как с меня , как с разработчика, идет спрос заказчика.

Добавлено через 3 минуты и 41 секунду
Feldmarschall,  спасибо, кое что начинаю понимать. совершенно не учитывала такие важные вопросы до сих пор. Большой пробел в работе
PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Ты правда думаешь, что ошибки могут появляться только при разработке сайта, а при работе никогда никаких ошибок не бывает?

К примеру, ошибка - файл не найден. На хосте файла нет, а дома - есть.
И как ты собираешься эту ошибку "методом домашнего запуска" исправлять?

вот, почитай ещё здесь: http://phpfaq.ru/debug2

Это сообщение отредактировал(а) Feldmarschall - 11.7.2008, 13:24
PM   Вверх
skyboy
Дата 11.7.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  11.7.2008,  12:03 Найти цитируемый пост)
 я сделаю это локально у себя, а на реальном сервере это только приводит к раздуванию логов

нет. ты не права. невозможно сделать программу без единой ошибки(логической, алгоритмической) или хотя бы - без единого недочета.
и у себя локально ты сможешь обнаружить только самые явные ошибки. 
то, что при передаче отрицательного числа через форму у тебя нарушается структура каталога ты можешь  не заметить. а в "полевых условиях" рано или поздно это всплывет. так зачем себюе перекрывать кислород? да, и есть вещи, которые локально могут не работать(например, обращение к консоли через system или отправка эл. почты через mail() вполне может не работать под windows).

Добавлено через 5 минут и 45 секунд
Цитата(skyboy @  11.7.2008,  12:28 Найти цитируемый пост)
и у себя локально ты сможешь обнаружить только самые явные ошибки. 

и это не оскорбление. такая уж специфика - невозможно протестировать на всех возможных данных.
PM MAIL   Вверх
nicka47
Дата 11.7.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



поверте, я прекрасно понимаю, что невозможно писать без ошибок, что возможны всевозможные варианты, и куча  внезапновозникающих непредвиденных вариантов в ходе работы. Может не так глубоко, но я занимаюсь этим уже 10 лет, некоторый опыт есть.

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

Добавлено через 8 минут и 10 секунд
 smile    smile 
меня нужно дисквалифицировать
PM MAIL   Вверх
skyboy
Дата 11.7.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  11.7.2008,  12:52 Найти цитируемый пост)
меня нужно дисквалифицировать

т.е. вариант с обучением не подходит? не реализуем?
PM MAIL   Вверх
nicka47
Дата 11.7.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



skyboy,  за все прежние ошибки
PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 14:17 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



все прежние ошибки наоборот - повышают ценность разработчика.
ну, если он делает из них выводы, конечно. 
PM   Вверх
nicka47
Дата 14.7.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



обьясните пожалуйста в чем разница между этими 2-мя кодами, и почему первый правильный, а второй  - нет?

Код

if (isset($var)) {
    echo "This var is set so I will print.";
}




Код

if ($var) {
    echo "This var is set so I will print.";
}


PM MAIL   Вверх
bars80080
Дата 14.7.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а если у тебя нет переменной $var? ошибка вылетит


if - проверяет, что в скобках true или false, а если переменной нет, то каков результат?

Это сообщение отредактировал(а) bars80080 - 14.7.2008, 13:38
PM MAIL WWW   Вверх
Feldmarschall
Дата 14.7.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Второй тоже правильный. Вне контекста вопрос не имеет смысла.

Добавлено через 6 минут и 55 секунд
Цитата(bars80080 @  14.7.2008,  13:37 Найти цитируемый пост)
если переменной нет, то каков результат?

false. учим букварь

Это сообщение отредактировал(а) Feldmarschall - 14.7.2008, 13:44
PM   Вверх
nicka47
Дата 14.7.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



поняла,


обьясниет пожалуйста, что делает данный код:


Код

if ($HTTP_SESSION_VARS){
     for(reset($HTTP_SESSION_VARS); list($k,$v)=each($HTTP_SESSION_VARS);) {$$k=$v;}
     };


Добавлено через 5 минут и 13 секунд
и еще, что означает эта строчка?

Код

 $method = $_SERVER['REQUEST_METHOD'];

PM MAIL   Вверх
Feldmarschall
Дата 14.7.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Добавление - это шутка?

Добавлено через 1 минуту и 13 секунд
Цитата(nicka47 @  14.7.2008,  13:50 Найти цитируемый пост)
поняла,

сказать по правде, я сильно в этом сомневаюсь
PM   Вверх
nicka47
Дата 14.7.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Цитата(Feldmarschall @  14.7.2008,  13:57 Найти цитируемый пост)
Добавление - это шутка?
, нет, не шутка, прошу обьяснить что дает получение значения REQUEST_METHOD 



Цитата(Feldmarschall @  14.7.2008,  13:38 Найти цитируемый пост)
Вне контекста вопрос не имеет смысла.

мне кажеться имеет, потому что меня интересовала разница между тем, чтобы просто обратиться к переменной и обратиться к ней первым способом. 

Цитата(Feldmarschall @  14.7.2008,  13:57 Найти цитируемый пост)
сказать по правде, я сильно в этом сомневаюсь 


Теперь понимаю, что второй  вариант выбрасывает ошибку, если переменная неопределена, которая как раз наполняет логи нотисами. Значит надо либо сперва инициализироватьпеременную с которой работаешь, либо,е сли она приходит извне, надо определить есть ли она вообще, иначе выйдет ошибка.. что то не так?

Вы считаете я задаю глупые вопросы? Мне так кажеться исходя из ваших слов.  Я просто пытаюсь 
разобраться в теме, которая мне непонятна , на которую до сих пор я не обращала внимание

PM MAIL   Вверх
Fortop
Дата 14.7.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  14.7.2008,  13:50 Найти цитируемый пост)
обьясниет пожалуйста, что делает данный код:
Код

if ($HTTP_SESSION_VARS){
     for(reset($HTTP_SESSION_VARS); list($k,$v)=each($HTTP_SESSION_VARS);) {$$k=$v;}
     };


Эмулирует работу register_globals = on

Это сообщение отредактировал(а) Fortop - 14.7.2008, 14:13


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
bars80080
Дата 14.7.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Feldmarschall, результат: я имел ввиду ещё ошибку, помимо false
PM MAIL WWW   Вверх
Feldmarschall
Дата 14.7.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



то есть, ты всегда пишешь
Код

if (isset($name)) echo $name;
if (isset($res)) {
  while ($row=mysql_fetch...) {

действительно, любую переменную надо проверять перед использованием. а то вдруг будет ошибка?!

Добавлено через 4 минуты и 26 секунд
Цитата(nicka47 @  14.7.2008,  14:11 Найти цитируемый пост)
прошу обьяснить что дает получение значения REQUEST_METHOD 

получение значения REQUEST_METHOD - это $_SERVER['REQUEST_METHOD']
а код  $method = $_SERVER['REQUEST_METHOD']; - это присвоение значения переменной
Когда пишут 
$var = что-то - это значит, что переменной $var присваивают значение. Я был уверен,что это известно любому программисту на пхп.

Цитата(nicka47 @  14.7.2008,  14:11 Найти цитируемый пост)
мне кажеться имеет, потому что меня интересовала разница

"разница" - это одно. "неправильно" - это совсем другое.


Цитата(nicka47 @  14.7.2008,  14:11 Найти цитируемый пост)
что то не так?

Я написал большой текст, в котором, как мне казалось, смог объяснить, почему переменные надо инициализировать. 
Теперь я понимаю, что ничего ровным счетом не объяснил.
PM   Вверх
nicka47
Дата 14.7.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Feldmarschall,  мне кажеться вы цепляетесь к словам. Не каждый может идеально крректно поставить вопрос, я и так стараюсь как могу четко и понятно обьяснить, что хочу спросить.

Присвоение значения переменной за 10 лет работы с сайтами я усвоила

Добавлено через 1 минуту и 27 секунд
Цитата(Feldmarschall @  14.7.2008,  14:23 Найти цитируемый пост)
Я написал большой текст, в котором, как мне казалось, смог объяснить, почему переменные надо инициализировать

возможно, но некоторые вещи до меня доходят постепенно.

Добавлено через 4 минуты и 9 секунд
Fortop,  но применительно конкретно к переменным сессии? Означает ли это, что если я по урл передам переменную ааа со значением, и при наличии данного кода , то $_SESSION['ааа'] будет иметь это значение?
PM MAIL   Вверх
Fortop
Дата 14.7.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  14.7.2008,  14:32 Найти цитируемый пост)
Fortop,  но применительно конкретно к переменным сессии? Означает ли это, что если я по урл передам переменную ааа со значением, и при наличии данного кода , то $_SESSION['ааа'] будет иметь это значение? 

Если register_globals = on, то после этого кода значение из сессии затрет значение переменной $aaa.

Вообще это не слишком правильный способ работы с переменными которые могут прийти извне.

Кто мешает обращаться напрямую к элементам массива?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Feldmarschall
Дата 14.7.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Цитата(nicka47 @  14.7.2008,  14:32 Найти цитируемый пост)
я и так стараюсь как могу четко и понятно обьяснить, что хочу спросить.

во-первых, не "и так". ты не нам одолжение делаешь, задавая вопросы, а себе.
во-вторых, если у тебя не получилось - надо снова задать, постаравшись пояснить свою мысль. А не начинать оправдываться.
а если поняла - то описать, что именно. чтобы в тех местах, в которых не поняла, тебя поправили.

В чем заключался вопрос про реквест метод?
Ты поняла разницу между "чем отличается" и "почему неправильно"? Кто тебе сказал, что if ($var) - неправильно? Какой там был контекст?

PM   Вверх
nicka47
Дата 14.7.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Feldmarschall, знаете что, я не маленькая девочка, чтобы разговаривать со мной в подобном тоне,  спасибо большое за попытки помочь, но больше прошу не утруждать себя сообщениями в моих темах.

Добавлено @ 16:24
Цитата(Fortop @  14.7.2008,  15:07 Найти цитируемый пост)
Если register_globals = on, то после этого кода значение из сессии затрет значение переменной $aaa.
 - да, с этим я сталкивалась , но меня больше интересовало обратное, поскольку тогда смысл сессий теряеться, просто хотела уточнить у проффи, поскольку  провела у себя эксперимент и у меня не затерлось значение переменной сессии, значением $aaa, хотя как я все это понимаю теперь должно было?

Добавлено через 7 минут и 2 секунды
Цитата(Fortop @  14.7.2008,  15:07 Найти цитируемый пост)
Кто мешает обращаться напрямую к элементам массива? 
 - никто, просто отстала от жизни, и вот теперь пытаюсь догнать. А с непривычки все кажеться , что как же это ужасно неудобно длинно будет вместо обычного $aaa, обращаться к любой внешней переменной через массив. НО раз другого выхода нет, то придеться приучаться.


Это сообщение отредактировал(а) nicka47 - 14.7.2008, 16:26
PM MAIL   Вверх
Fortop
Дата 14.7.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  14.7.2008,  16:22 Найти цитируемый пост)
- да, с этим я сталкивалась , но меня больше интересовало обратное, поскольку тогда смысл сессий теряеться, просто хотела уточнить у проффи

во-первых, непонятно какой смысл сессий теряется smile
во-вторых, я на PHP пишу меньше года smile

Цитата(nicka47 @  14.7.2008,  16:22 Найти цитируемый пост)
А с непривычки все кажеться , что как же это ужасно неудобно длинно будет вместо обычного $aaa, обращаться к любой внешней переменной через массив. НО раз другого выхода нет, то придеться приучаться.

Можешь обращаться и к переменной - никто не запрещает. Но рекомендуется проверять и инициализировать все переменные. И не пользоваться register_globals = on


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
skyboy
Дата 14.7.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  14.7.2008,  15:22 Найти цитируемый пост)
что как же это ужасно неудобно длинно будет вместо обычного $aaa, обращаться к любой внешней переменной через массив

удивительно.
т.е. ты думаешь, что люди работают с $_POST/$_GET и при каждом обращении к элементам проверяем на isset и т.д.?
сколько ведь писали про инициализацию переменных...
конечно, лучше и правильнее работать с переменной, в которой данные единожды проверены и обработаны должным образом, чем каждый раз обращаться к "сырым" данным, полученным от пользователя. Но возлагать перенос "из $_POST в мою переменную" надо не на register_globals. и не на цикл, который делает то же, что и register_globals.
должна быть не универсальная, а точная - проверка и инициализация.
например, так(в $_POST['year'] - значение года, введенное пользователем):
Код

$year= 2000;// значение по умолчанию
if(isset($_POST['year']) && is_numeric($_POST['year']))
  $year= intval($_POST['year']);
// и дальше уже используешь только переменную year, забыв о непроверенных данных в $_POST['year']

меня удивляет, как это не пришло тебе в голову.



PM MAIL   Вверх
nicka47
Дата 14.7.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Цитата(Fortop @  14.7.2008,  17:08 Найти цитируемый пост)
во-первых, непонятно какой смысл сессий теряется 

в том, что если перемення поданная через урл будет затирать переменную сессии, то идентификация пользователя при логине теряет смысл...


skyboy, да я собственно об этом твоем примере и сказала, что длинно и неудобно, с непривычки конечно.
Ну представь просто, форма у меня на....ну на 20 допустим элементов, и вместо 
Код

if ($year) { .... }


я буду писать с каждой переменой  сперва 

Код

$year= "";
if(isset($_POST['year']) )
  $year= $_POST['year'];
    ...


это как раздует обьемы и время написания моего нынешнего кода 

я не жалуюсь, я просто уточняю, поскольку для меня это стало новостью, я задаю много вопросов по одному и тому же вопросу, чтобы снова не мимо не проехать.


PM MAIL   Вверх
Feldmarschall
Дата 14.7.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



С формой все гораздо проще...

PM   Вверх
skyboy
Дата 14.7.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  14.7.2008,  19:57 Найти цитируемый пост)
это как раздует обьемы и время написания моего нынешнего кода 

о. да. а так - всего три строчки, зато никакой проверки на корректность значения не надо. и везде надо будет лепить isset перед использованием, потому что коль переменной $_POST['field'] не было получено, то и переменная $field твоим кодом не создастся.
конечно, код
Код

if(isset($var))
 echo $var;
else
 echo '0';
.....
if(isset($var))
 $var2= $var * 5;
else
 $var2= 0;

будет компактнее, чем одна инициализация. ога.
PM MAIL   Вверх
Feldmarschall
Дата 14.7.2008, 21:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Ну. можно поступить и проще. ^E_NOTICE - и никаких вообще проблем...
Тут мы сталкиваемся с еще одной стороной этой проблемы. инициализация нужна программисту. Это очень тонкий момент, который важно понять. Что мы делаем это для себя, а не для тупого компилятора, чтобы отвязался. Если же только наведения красоты в error_log-е  - право, выставления уровня отображения будет вполне достаточно...
PM   Вверх
Fortop
Дата 14.7.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  14.7.2008,  20:57 Найти цитируемый пост)
в том, что если перемення поданная через урл будет затирать переменную сессии, то идентификация пользователя при логине теряет смысл...

Все перепутано в датском королевстве. В твоем случае сессия затирает, а не сессию затирают.

Цитата(nicka47 @  14.7.2008,  20:57 Найти цитируемый пост)
Ну представь просто, форма у меня на....ну на 20 допустим элементов, и вместо 

Хоть 300.
можешь создать простой массив, для всех данных которые могут прийти к тебе из формы. (более того из связанного с ним другого массива, можно саму форму генерировать автоматически, а не рисовать ее ручками).

Код

$allowed = ( 'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
                    ...,
                    'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
                    'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
);

дальше несложная функция
Код


function ourFilter($data, $allowed)
{
    $result = array();

    foreach ($allowed as $key => $validator) {
        if (array_key_exists($key, $data)) {
            // данные присутствуют, то фильтруем и валидируем их
            $result[$key] = call_user_func($validator, $data[$key]);
        } else {
            // данных нет, инициализируем по-умолчанию
            $result[$key] = '';
        }
    }
    return $result;
}


а уже после этого можешь пользоваться кодом аналогичным приведенному тобой

Код

$data = ourFilter($_POST, $allowed)
for(reset($data); list($k,$v)=each($data);) {$$k=$v;}

и работать как тебе привычно, но уже будучи твердо уверенной что данные у тебя везде правильные и корректные.

Добавлено через 3 минуты и 9 секунд
Цитата(nicka47 @  14.7.2008,  20:57 Найти цитируемый пост)
это как раздует обьемы и время написания моего нынешнего кода 

Если подобный, приведенному выше, код вынесешь в отдельный модуль, который будешь подключать в свои проекты...
Это кардинально сократит объемы и время написания твоего нынешнего кода. Вкупе с кардинально возросшей же безопасностью.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
nicka47
Дата 15.7.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Код

   import_request_variables('p', 'p_');
   echo $p_username;


а как  насчет такого простого метода?
PM MAIL   Вверх
Fortop
Дата 15.7.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  15.7.2008,  13:41 Найти цитируемый пост)
а как  насчет такого простого метода? 

Да пойми же ты очень простое правило smile
1. Четко ограничь круг и тип возможных переменных извне.
2. Потом делай что хочешь...

Ты же ищешь простой способ взять любые переданные данные себе в код.

Да, последний вариант с использование уникального префикса - несколько улучшает ситуацию.

Но гораздо лучше четко ограничить число и типы переменных. Заодно и проинициализировав их.

Поначалу, это кажется лишней работой, но поверь, эта лишняя работа делается всего 1 раз на весь проект (построение моделей), 
зато потом избавляет тебя от большой кучи постоянных проблем...

И распухание логов ошибок это только одна из них smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
nicka47
Дата 16.7.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Код

PHP Notice:  Use of undefined constant SERVER_NAME - assumed 'SERVER_NAME' in 


Вот что стоит в этой строчке
Код

$thiswebsite = $_SERVER[SERVER_NAME];


в чем ошибка?
PM MAIL   Вверх
skyboy
Дата 16.7.2008, 12:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  16.7.2008,  11:37 Найти цитируемый пост)
в чем ошибка?

в том, что нет встроенной константы SERVER_NAME. и нет такой константы, объявленной тобой при помощи define.
PM MAIL   Вверх
A1ekcandr
Дата 16.7.2008, 14:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 27.6.2007

Репутация: 1
Всего: 1



мне кажется вам стоит прочитать какуюнить книжку php или хотябы пройти курсы обучения online на php
PM MAIL   Вверх
nicka47
Дата 16.7.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



A1ekcandr, спасибо за совет, как мне самой в голову не пришло))
PM MAIL   Вверх
nicka47
Дата 17.7.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



'SERVER_NAME' 
The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host. 

ПОчему нет, вот нашла описание в справочнике, вот и пример, а что в моем коде не так?

Код

echo $_SERVER['SERVER_NAME']; 


Добавлено через 1 минуту и 49 секунд
возможно просто кавычек не хвтало в синтаксисе кода, поэтому и выдавало ошибку соответствующую...


PM MAIL   Вверх
Fortop
Дата 17.7.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  17.7.2008,  10:34 Найти цитируемый пост)
возможно просто кавычек не хвтало в синтаксисе кода, поэтому и выдавало ошибку соответствующую...

Совершенно верно.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
skyboy
Дата 17.7.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



хм, любопытный случай.
ок. 
объясняю основы синтаксиса.
строка в РНР записывается как последовательность произвольных символов между двумя одинаковыми ограничителями(есть ещё heredoc, но тут про него говорить не буду): двойными кавычками " или одинарными '. если внутри строки должен быть символ, совпадающий с ограничителем строки, то такой символ "экранируется" - перед символом ставится обратная косая черта \. например, так: "ааааааж\"жжжжж". в этом примере вторая по счету двойная кавычка относится к строке. в то время, как первая и третья по порядку кавычки играют роль ограничителей и не входят в состав строки.
константа - это произвольное значение, которое имеет имя. название консанты состоит из символов латиницы, цифр и символа подчеркивания: например, MY_GREAT_CONST. константы должны определяться при помощи функции define. константа должна быть определена до её использования. в противном случае будет получено предупреждение уровня E_NOTICE, а значением константы, которая не была объявлена, будет принято её имя. т.е. при использовании константы SOME_COnst до объявления, значением константы будет принята строка "SOME_COnst" и будет сгенерировано предупреждение E_NOTICE.
Таким образом
SERVER_NAME - константа, которая для корректной работы должна быть объявлена ранее по коду.
'SERVER_NAME' - значение строкового типа.
Цитата(nicka47 @  17.7.2008,  09:34 Найти цитируемый пост)
возможно просто кавычек не хвтало в синтаксисе кода

нет. это может запятой не хватать в предложении. ты вместо строкового значения использовала константу. это нечто другое, а не "не хватает". это "не знаю, как оно работает".
ты проявила в этой теме себя отнюдь не дурой. и на лень непохоже. но с основами тебе срочно надо ознакомиться.
PM MAIL   Вверх
nicka47
Дата 17.7.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



skyboy, я в курсе строковых величин, здесь на форуме вы все очень придирчиво относитесь к словам, с точки зрения языковых терминов.

Я имела в виду кавычек не хватает, потому что в справочнике указано что у переменной $_SERVER,  параметр должен быть задан в кавычках и задан список  возможных параметров, среди них есть  и SERVER_NAME, а поскольку кавычек в коде не хватало, то компилятор понял этот параметр как константу, а уж поскольку такой константы определено не было, то и выдал данную ошибку. 

Но это не значит, что я жду от вас разьяснения , в том роде, что я не определила константу, я хотела получить подсказку о том, что у переменной $_SERVER, есть один из параметров SERVER_NAME и задаваться он должен по синтаксису в кавычках,и тогда все будет ок

а код этот не мой, я нашла ошибку в чужом коде, исходя из ошибки в логах на сервере, и пыталась разобраться, 
да, я ленивая, вместо того чтобы просто сунуться в справочник, я просто кинула вопрос на форму и хотела получить готвый ответ. ТОгда и придирок в свой адресс не получала бы, сама виновата
PM MAIL   Вверх
Feldmarschall
Дата 17.7.2008, 21:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



skyboy, это бесполезно =)
PM   Вверх
Fortop
Дата 17.7.2008, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



nicka47
Чтобы тебя лучше понимали - используй общепринятые формулировки.

$_SERVER['SERVER_NAME'] - читается как "элемент массива $_SERVER с ключем SERVER_NAME". Ключем массива может быть либо строка, либо число. Именно поэтому SERVER_NAME необходимо было заключать в кавычки.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Feldmarschall
Дата 17.7.2008, 22:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Fortop, у тебя некорректное определение =)
Ты подтверждаешь точку зрения этой дамы, что "ключ массива должен быть в кавычках"


Это сообщение отредактировал(а) Feldmarschall - 17.7.2008, 22:43
PM   Вверх
Fortop
Дата 17.7.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Feldmarschall @  17.7.2008,  22:41 Найти цитируемый пост)
Тут ключевая фраза, что не "ключ в кавычках", а что "SERVER_NAME - это строка"

Согласен smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
nicka47
Дата 18.7.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



все это называеться педантизмом, от того что я не выражаюсь точными формулировками языка, хуже или лучше я писать не стану. Я не лектором работаю...

Зря вы так придираетесь к каждой фразе, это просто смешно)))))))


Feldmarschall, не красиво разговаривать в третьем лице в присутствие человека.

Добавлено через 5 минут и 2 секунды
такое ощущение, что на форуме не люди простые , а компиляторы сидят и анализируют, написанные обычным человеком фразы...


PM MAIL   Вверх
Fortop
Дата 18.7.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



nicka47
Цитата(nicka47 @  18.7.2008,  10:18 Найти цитируемый пост)
такое ощущение, что на форуме не люди простые , а компиляторы сидят и анализируют, написанные обычным человеком фразы...

Понимаешь ли в чем дело smile
Это клиента я буду выслушивать в его терминологии пытаясь понять, что же он хочет....

На форуме же... пробираться через дебри самописных терминов редко кто будет. Если вопрос не понятен - на него просто не ответят. В лучшем случае smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
nicka47
Дата 18.7.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Fortop, понимаю, но мне кажеться здесь дело в другом все же

Когда на вопрос 
Код

$a=$_SERVER['REQUEST_METHOD'];
 - что это?

отвечают, что это присвоение переменной а значения $_SERVER['REQUEST_METHOD'];

или когда вместо того чтобы указать на синтаксическую ошибку, начинают мне описывать понятия строковых величин и констант,
то все таки это скорее такакая высокомерная ирония ...

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

хорошо, а фразы, типа "СОмневаюсь, что вы что то поняли " или "skyboy, это бесполезно =)  "   - вы считаете корректными?



Это сообщение отредактировал(а) nicka47 - 18.7.2008, 12:34
PM MAIL   Вверх
skyboy
Дата 18.7.2008, 12:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  18.7.2008,  11:33 Найти цитируемый пост)
то все таки это скорее такакая высокомерная ирония

высокомерная ирония - это приводить текст ошибки, в котором четко указано место и причина её возникновения. а на подробное объяснение причины бросать "я и так это знаю".
на самом деле, одно из двух: либо ты издеваешься над теми, кто пытается тебе подсобить, либо тебе и правда, абсолютно необходимо укрепить знание самих основ. начиная с того пункта, как использовать сообщения об ошибках.

PM MAIL   Вверх
nicka47
Дата 18.7.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



skyboy,  хорошо, тема закрыта, мы разные



Это сообщение отредактировал(а) nicka47 - 18.7.2008, 13:26
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2273 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.