Pull to refresh

Comments 94

Вот если честно, то вспоминается поговорка про дурака и стеклянный фаллоимитатор.
Т.к. положить можно что угодно умеючи. А задача программиста как раз в обратном.
т.е. я имею ввиду нужно знать такие вещи, чтобы не допустить падения наших творений, на то мы и программисты. :)
Дело в том, что ошибка именно на уровне PHP. И сосед по shared-хостингу сможет положить весь сервер.
дурное дело не хитрое
из личного опыта
лишняя точка с запятой нечаяно затесавшаяся при копи пейсте в SQL запрос может не хило так нагрузить сервер у хостера.
Нормального хостера — не может. Рухнет воркер, работающий с правами юзера, при след. коннекте перезапустится назад. Все.
ab по адресу этого скрипта в игрушечное количество потоков.
=> отключение по факту превышения созданной пользователем нагрузки.
Так превышения нет, надо ещё ухитриться такое превышение заметить.
А вот интересно кому в голову приходит так вызывать конструктор родительского класса
call_user_func_array(array($this, «parent::__construct»), $args);

Я думаю, что при грамотном проектировании программист должен представлять себе что именно ему пихает в конструктор класса
Но все же пришло кому-то ))
Код не мой. См. по ссылке в теме.
UFO just landed and posted this here
говорят что это не баг, а просто неверное использование функции.
Возможно они правы, ведь никто вам не запрещает например устроить в своём коде бесконечную рекурсию с использованием системных интерфейсов( пример. подписка на событие и действие внутри обработчика приводящее к повторному вызову этого же события )
Это баг, т.к. тут неверная работа с указателем в движке PHP.
закройте глаза и считайте это фичей «экстренного завершения воркера», принимая платформу вы принимаете идеологию её разработчиков.
Так там не с указателями дело. Судя по всему, стек весь выедается. Хотя, почему оно от этого сегфолтится, не вполне ясно.
дык когда стек забили под завязку будет запись за границу стека в (guard page) и как результат — segfault.
такие вещи не должны приводить к segfault
Лучше б они просто кинули Exception, а не убили воркер
Чем-то ситуация напоминает ситуацию с браузером internet explorer: там то же разработчики утверждают, что они не делали баги, а создавали фичи.
А вот я вам еще баг нашел!

int main(int, char*[])
{
 char *abc = 0;
 *abc = 'a';
}


* This source code was highlighted with Source Code Highlighter.


АААА! Сегфолт! Подвержены все компиляторы С и С++!
Это ошибка кода и она влияет только на эту программу. Среда исполнения(ОС) при этом не падает.
Она роняет CRT. Принцип тот же.
c runtime (?). Возможно имеется в виду аварийное завершение процесса (если нет обработчика сигнала).
Вот если бы этот код от лица геста уронил бы систему в BSOD/kernel panic/etc — это был бы баг ОС.
нее… это была бы _фича_ ОС! :)
PHP интерпретируемый язык и интерпретатор полностью контролирует, что у него с памятью происходит и должен не рушиться, а писать ошибку. Вам К.О.
Один из пользователей shared-хостинга может убить сервер.
Как должна работать связка php+сервер, чтобы один из пользователей мог убить сервер? Если php работает как cgi, то умрет пхп-шный процесс, а сервер вернет что-то вроде Internal Server Error. Если php как модуль, то он утянет за собой и один из серверных рабочих процессов, и пользователю, вероятно, ничего не вернется. Но головной процесс сервера ведь останется, или я не прав? Есть еще какие-то распространенные подходы к связыванию php с веб-сервером на шаред-хостингах?
Апач тридед умрет полностью.
Апач префорк — умрет только воркер.
Prefork, ITK, peruser, woker — не подвержены, остальных я на хостинговых серверах не видел. Даже если упадет апач (чудом) — его поднимет мониторинг тут же.

Повторюсь, если мы говорим о нормальных хостерах.
а теперь считаем время на поднятие апача и умножаем на количество запросов к бажному скрипту.
DoS — это не «убить сервер», это отказ в обслуживании сервиса. В данном случае тут есть отказ в обслуживании php.
Апач конечно оно не уронит, ни в mod, и в fast-cgi режиме.
Возможно автор имел в виду DDoS шаред-хостинга с помощью этой «фичи».
нет. именно DoS
DoS — Denial of Service
DDoS — Distributed Denial of Service
а DoS тут заключается в том, что Denial of Service это отказ в обслуживании.
выполнив на shared-хостинге вышеприведенный код как раз отказ в обслуживании и получится.
О, а я еще могу про форкбомбу вспомнить ;) пусть и не так быстро, но не менее эффективно способно завалить или очень сильно затормозить систему.
Отлично, если это фича, а не баг, то почему в 5.2.10 ее нет?
ну, это уже просто праздник какой-то! %)
Да ну, как раз вполне логичное поведение. Маны читайте.
правда? но покажите где
да, нашел нотис в мане но на момент моего поста в багтрек его стопудово не было — это обсуждение на форуме было коллективное и никто не нашел ничего в мане
Вы же сами выбираете такую локаль, тогда чему удивляться? PHP делает точно то что Вы от него требуете.
ага, а number_format это типа алиас к дефолтному поведению?
number_format — это не алиас, а функция форматирования. Дефолтного поведения нет, вы всегда имеете то что заказываете. В конце концов, если ленитесь указать правильную локаль — кто виноват?
в данном случае этот принцип как раз нарушен, я хочу передать в JS или в SQL float, просто через конкатенацию, но не могу, ну вы поняли что 'INSERT… '. (float)$val; для многих локалей выдаст еррор?
я считаю что абсолютно противоестественно приводить числа к строкам по умолчанию с учетом локали, но даже не просто локали а «как-то так» только с учетом точки но игнорируя десятичные разделители и позицию знака. я не понимаю почему
echo 5.1;
мне должно для русской локали выдать 5,1
Ну как бы это знания математики уровня 5-6 класса. Именно тогда проходят десятичные дробные части. И отделяются они через ",".

Пример: задайте дробгый размер шрифта в русскоязычной версии Word, а потом в англоязычной. Естестыенно это будут "," и "." соответственно.
спасибо молодой человек, это однозначно полезная инфа, если отделяются запятой чего-ж вы в коде не через запятую пишите?
ексель кроме всего прочего еще и пробелами труппы разделит и для некоторых локалей знак минус сзади поставит, чего-ж пых так не делает?
> если отделяются запятой чего-ж вы в коде не через запятую пишите?
Это синтаксис. По синтаксису отделяется точкой.
А вот вы делаете процедуру преобразования в строку. Тут в зависимости от локали.

По секрету скажу, что в .NET при преобразовании строки в дабл та же самая особенность. Это нормально, это не только в PHP так.
То что Вы считаете противоестественным для PHP делать то что Вы запрашиваете у PHP — это противоестественно :)

Вы указываете PHP выдавать числа с запятой. Почему Вы удивляетесь что он выдаёт числа с запятой, я не могу понять. Говорите выдавать с точкой, он будет выдавать с точкой. LC_NUMERIC=«C» укажите, например, или ещё что-то что понравится.
нет, я указываю пыху что когда я захочу форматировать числа с учетом локали (number_format) он будет это делать правильно, подменяете понятия.
вы считаете (без фанатизма, я тоже пых люблю) что логично делать более простую операцию (приведение) гараздо сложнее чем ее-же с учетом внешних сведений (локали)?

Если пых приводит числа к строке с учетом локали чего он не делает обратную операцию?

(float)((string)5.1) !== 5.1
у меня php5 + apache2 на windows2003server иногда выдает 0,1, например, а бывает временами и 0.1
вот где чудеса.
Спасибо
Проверю в понедельник на работе :)
не заметил версии, не выйдет пока проверить
а на 5.2. работает?
имхо, либо фаталка должна выскакивать, либо работать по-человечески(
Что то в последнее время разработчики Пыха какие то не адекватные стали(((
сегфолт для скриптового языка — это могила (((
Буквально позавчера видел сей баг при попытке осознать почему у меня не работает кохана.
К слову. У меня версия 5.2.10. Так что подвержен не только 5.3
php -v
PHP 5.2.10-2 with Suhosin-Patch 0.9.7 (cli) (built: Jul 10 2009 00:34:06)
Copyright © 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright © 1998-2009 Zend Technologies


апач не упал, если до вызова кода что то пытаюсь вывести на экран — получаю 404
UFO just landed and posted this here
Ты за эти слова заплатишь, сынок.
UFO just landed and posted this here
UFO just landed and posted this here
Вообще-то PHP иногда падает на вообще безобидном коде, если использовать с eAccelerator, к примеру.

Просто на это обычно пофигу, ибо воркеры и так умирают со временем.
В заметке — речь про PHP как *язык*, а не про разные надстройки и ускорители.

myserg обмолвился, что таких багов (подразумевая язык) — валом. Так что повторю просьбу — приведите примеры.
А то ведь, звиздеть — не мешки таскать…
UFO just landed and posted this here
По багтрекинговым сайтам я хожу только тогда, когда возникают проблемы. С PHP, как с языком программирования, их пока не возникало. Были замечания по паре *библиотек*. Ну так ничто не совершенно.
Но вообще — написанные скрипты работают так, как задумано и написано. Что делаю не так?
UFO just landed and posted this here
Делаю много, давно и плодотворно.
UFO just landed and posted this here
Писать код без использования is_a() — это значит делать что-то «не то»? Странный критерий.
UFO just landed and posted this here
> И версия была 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() вызывает баг недостаточно), который вызывает ошибку, и при этом обзываете человека «бараном»… ну что с вас взять…
Дорогой Сережа, если тебе папа не объяснил, то скажу я. Первое: хамить не хорошо.
Второе: слушай, что тебе говорят и думай, прежде чем писать — alexshelkov наглядно показал, что чтение манов часто лучше чтения багтрекеров.

Всего хорошего.
UFO just landed and posted this here
То что баг — бесспорно. Но. Зочем писать такой код????
попробовал вариант автора… на сайт не повлияло.

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

Баг от автора в этот чарт вряд ли попадёт.
Вообще самый настоящий баг, почему должен валиться PHP при вызове родительского конструктора по умолчанию? Если бы так в C++/C#/Java было? это тоже нормально?
Помню историю с 5.2.0 версией, когда с легкого мановения руки один из завсегдатаев php-club.ru снес работу с передачей параметров в функции по ссылке и тоже говорили, что это нормально, да и правда, нафига передавать параметры в функцию по ссылке.
Соль в том, что это не родительский конструктор для $b, это родительский конструктор для $c. И… не знаю, падать, все равно, пожалуй, не следовало бы.
я лично считаю, что это баг. Но баг в том, что нужно генерировать notice об возможном неверном предположении области определения 'parent::x', ну уж ни в коем случае не обрушивать ничего…
Fatal error: Maximum function nesting level of '100' reached, aborting! in D:\home\framework\www\phptest.php on line 6
Хм, под виндой не падает.
Это 5.3?
А suhosin патч есть на пхп?
Да, 5.3. Нет, откуда на девелоперской машине под виндой сухосин-патч… Но тем не менее виновато действительно расширение, на проверку оказалось ошибка выводится только с наличием xdebug, без оного не выводится ничего, однако кстати threaded апач не падает.
> Нет, откуда на девелоперской машине под виндой сухосин-патч…
На сайте то не написано, что он unix-only ;) Все может быть.

У меня падает апач. И без xdebug.
Sign up to leave a comment.

Articles

Change theme settings