LINUX.ORG.RU
ФорумTalks

О несовместимости версий PHP


0

0

Вчера я постил инструкцию о том как компилировать PHP и Апачи в целях наличия нескольких версий.

Были множественные комменты типа "никогда не было таких проблем", "конкретных примеров конечно не будет" итп.

Развенчиваем! :)
Сегодня специально натравил make test на последнюю скачанную версию PHP (5.2.9)

Результат:

EXPECTED FAILED TEST SUMMARY
---------------------------------------------------------------------
ob_start(): Ensure unerasable buffer cannot be flushed by ob_flush(). [tests/output/ob_start_basic_unerasable_005.phpt]
SPL: ArrayObject::__construct basic usage with ArrayObject::ARRAY_AS_PROPS. [ext/spl/tests/arrayObject___construct_basic4.phpt]
SPL: ArrayObject::__construct basic usage with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS. [ext/spl/tests/arrayObject___construct_basic5.phpt]
SPL: ArrayObject::exchangeArray() basic usage with object as underlying data store. [ext/spl/tests/arrayObject_exchangeArray_basic3.phpt]
SPL: ArrayObject::setFlags basic usage with ArrayObject::ARRAY_AS_PROPS. [ext/spl/tests/arrayObject_setFlags_basic1.phpt]

FAILED TEST SUMMARY
---------------------------------------------------------------------
Bug #30707 (Segmentation fault on exception in method) [Zend/tests/bug30707.phpt]


(и там дальше еще 15 проваленных не-expected тестов по различным багам. и один даже не по багу, а просто так — один из gettext basic test).


Так-то, господа не верующие в баги.


На всякий случай ([strike]для разжигания разговора[/strike]) дальнейший ход мысли.

Допустим в следующей версии пыха (5.3.0) пофиксят expected-баг SPL c Array Object'ом, и программер напишет на PHP 5.3.0 скрипт с ARRAY_AS_PROPS.
А потом этот скрипт поставят на сервак с PHP 5.2.9, и все накроется.

Поэтому у девелопера должен быть установлен и PHP 5.2.9 и PHP 5.3.0 одновренменно, чтобы писать сразу под несколько различных целевых серваков. Что довольно затруднительно делать с помощью пакетов (по крайней мере YUM+rpm =) Следовательно, нужно или виртуалить под каждую сборку PHP отдельную виртуальную машину, или собирать вручную из исходников.

Так — более аргументированно?

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

kkw
()
Ответ на: комментарий от boombick

> Ты болен? Кто будет использовать в production dev-версии?

0) в production нет багов? 1) Между _разными_ production нет различающихся багов?

2) Помойму много кто использует dev-версии =) Статистики, конечно, нету.

3) А еще много кто использует _устаревшие_ dev-версии, типа 4.0.какаянибудь, и не меняет именно потому что все накроется от этого. Тут уже могу привести пример, который видел не далее чем вчера:

http://web.risp.ru/hosting/index.shtml

olegchir
() автор топика

А если прогаммист вдруг начнет использовать NS или lambda, которые добавили в 5.3.0, а кто-то _вдруг_ попытается крутить этот код на PHP 5.0.4? Ты пишешь откровенный бред, просто феерический

boombick ★★★★★
()
Ответ на: комментарий от kkw

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

Ну так и приведены ссылки на примеры пхп-кода. Собственно это те юнит-тесты, которые были приведены выше.

Например, вот здесь лежит тест на ArrayObject: ext/spl/tests/arrayObject_setFlags_basic1.phpt

Чтобы вам не рыться, вот его содержимое:

"
--TEST--

SPL: ArrayObject::getFlags() basic usage

--FILE--

<?php

$ao = new ArrayObject(new ArrayObject(new stdClass));

var_dump($ao->getFlags());



$ao = new ArrayObject(new ArrayObject(array(1,2,3)), ArrayObject::STD_PROP_LIST);

var_dump($ao->getFlags());



$ao = new ArrayObject(new ArrayIterator(new ArrayObject()), ArrayObject::ARRAY_AS_PROPS);

var_dump($ao->getFlags());



$ao = new ArrayObject(new ArrayObject(), ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS);

var_dump($ao->getFlags());



$cao = clone $ao;

var_dump($cao->getFlags());

?>

--EXPECTF--

int(0)

int(1)

int(2)

int(3)

int(3)
"

olegchir
() автор топика
Ответ на: комментарий от boombick

> А если прогаммист вдруг начнет использовать NS или lambda, которые добавили в 5.3.0, а кто-то _вдруг_ попытается крутить этот код на PHP 5.0.4? Ты пишешь откровенный бред, просто феерический

Ну, если в распоряжении есть сервер на PHP 5.3.0, то почему бы не использовать все доступные фичи на полную катушку?

Если в распоряжении есть только 5.0.4, то придется довольствоваться тем, что там есть.

Именно поэтому и нужно иметь у себя на машине одновременно и 5.3.0 и 5.0.4, чтобы проверить что код правильно выполняется на целевой платформе.

> lol, тебе уже объяснили, что нормальные люди не используют shared-hosting,

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

> а свою конфу можно развернуть на любом драном VPS.

Если так, то я выбираю Java и testing-stable JBoss'а и в задницу этот ужасный Пых, на котором даже нормально ООП не попишешь.

Но это если есть возможность выбирать. Если у человека есть хостинг PHP 4.0.6 и он обратился с просьбой написать под парочку фич для старого сайта... То в таком случае выламываться про "нормальных людей" — прямая дорога потерять клиента.

olegchir
() автор топика
Ответ на: комментарий от olegchir

> прямая дорога потерять клиента.

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

Еще раз - в production, как правило, используется отлаженная версия со всеми security-апдейтами и багфиксами. Это же самое окружение развернуто на development-сервере. Клиенту неинтересно под какую там версию что-то пишется и вообще на чем все пишется - у него есть задача. За которую он платит тебе. А решаешь ее уже ты. И если ты не можешь найти таких клиентов, то это исключительно твои проблемы и не стоит засорять форум откровенно вредными советами.

boombick ★★★★★
()
Ответ на: комментарий от boombick

> Ну если каждая копейка на счету,

Копейка всегда на счету %)

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

Есть ниша крупных проектов. Есть ниша средних и малых. Из-за того что ты работаешь с крупными, не стоит записывать всех остальных в "говно".

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

> И если ты не можешь найти таких клиентов

Зачем обязательно искать крупных, мелких дофига =)

olegchir
() автор топика
Ответ на: комментарий от boombick

Кстати, тут какой-то гений грохнул последний пост. Повторюсь: получается что у твоего клиента нет ничего своего (проекта-платформы-сайта-сервера), и он пришел к тебе искать "счастье с нуля". Странный какой-то клиент.

olegchir
() автор топика

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

phasma ★☆
()
Ответ на: комментарий от olegchir

> Кстати, тут какой-то гений грохнул последний пост

Я грохнул, не надо материться

> получается что у твоего клиента нет ничего своего (проекта-платформы-сайта-сервера), и он пришел к тебе искать "счастье с нуля"


У моего клиента есть бизнес-план. Это к тебе приходят переделывать, ко мне приходят делать

boombick ★★★★★
()

И все равно открой для себя KVM для начала.

kost-bebix ★★
()
Ответ на: комментарий от olegchir

Как вам повезло, что вы веб-кодер. А то пришлось бы держать мегатонны glib-ов всеразличных, тысячи кернелов и пяток версий gcc.

kkw
()
Ответ на: комментарий от kkw

> А то пришлось бы держать мегатонны glib-ов всеразличных, тысячи кернелов и пяток версий gcc.

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

shahid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.