Comments 94
Вот если честно, то вспоминается поговорка про дурака и стеклянный фаллоимитатор.
Т.к. положить можно что угодно умеючи. А задача программиста как раз в обратном.
Т.к. положить можно что угодно умеючи. А задача программиста как раз в обратном.
т.е. я имею ввиду нужно знать такие вещи, чтобы не допустить падения наших творений, на то мы и программисты. :)
Дело в том, что ошибка именно на уровне PHP. И сосед по shared-хостингу сможет положить весь сервер.
дурное дело не хитрое
из личного опыта
лишняя точка с запятой нечаяно затесавшаяся при копи пейсте в SQL запрос может не хило так нагрузить сервер у хостера.
из личного опыта
лишняя точка с запятой нечаяно затесавшаяся при копи пейсте в SQL запрос может не хило так нагрузить сервер у хостера.
Нормального хостера — не может. Рухнет воркер, работающий с правами юзера, при след. коннекте перезапустится назад. Все.
А вот интересно кому в голову приходит так вызывать конструктор родительского класса
call_user_func_array(array($this, «parent::__construct»), $args);
Я думаю, что при грамотном проектировании программист должен представлять себе что именно ему пихает в конструктор класса
call_user_func_array(array($this, «parent::__construct»), $args);
Я думаю, что при грамотном проектировании программист должен представлять себе что именно ему пихает в конструктор класса
говорят что это не баг, а просто неверное использование функции.
Возможно они правы, ведь никто вам не запрещает например устроить в своём коде бесконечную рекурсию с использованием системных интерфейсов( пример. подписка на событие и действие внутри обработчика приводящее к повторному вызову этого же события )
Возможно они правы, ведь никто вам не запрещает например устроить в своём коде бесконечную рекурсию с использованием системных интерфейсов( пример. подписка на событие и действие внутри обработчика приводящее к повторному вызову этого же события )
Это баг, т.к. тут неверная работа с указателем в движке PHP.
закройте глаза и считайте это фичей «экстренного завершения воркера», принимая платформу вы принимаете идеологию её разработчиков.
Так там не с указателями дело. Судя по всему, стек весь выедается. Хотя, почему оно от этого сегфолтится, не вполне ясно.
такие вещи не должны приводить к segfault
Лучше б они просто кинули Exception, а не убили воркер
Чем-то ситуация напоминает ситуацию с браузером internet explorer: там то же разработчики утверждают, что они не делали баги, а создавали фичи.
А вот я вам еще баг нашел!
АААА! Сегфолт! Подвержены все компиляторы С и С++!
int main(int, char*[])
{
char *abc = 0;
*abc = 'a';
}
* This source code was highlighted with Source Code Highlighter.
АААА! Сегфолт! Подвержены все компиляторы С и С++!
Это ошибка кода и она влияет только на эту программу. Среда исполнения(ОС) при этом не падает.
Вот если бы этот код от лица геста уронил бы систему в BSOD/kernel panic/etc — это был бы баг ОС.
PHP интерпретируемый язык и интерпретатор полностью контролирует, что у него с памятью происходит и должен не рушиться, а писать ошибку. Вам К.О.
В чем тут DOS-то заключается?
Один из пользователей shared-хостинга может убить сервер.
Как должна работать связка php+сервер, чтобы один из пользователей мог убить сервер? Если php работает как cgi, то умрет пхп-шный процесс, а сервер вернет что-то вроде Internal Server Error. Если php как модуль, то он утянет за собой и один из серверных рабочих процессов, и пользователю, вероятно, ничего не вернется. Но головной процесс сервера ведь останется, или я не прав? Есть еще какие-то распространенные подходы к связыванию php с веб-сервером на шаред-хостингах?
Апач тридед умрет полностью.
Апач префорк — умрет только воркер.
Апач префорк — умрет только воркер.
DoS — это не «убить сервер», это отказ в обслуживании сервиса. В данном случае тут есть отказ в обслуживании php.
Апач конечно оно не уронит, ни в mod, и в fast-cgi режиме.
Апач конечно оно не уронит, ни в mod, и в fast-cgi режиме.
Возможно автор имел в виду DDoS шаред-хостинга с помощью этой «фичи».
а DoS тут заключается в том, что Denial of Service это отказ в обслуживании.
выполнив на shared-хостинге вышеприведенный код как раз отказ в обслуживании и получится.
выполнив на shared-хостинге вышеприведенный код как раз отказ в обслуживании и получится.
Отлично, если это фича, а не баг, то почему в 5.2.10 ее нет?
Да весь php это и есть большой баг
ну, это уже просто праздник какой-то! %)
Да ну, как раз вполне логичное поведение. Маны читайте.
Вы же сами выбираете такую локаль, тогда чему удивляться? PHP делает точно то что Вы от него требуете.
ага, а number_format это типа алиас к дефолтному поведению?
number_format — это не алиас, а функция форматирования. Дефолтного поведения нет, вы всегда имеете то что заказываете. В конце концов, если ленитесь указать правильную локаль — кто виноват?
в данном случае этот принцип как раз нарушен, я хочу передать в JS или в SQL float, просто через конкатенацию, но не могу, ну вы поняли что 'INSERT… '. (float)$val; для многих локалей выдаст еррор?
я считаю что абсолютно противоестественно приводить числа к строкам по умолчанию с учетом локали, но даже не просто локали а «как-то так» только с учетом точки но игнорируя десятичные разделители и позицию знака. я не понимаю почему
echo 5.1;
мне должно для русской локали выдать 5,1
я считаю что абсолютно противоестественно приводить числа к строкам по умолчанию с учетом локали, но даже не просто локали а «как-то так» только с учетом точки но игнорируя десятичные разделители и позицию знака. я не понимаю почему
echo 5.1;
мне должно для русской локали выдать 5,1
Ну как бы это знания математики уровня 5-6 класса. Именно тогда проходят десятичные дробные части. И отделяются они через ",".
Пример: задайте дробгый размер шрифта в русскоязычной версии Word, а потом в англоязычной. Естестыенно это будут "," и "." соответственно.
Пример: задайте дробгый размер шрифта в русскоязычной версии Word, а потом в англоязычной. Естестыенно это будут "," и "." соответственно.
спасибо молодой человек, это однозначно полезная инфа, если отделяются запятой чего-ж вы в коде не через запятую пишите?
ексель кроме всего прочего еще и пробелами труппы разделит и для некоторых локалей знак минус сзади поставит, чего-ж пых так не делает?
ексель кроме всего прочего еще и пробелами труппы разделит и для некоторых локалей знак минус сзади поставит, чего-ж пых так не делает?
> если отделяются запятой чего-ж вы в коде не через запятую пишите?
Это синтаксис. По синтаксису отделяется точкой.
А вот вы делаете процедуру преобразования в строку. Тут в зависимости от локали.
По секрету скажу, что в .NET при преобразовании строки в дабл та же самая особенность. Это нормально, это не только в PHP так.
Это синтаксис. По синтаксису отделяется точкой.
А вот вы делаете процедуру преобразования в строку. Тут в зависимости от локали.
По секрету скажу, что в .NET при преобразовании строки в дабл та же самая особенность. Это нормально, это не только в PHP так.
То что Вы считаете противоестественным для PHP делать то что Вы запрашиваете у PHP — это противоестественно :)
Вы указываете PHP выдавать числа с запятой. Почему Вы удивляетесь что он выдаёт числа с запятой, я не могу понять. Говорите выдавать с точкой, он будет выдавать с точкой. LC_NUMERIC=«C» укажите, например, или ещё что-то что понравится.
Вы указываете PHP выдавать числа с запятой. Почему Вы удивляетесь что он выдаёт числа с запятой, я не могу понять. Говорите выдавать с точкой, он будет выдавать с точкой. LC_NUMERIC=«C» укажите, например, или ещё что-то что понравится.
нет, я указываю пыху что когда я захочу форматировать числа с учетом локали (number_format) он будет это делать правильно, подменяете понятия.
вы считаете (без фанатизма, я тоже пых люблю) что логично делать более простую операцию (приведение) гараздо сложнее чем ее-же с учетом внешних сведений (локали)?
Если пых приводит числа к строке с учетом локали чего он не делает обратную операцию?
(float)((string)5.1) !== 5.1
вы считаете (без фанатизма, я тоже пых люблю) что логично делать более простую операцию (приведение) гараздо сложнее чем ее-же с учетом внешних сведений (локали)?
Если пых приводит числа к строке с учетом локали чего он не делает обратную операцию?
(float)((string)5.1) !== 5.1
у меня php5 + apache2 на windows2003server иногда выдает 0,1, например, а бывает временами и 0.1
вот где чудеса.
вот где чудеса.
Спасибо
Проверю в понедельник на работе :)
Проверю в понедельник на работе :)
имхо, либо фаталка должна выскакивать, либо работать по-человечески(
Что то в последнее время разработчики Пыха какие то не адекватные стали(((
сегфолт для скриптового языка — это могила (((
Что то в последнее время разработчики Пыха какие то не адекватные стали(((
сегфолт для скриптового языка — это могила (((
Буквально позавчера видел сей баг при попытке осознать почему у меня не работает кохана.
К слову. У меня версия 5.2.10. Так что подвержен не только 5.3
Ты за эти слова заплатишь, сынок.
Примеры — в студию.
Вообще-то PHP иногда падает на вообще безобидном коде, если использовать с eAccelerator, к примеру.
Просто на это обычно пофигу, ибо воркеры и так умирают со временем.
Просто на это обычно пофигу, ибо воркеры и так умирают со временем.
В заметке — речь про PHP как *язык*, а не про разные надстройки и ускорители.
myserg обмолвился, что таких багов (подразумевая язык) — валом. Так что повторю просьбу — приведите примеры.
А то ведь, звиздеть — не мешки таскать…
myserg обмолвился, что таких багов (подразумевая язык) — валом. Так что повторю просьбу — приведите примеры.
А то ведь, звиздеть — не мешки таскать…
По багтрекинговым сайтам я хожу только тогда, когда возникают проблемы. С PHP, как с языком программирования, их пока не возникало. Были замечания по паре *библиотек*. Ну так ничто не совершенно.
Но вообще — написанные скрипты работают так, как задумано и написано. Что делаю не так?
Но вообще — написанные скрипты работают так, как задумано и написано. Что делаю не так?
Делаю много, давно и плодотворно.
Писать код без использования is_a() — это значит делать что-то «не то»? Странный критерий.
> И версия была 5.2.
Ну вот в мануале например вот что говорится:
5.0.0 This function became deprecated in favour of the instanceof operator. Calling this function will result in an E_STRICT warning.
И вы, кстати, так и не привили код(сказать is_a() вызывает баг недостаточно), который вызывает ошибку, и при этом обзываете человека «бараном»… ну что с вас взять…
Ну вот в мануале например вот что говорится:
5.0.0 This function became deprecated in favour of the instanceof operator. Calling this function will result in an E_STRICT warning.
И вы, кстати, так и не привили код(сказать is_a() вызывает баг недостаточно), который вызывает ошибку, и при этом обзываете человека «бараном»… ну что с вас взять…
Дорогой Сережа, если тебе папа не объяснил, то скажу я. Первое: хамить не хорошо.
Второе: слушай, что тебе говорят и думай, прежде чем писать — alexshelkov наглядно показал, что чтение манов часто лучше чтения багтрекеров.
Всего хорошего.
Второе: слушай, что тебе говорят и думай, прежде чем писать — alexshelkov наглядно показал, что чтение манов часто лучше чтения багтрекеров.
Всего хорошего.
То что баг — бесспорно. Но. Зочем писать такой код????
попробовал вариант автора… на сайт не повлияло.
хотя процесс был перезапущен, что дороговато. но и всё.
хостинг-провайдер поймает и убьёт )
хотя процесс был перезапущен, что дороговато. но и всё.
хостинг-провайдер поймает и убьёт )
пхп такой пхп…
Вообще самый настоящий баг, почему должен валиться PHP при вызове родительского конструктора по умолчанию? Если бы так в C++/C#/Java было? это тоже нормально?
Помню историю с 5.2.0 версией, когда с легкого мановения руки один из завсегдатаев php-club.ru снес работу с передачей параметров в функции по ссылке и тоже говорили, что это нормально, да и правда, нафига передавать параметры в функцию по ссылке.
Помню историю с 5.2.0 версией, когда с легкого мановения руки один из завсегдатаев php-club.ru снес работу с передачей параметров в функции по ссылке и тоже говорили, что это нормально, да и правда, нафига передавать параметры в функцию по ссылке.
я лично считаю, что это баг. Но баг в том, что нужно генерировать notice об возможном неверном предположении области определения 'parent::x', ну уж ни в коем случае не обрушивать ничего…
Не в тему, но всё же: http://bugs.php.net/bug.php?id=48669
Fatal error: Maximum function nesting level of '100' reached, aborting! in D:\home\framework\www\phptest.php on line 6Хм, под виндой не падает.
Это 5.3?
А suhosin патч есть на пхп?
А suhosin патч есть на пхп?
Да, 5.3. Нет, откуда на девелоперской машине под виндой сухосин-патч… Но тем не менее виновато действительно расширение, на проверку оказалось ошибка выводится только с наличием xdebug, без оного не выводится ничего, однако кстати threaded апач не падает.
PHP периодически подбрасывает сюрпризы в самых неожиданных местах. Вот еще пара баго-фич в ZipArchive::open() ( pecl.php.net/bugs/bug.php?id=8714 ) и ZipArchive::addFile( pecl.php.net/bugs/bug.php?id=9443 ).
Sign up to leave a comment.
PHP 5.3: DoS — это не баг, а фича