![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
Сайт создает огромные error.log логи, почему то на всех остальных сайтах подобная проблема никогда не вставала, то ли на других серверах происходит какой то контроль за логами, ограничение их размеров.
Поскольку система написания кодов одна, то такая же проблема с ошибками должна была вставать на всех остальных сайтах. типы ошибок - PHP Warning, PHP Notice лог раздуваеться за пару часов до нескольких мегабайт, наверно это ненормально, можно ли исходя из такого количества ошибок сделать вывод, что они могут приводить сервер к зависанию? Понимаю, что без представления тут конкретных ошибок, трудно ответить. Но меня пока интересуют ощие ответы на вопросы, типа способы работы с лог файлами. Должен ли контролировать их создатель сайта, или это задача администратора сервера. Нормальное ли дело такое количество ошибок, если учитывать, что сайт достаточно большой, и работает правильно. ПОрядок уникальных посетителей небольшой, приблизительно 500 человек |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
||||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 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 строчке у меня написано:
что не так? |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
При штатной работе - не должны. Это, мне кажется, само собой разумеется. Сообщения об ошибках код должен выдавать только при возникновении ошибок.
К примеру: Есть код, который принимает данные из формы. Если данные пришли, то код нормально отработал без ошибок. Если данных нет - код выдает ошибку - "Нету такой переменной там, где вы ожидаете, что она должна быть". Разработчик смотрит - опа, и правда, опечатку в имени сделал. И исправляет ошибку. Или малолетний хакир играется с формой, посылает не то, что ожидалось, а мы в логе смотрим - ага, что-то здесь было не то! Вот для чего служат сообщения об ошибках. чтобы исправить ситуацию сейчас, надо поставить вначале error_reporting(E_ALL ~E_NOTICE); все остальные свои сайты разрабатывать при error_reporting(E_ALL); Чтобы при штатной работе они ошибок НЕ ВЫДАВАЛИ. Как это делают сейчас. |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 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 У меня в коде в этом месте стоит небольшая операция с этой переменной, если переменная не определена, я не выполняю операцию,
допустим в урл строке эта переменная при данном запросе не передаеться, это уже ошибка? Добавлено через 1 минуту и 25 секунд Feldmarschall, вы не поняли, ошибки выдает не сайт, а апаче фиксирует и сохраняет в логи. |
|||
|
||||
Pokoinik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 17.3.2007 Где: /dev/null Репутация: 2 Всего: 3 |
1. $HTTP_POST_VARS устаревший синтаксис, следует использовать $_POST; 2. $HTTP_POST_VARS не является массивом или объектом. 3. Ворненги, нотейсы и ошибки нужно исправлять. -------------------- ICQ: 490-993 Существует только 10 типов людей: те, которые понимают двоичную систему, и которые ее не понимают!!! Опасайтесь людей верующих, ибо у них есть боги, которые им все прощают. Делай или не делай! Никаких попробую! Йода (Yoda), мастер-джедай |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Оч. смешно. Я все прекрасно понимаю. Только выдает ошибки все равно сайт. А куда именно - определяется настройками. И пишет в логи PHP, а не апач. Это ошибки РНР, а не апача. С какой стати он будет чужие ошибки писать? Сайт не выдает ошибки в браузер. но так и надо писать, а не "сайт не выдает ошибки" Это сообщение отредактировал(а) Feldmarschall - 11.7.2008, 11:22 |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
error_reporting(E_ALL);
поставила это в начало страницы, и при загрузке сайта вышло огромное количество ошибок типа Undefined variable: pp in C:\xampp\htdocs\site\index.php on line 323 получаеться я должна перед тем как выполнять например тако код:
я должна как то проверить пришла ли эта переменная pp ко мне? Так делают все? А то что я делаю - грубая ошибка написания кода? Добавлено через 1 минуту и 47 секунд Feldmarschall, ну так и знала, щас пойдут смеяться над моей неграммотностью. Послушайте , я не за этим пришла сюда, я пришла сказать, что не знаю чего то, и прошу научить меня. Добавлено через 10 минут и 47 секунд Pokoinik, хорошо, поняла, значит это моя вина, все эти ошибки. А мы как то оправдывались... Тогда помогите устранить их. Вот у меня вопрос выше насчет нобьявленных переменных. Как с этим моментом работать правильно? И еще тогда вопрос, наверно вы в курсе будете, почему при таком моем изначальном неправильном подходе к написанию кода, во всех остальных проектах проблем с логами ан других серверах не было? Значит ли это, что возможно администраторы серверов как то ставят ограничение на размеры этих лог файлов, или что то подобное? И еще один вопрос, насколько такое кол-во элементарных ошибок при неккоректном написании кода, может тормозить работу сайта и перегружать сервер? |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
nicka47, во-первых, не стоит апеллировать к таким вещам, как "я не за этим пришла сюда". Мало ли кто зачем приходит. Жизнь такая штука, что нам приходиться сталкиваться не с тем, с чем нам бы хотелось.
Во-вторых, смех - одна из самых положительных эмоций. Смех продлевает жизнь. Что в этом плохого - непонятно. В-третьих, я исправил свое сообщение, когда понял, что имеется в виду. По поводу $HHTP_POST_VARS. На сервере стоит новая версия РНР, в которой эти устаревшие массивы отключены.
Ошибка, но по классификации разработчиков языка, не грубая. |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
короче у меня весь сайт кишит операциями с необьявленными переменными Undefined variable, помогите хоть эту проблему устранить, научите как правильно надо обращаться к переменной, прежде чем начинать с нею какие то операции.
|
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Сам код for(reset(... - из третьей версии РНР. А сейчас уже на подходе шестая
Для перебора ассоциативных массивов уже 10 лет, как используется оператор foreach. заменить этот фикл надо таким: foreach ($_POST as $k => $v) { Другое дело, что сама по себе эта строчка представляет собой огромную дыру. С её помощью хакер может изменить любую переменную в коде. Добавлено через 2 минуты и 16 секунд Быстро решить проблемы с необъявленными переменными не получится. Надо переписывать весь код. Быстро можно решить только проблему с сообщениями о таких переменных. Как - я уже писал. |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
Feldmarschall, поняла, простите за реакцию, такой мой характер.
Насчет неграммотных моих замечаний, да я всегда от этого страдала, по причине отсутствия базовых знаний, но необходимости все же как то реагировать на возникающие проблемы. Ошибка, но по классификации разработчиков языка, не грубая. - спасибо и на этом, вздохнула с облегчением. Но придеться на нею все таки поработать, так как логи разбухаються во основном за их счет. Добавлено через 6 минут и 44 секунды error_reporting(E_ALL ^ E_NOTICE); значит, если это будет сидеть у меня на сайте, то все PHP Notice ошибки не будут фиксироваться? - замечательно для начала ![]() Добавлено через 13 минут и 6 секунд
синтаксис верно записала? два раз по ^ ? вроде ошибки не выдает значит таким образом E_WARNING тоже исключаем для штатной работы? ![]() |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Нет. c warning-ом все гораздо хуже.
Если оно есть, это значит, что сайт просто не работает. Сама идея так сделать меня огорчает зело. Как я и ожидал, возможность сунуть голову в песок и не видеть сообщений об ошибках, оказалась гораздо привлекательнее, чем ошибки исправлять. Добавлено через 1 минуту и 6 секунд В принципе, если уж на то пошло, сделай error_reporting(0) Никаких ошибок. Логи - девственно чистые. Никаких забот. |
|||
|
||||
nicka47 |
|
||||||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
.no_delete - а что за файл сидит в папке с логами ? не подскажете его предназначени?
у меня в var.inc файле стоит след код, которые годами переноситься мною из одно проекта в другое, поскольку до сих пор все меня устраивало, то я не в никала в его глубинное назначение
хотя у меня и то и другое сидит........... вообщем, прошу мне более подробно обяснить в чем дыра, как для самого непонятливого, пожалуйста Добавлено @ 12:03 Feldmarschall, нет, я имела в виду для ближайшего спасения, поскольку логи раздуваються, и с меня отчет. А для решения, я все таки вас помочь тут мне. Например вопрос с необьявленными переменными - как надо делать это правильно, пока кажеться никто не написал??? Чтобы в дальнейшем придерживаться правильной манере написания кода, по мере моих умственных возможностей.
но как?? сайт у меня работает , а подобных в ворнингов в изучаемом мною сейчас логе мягко говоря до фига?? поясните пожулайста Добавлено @ 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 строке:
Добавлено @ 12:09 все - поняла, это 2 основные ошибки моего кода. 1 - необлявленные переменные (прошу помочь с решением) 2- это проблема с этим устаревшим кодом
Тема начинает приобретать более четкие очертания ![]() Добавлено @ 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 |
||||||||||||||||
|
|||||||||||||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
пробито у машины колесо. вроде как едет, но при поворте можно и разбиться. warning означает реально нехорошие вещи. конечно, может быть, что все эти варнинги приводят только к тому, что у тебя что-то не отображается при выводе... но все равно - рано или поздно сломается все. при таком подходе-то.
надо просто подумать. ты пытаешься работать с переменной, которая была необъявлена. тебе об этом говорится прямо. так объяви её. инициализируй каким-то значением по умолчанию. и будет нормально. для проверки, задана ли переменная, существует функция isset. которая не выдает нотисы, а возвращает "false", если переменная не была определена. и тот, и тот код загоняет все полученные через GET/POST/COOKIE переменные в переменные кода. это практически механизм register_globals учитывая, что ты ещё и не инициализируешь переменные, я могу передавать любые переменные через GET. и они будут приниматься твоим скриптом, как "родные". само по себе это ни плохо, ни хорошо. но потенциально - дыра в безопасности. надо больше читать сообщения об ошибках. там, обычно, сразу указывается причина. остается только исправить. Добавлено через 1 минуту и 2 секунды потрясающе ![]() |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
skyboy, все поняла, спасибо.
ПРоблема прояснилась, буду разбираться, всем спасибо ![]() |
|||
|
||||
Feldmarschall |
|
||||||||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Я уже писал - кому на руку. Разработчику. приводил примеры, целых два.
Это правда. ворнинги бывают разные. чаще всего они означают, что строка с такой ошибокй просто не работает, к примеру - самый первый, который ты привела. В последнем же ошибка не критическая. В коде функции по отправке почты, при вызове функции fsockopen перед какой-то переменной стоит значок &. Он там нафиг не нужен и его надо оттуда убрать. $$k=$v; - вот об этом. первая переменная - это имя. вторая - значение. хакер просто пишет в адресной строке имя значение любой переменной, а этот код добросовестно перезаписывает любую переменную сайта.
Это самый сложный вопрос из всех. В большинстве языков программирования переменную надо обязательно объявить перед использованием. просто сказать скрипту, что мы будем использовать такие-то переменные. В самом начале, когда только Расмус Лердорф писал язык РНР, он подумал, что это неудобно, и можно использовать переменную сразу, как только она была написана (как в бейсике). Но со временем, когда язык стал развиваться, стало понятно, что это прямая дорога к ошибкам и проблемам. На эту тему есть анекдот:
Можно перечислить в самом начале скрипта все переменные, которые мы будем использовать. К примеру, если у нас используется переменная $i, то можно написать
И у нас в скрипте теперь будет переменная, значение которой мы точно знаем. И так надо поступить со всеми переменными, используемыми в скрипте. Но с данными, приходящими из браузера, так не получится. Мы же не можем предугадать, какое значение они будут иметь? поэтому надо писать специальный код не $var=""; а
Главное достоинство этого кода в том, что мы здесь контролируем, какие переменные пускать в свой скрипт, а какие - не пускать. В отличие от твоих циклов, которые запускают всех без разбору. |
||||||||
|
|||||||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
да нет же, если мне как разработчику , понадобиться прочитать ошибки, я сделаю это локально у себя, а на реальном сервере это только приводит к раздуванию логов, что мне, как разработчику не нужно, так как с меня , как с разработчика, идет спрос заказчика. Добавлено через 3 минуты и 41 секунду Feldmarschall, спасибо, кое что начинаю понимать. совершенно не учитывала такие важные вопросы до сих пор. Большой пробел в работе |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Ты правда думаешь, что ошибки могут появляться только при разработке сайта, а при работе никогда никаких ошибок не бывает?
К примеру, ошибка - файл не найден. На хосте файла нет, а дома - есть. И как ты собираешься эту ошибку "методом домашнего запуска" исправлять? вот, почитай ещё здесь: http://phpfaq.ru/debug2 Это сообщение отредактировал(а) Feldmarschall - 11.7.2008, 13:24 |
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
нет. ты не права. невозможно сделать программу без единой ошибки(логической, алгоритмической) или хотя бы - без единого недочета. и у себя локально ты сможешь обнаружить только самые явные ошибки. то, что при передаче отрицательного числа через форму у тебя нарушается структура каталога ты можешь не заметить. а в "полевых условиях" рано или поздно это всплывет. так зачем себюе перекрывать кислород? да, и есть вещи, которые локально могут не работать(например, обращение к консоли через system или отправка эл. почты через mail() вполне может не работать под windows). Добавлено через 5 минут и 45 секунд
и это не оскорбление. такая уж специфика - невозможно протестировать на всех возможных данных. |
||||
|
|||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
поверте, я прекрасно понимаю, что невозможно писать без ошибок, что возможны всевозможные варианты, и куча внезапновозникающих непредвиденных вариантов в ходе работы. Может не так глубоко, но я занимаюсь этим уже 10 лет, некоторый опыт есть.
Я не про то удивилась, я была удивлена тем, что кто-то на сервере изменил параметр репортинга ошибок пшп, который стоит по молчанию, я не понимаю кому это может быть нужно кроме самого разработчика, то есть меня, вот и все. Добавлено через 8 минут и 10 секунд ![]() ![]() меня нужно дисквалифицировать |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
skyboy, за все прежние ошибки
|
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
все прежние ошибки наоборот - повышают ценность разработчика.
ну, если он делает из них выводы, конечно. |
|||
|
||||
nicka47 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
обьясните пожалуйста в чем разница между этими 2-мя кодами, и почему первый правильный, а второй - нет?
|
||||
|
|||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
а если у тебя нет переменной $var? ошибка вылетит
if - проверяет, что в скобках true или false, а если переменной нет, то каков результат? Это сообщение отредактировал(а) bars80080 - 14.7.2008, 13:38 |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
||||
|
||||
nicka47 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
поняла,
обьясниет пожалуйста, что делает данный код:
Добавлено через 5 минут и 13 секунд и еще, что означает эта строчка?
|
||||
|
|||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
||||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
, нет, не шутка, прошу обьяснить что дает получение значения REQUEST_METHOD
мне кажеться имеет, потому что меня интересовала разница между тем, чтобы просто обратиться к переменной и обратиться к ней первым способом. Теперь понимаю, что второй вариант выбрасывает ошибку, если переменная неопределена, которая как раз наполняет логи нотисами. Значит надо либо сперва инициализироватьпеременную с которой работаешь, либо,е сли она приходит извне, надо определить есть ли она вообще, иначе выйдет ошибка.. что то не так? Вы считаете я задаю глупые вопросы? Мне так кажеться исходя из ваших слов. Я просто пытаюсь разобраться в теме, которая мне непонятна , на которую до сих пор я не обращала внимание |
|||
|
||||
Fortop |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Эмулирует работу register_globals = on Это сообщение отредактировал(а) Fortop - 14.7.2008, 14:13 -------------------- Мир это Я. Живее всех живых. |
||||
|
|||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
Feldmarschall, результат: я имел ввиду ещё ошибку, помимо false
|
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
то есть, ты всегда пишешь
действительно, любую переменную надо проверять перед использованием. а то вдруг будет ошибка?! Добавлено через 4 минуты и 26 секунд получение значения REQUEST_METHOD - это $_SERVER['REQUEST_METHOD'] а код $method = $_SERVER['REQUEST_METHOD']; - это присвоение значения переменной. Когда пишут $var = что-то - это значит, что переменной $var присваивают значение. Я был уверен,что это известно любому программисту на пхп. "разница" - это одно. "неправильно" - это совсем другое. Я написал большой текст, в котором, как мне казалось, смог объяснить, почему переменные надо инициализировать. Теперь я понимаю, что ничего ровным счетом не объяснил. |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
Feldmarschall, мне кажеться вы цепляетесь к словам. Не каждый может идеально крректно поставить вопрос, я и так стараюсь как могу четко и понятно обьяснить, что хочу спросить.
Присвоение значения переменной за 10 лет работы с сайтами я усвоила Добавлено через 1 минуту и 27 секунд
возможно, но некоторые вещи до меня доходят постепенно. Добавлено через 4 минуты и 9 секунд Fortop, но применительно конкретно к переменным сессии? Означает ли это, что если я по урл передам переменную ааа со значением, и при наличии данного кода , то $_SESSION['ааа'] будет иметь это значение? |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Если register_globals = on, то после этого кода значение из сессии затрет значение переменной $aaa. Вообще это не слишком правильный способ работы с переменными которые могут прийти извне. Кто мешает обращаться напрямую к элементам массива? -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
во-первых, не "и так". ты не нам одолжение делаешь, задавая вопросы, а себе. во-вторых, если у тебя не получилось - надо снова задать, постаравшись пояснить свою мысль. А не начинать оправдываться. а если поняла - то описать, что именно. чтобы в тех местах, в которых не поняла, тебя поправили. В чем заключался вопрос про реквест метод? Ты поняла разницу между "чем отличается" и "почему неправильно"? Кто тебе сказал, что if ($var) - неправильно? Какой там был контекст? |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
Feldmarschall, знаете что, я не маленькая девочка, чтобы разговаривать со мной в подобном тоне, спасибо большое за попытки помочь, но больше прошу не утруждать себя сообщениями в моих темах.
Добавлено @ 16:24
Добавлено через 7 минут и 2 секунды - никто, просто отстала от жизни, и вот теперь пытаюсь догнать. А с непривычки все кажеться , что как же это ужасно неудобно длинно будет вместо обычного $aaa, обращаться к любой внешней переменной через массив. НО раз другого выхода нет, то придеться приучаться. Это сообщение отредактировал(а) nicka47 - 14.7.2008, 16:26 |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
во-первых, непонятно какой смысл сессий теряется ![]() во-вторых, я на PHP пишу меньше года ![]() Можешь обращаться и к переменной - никто не запрещает. Но рекомендуется проверять и инициализировать все переменные. И не пользоваться register_globals = on -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
удивительно. т.е. ты думаешь, что люди работают с $_POST/$_GET и при каждом обращении к элементам проверяем на isset и т.д.? сколько ведь писали про инициализацию переменных... конечно, лучше и правильнее работать с переменной, в которой данные единожды проверены и обработаны должным образом, чем каждый раз обращаться к "сырым" данным, полученным от пользователя. Но возлагать перенос "из $_POST в мою переменную" надо не на register_globals. и не на цикл, который делает то же, что и register_globals. должна быть не универсальная, а точная - проверка и инициализация. например, так(в $_POST['year'] - значение года, введенное пользователем):
меня удивляет, как это не пришло тебе в голову. |
||||
|
|||||
nicka47 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
в том, что если перемення поданная через урл будет затирать переменную сессии, то идентификация пользователя при логине теряет смысл... skyboy, да я собственно об этом твоем примере и сказала, что длинно и неудобно, с непривычки конечно. Ну представь просто, форма у меня на....ну на 20 допустим элементов, и вместо
я буду писать с каждой переменой сперва
это как раздует обьемы и время написания моего нынешнего кода я не жалуюсь, я просто уточняю, поскольку для меня это стало новостью, я задаю много вопросов по одному и тому же вопросу, чтобы снова не мимо не проехать. |
||||
|
|||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
С формой все гораздо проще...
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
о. да. а так - всего три строчки, зато никакой проверки на корректность значения не надо. и везде надо будет лепить isset перед использованием, потому что коль переменной $_POST['field'] не было получено, то и переменная $field твоим кодом не создастся. конечно, код
будет компактнее, чем одна инициализация. ога. |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Ну. можно поступить и проще. ^E_NOTICE - и никаких вообще проблем...
Тут мы сталкиваемся с еще одной стороной этой проблемы. инициализация нужна программисту. Это очень тонкий момент, который важно понять. Что мы делаем это для себя, а не для тупого компилятора, чтобы отвязался. Если же только наведения красоты в error_log-е - право, выставления уровня отображения будет вполне достаточно... |
|||
|
||||
Fortop |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Все перепутано в датском королевстве. В твоем случае сессия затирает, а не сессию затирают.
Хоть 300. можешь создать простой массив, для всех данных которые могут прийти к тебе из формы. (более того из связанного с ним другого массива, можно саму форму генерировать автоматически, а не рисовать ее ручками).
дальше несложная функция
а уже после этого можешь пользоваться кодом аналогичным приведенному тобой
и работать как тебе привычно, но уже будучи твердо уверенной что данные у тебя везде правильные и корректные. Добавлено через 3 минуты и 9 секунд Если подобный, приведенному выше, код вынесешь в отдельный модуль, который будешь подключать в свои проекты... Это кардинально сократит объемы и время написания твоего нынешнего кода. Вкупе с кардинально возросшей же безопасностью. -------------------- Мир это Я. Живее всех живых. |
||||||||||
|
|||||||||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
а как насчет такого простого метода? |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Да пойми же ты очень простое правило ![]() 1. Четко ограничь круг и тип возможных переменных извне. 2. Потом делай что хочешь... Ты же ищешь простой способ взять любые переданные данные себе в код. Да, последний вариант с использование уникального префикса - несколько улучшает ситуацию. Но гораздо лучше четко ограничить число и типы переменных. Заодно и проинициализировав их. Поначалу, это кажется лишней работой, но поверь, эта лишняя работа делается всего 1 раз на весь проект (построение моделей), зато потом избавляет тебя от большой кучи постоянных проблем... И распухание логов ошибок это только одна из них ![]() -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
nicka47 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
Вот что стоит в этой строчке
в чем ошибка? |
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
A1ekcandr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 27.6.2007 Репутация: 1 Всего: 1 |
мне кажется вам стоит прочитать какуюнить книжку php или хотябы пройти курсы обучения online на php
|
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
A1ekcandr, спасибо за совет, как мне самой в голову не пришло))
|
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 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. ПОчему нет, вот нашла описание в справочнике, вот и пример, а что в моем коде не так?
Добавлено через 1 минуту и 49 секунд возможно просто кавычек не хвтало в синтаксисе кода, поэтому и выдавало ошибку соответствующую... |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Совершенно верно. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
хм, любопытный случай.
ок. объясняю основы синтаксиса. строка в РНР записывается как последовательность произвольных символов между двумя одинаковыми ограничителями(есть ещё heredoc, но тут про него говорить не буду): двойными кавычками " или одинарными '. если внутри строки должен быть символ, совпадающий с ограничителем строки, то такой символ "экранируется" - перед символом ставится обратная косая черта \. например, так: "ааааааж\"жжжжж". в этом примере вторая по счету двойная кавычка относится к строке. в то время, как первая и третья по порядку кавычки играют роль ограничителей и не входят в состав строки. константа - это произвольное значение, которое имеет имя. название консанты состоит из символов латиницы, цифр и символа подчеркивания: например, MY_GREAT_CONST. константы должны определяться при помощи функции define. константа должна быть определена до её использования. в противном случае будет получено предупреждение уровня E_NOTICE, а значением константы, которая не была объявлена, будет принято её имя. т.е. при использовании константы SOME_COnst до объявления, значением константы будет принята строка "SOME_COnst" и будет сгенерировано предупреждение E_NOTICE. Таким образом SERVER_NAME - константа, которая для корректной работы должна быть объявлена ранее по коду. 'SERVER_NAME' - значение строкового типа. нет. это может запятой не хватать в предложении. ты вместо строкового значения использовала константу. это нечто другое, а не "не хватает". это "не знаю, как оно работает". ты проявила в этой теме себя отнюдь не дурой. и на лень непохоже. но с основами тебе срочно надо ознакомиться. |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
skyboy, я в курсе строковых величин, здесь на форуме вы все очень придирчиво относитесь к словам, с точки зрения языковых терминов.
Я имела в виду кавычек не хватает, потому что в справочнике указано что у переменной $_SERVER, параметр должен быть задан в кавычках и задан список возможных параметров, среди них есть и SERVER_NAME, а поскольку кавычек в коде не хватало, то компилятор понял этот параметр как константу, а уж поскольку такой константы определено не было, то и выдал данную ошибку. Но это не значит, что я жду от вас разьяснения , в том роде, что я не определила константу, я хотела получить подсказку о том, что у переменной $_SERVER, есть один из параметров SERVER_NAME и задаваться он должен по синтаксису в кавычках,и тогда все будет ок а код этот не мой, я нашла ошибку в чужом коде, исходя из ошибки в логах на сервере, и пыталась разобраться, да, я ленивая, вместо того чтобы просто сунуться в справочник, я просто кинула вопрос на форму и хотела получить готвый ответ. ТОгда и придирок в свой адресс не получала бы, сама виновата |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
skyboy, это бесполезно =)
|
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
nicka47,
Чтобы тебя лучше понимали - используй общепринятые формулировки. $_SERVER['SERVER_NAME'] - читается как "элемент массива $_SERVER с ключем SERVER_NAME". Ключем массива может быть либо строка, либо число. Именно поэтому SERVER_NAME необходимо было заключать в кавычки. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Fortop, у тебя некорректное определение =)
Ты подтверждаешь точку зрения этой дамы, что "ключ массива должен быть в кавычках" Это сообщение отредактировал(а) Feldmarschall - 17.7.2008, 22:43 |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Согласен ![]() -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
все это называеться педантизмом, от того что я не выражаюсь точными формулировками языка, хуже или лучше я писать не стану. Я не лектором работаю...
Зря вы так придираетесь к каждой фразе, это просто смешно))))))) Feldmarschall, не красиво разговаривать в третьем лице в присутствие человека. Добавлено через 5 минут и 2 секунды такое ощущение, что на форуме не люди простые , а компиляторы сидят и анализируют, написанные обычным человеком фразы... |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
nicka47,
Понимаешь ли в чем дело ![]() Это клиента я буду выслушивать в его терминологии пытаясь понять, что же он хочет.... На форуме же... пробираться через дебри самописных терминов редко кто будет. Если вопрос не понятен - на него просто не ответят. В лучшем случае ![]() -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
Fortop, понимаю, но мне кажеться здесь дело в другом все же
Когда на вопрос
отвечают, что это присвоение переменной а значения $_SERVER['REQUEST_METHOD']; или когда вместо того чтобы указать на синтаксическую ошибку, начинают мне описывать понятия строковых величин и констант, то все таки это скорее такакая высокомерная ирония ... или мы тут будем все соревноваться в том, кто корректнее задал вопрос, или даже не так, а кто верне следовал формулировке справочника... ну тогда зачем такой форум вообще хорошо, а фразы, типа "СОмневаюсь, что вы что то поняли " или "skyboy, это бесполезно =) " - вы считаете корректными? Это сообщение отредактировал(а) nicka47 - 18.7.2008, 12:34 |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
высокомерная ирония - это приводить текст ошибки, в котором четко указано место и причина её возникновения. а на подробное объяснение причины бросать "я и так это знаю". на самом деле, одно из двух: либо ты издеваешься над теми, кто пытается тебе подсобить, либо тебе и правда, абсолютно необходимо укрепить знание самих основ. начиная с того пункта, как использовать сообщения об ошибках. |
|||
|
||||
nicka47 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2005 Где: Грузия Репутация: нет Всего: нет |
skyboy, хорошо, тема закрыта, мы разные
Это сообщение отредактировал(а) nicka47 - 18.7.2008, 13:26 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |