Файловые операции PHP5 - тормоза

Доктор

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

$start = microtime_float();
echo $str; // длинная такая строка
var_dump(microtime_float()-$start);

Давал нереальные результаты.
Причем подобный код:

$start = microtime_float();
for ($i=$a; $i<$b; $i++)
echo $str; // маленькая часть той длинной строки
var_dump(microtime_float()-$start);

Тоже давал нереальные результаты.
А уже такой:

$start = microtime_float();
for ($i=$a; $i<$b; $i++) {
// тут какие-то промежуточные действия
// в некотором количестве, не связанные с выводом...

echo $str; // маленькая часть той длинной строки

// а тут еще какие-то промежуточные действия
// в некотором количестве, не связанные с выводом...
}
var_dump(microtime_float()-$start);

Уже давал то, что и надо. Все это с одними настройками на сервере. Стоило сделать аутпут буфферинг больше, чем суммарная длина строки, как все 3 варианта предсказуемо начинали работать быстро.

Эта картинка вообще наблюдается лишь на некоторых серверах. Т.е. на некоторых хоть с аутпут буфферингом 0 все работало, как положено.

Т.е. подозрение, что дело в каких-то еще настройках, но, скорее всего, даже не ПХП, а, к примеру, апача... Не докопался в каких.
Никто не подскажет?

Update: кстати, даже если это настройки какие-то, то не понятно, почему код номер 3 в этом случае работал как положено...
 

Sirius

PHP+MySQL=LOVE
Дома проверил - точно также. Проблема остаётся.

Нашёл закономерность окромя относительных путей, это количество букв в названии дира (похоже на то), а также количество директорий до которых нужно идти, и также внутренние диры. У PHP5 с увеличением этих двух параметров время работы пропорционально (но немного правда) увеличивается, у 4-ки ничего не меняется.

Проверял в php cli - так удобнее. Переустановил php5 в c:\php (директорию по умолчанию) - не помогло.

si - ты написал две проверки по php5 - мне интересно сколько при этом даёт php4?

Проблема осталась. Клиент с которого всё и началось, сидит на Линуксе, Шеред хостинге вроде, PHP 5.0.4, Apache2.0.55
Я ему просто изменил абсолютные пути на относительные и код заработал в 6!!! раз быстрее. Не знаю причины - но факт, есть факт. Вот так!

Буду искать дальше - если что - напишу...
 

si

Administrator
упс, ошибся немного. разницы между 4 и 5 на линуксе нету. первый запуск работает в 3-5 раз медленней остальных не зависимо от версии РНР (ОС тоже кэширует данные о файлах)
 

Sirius

PHP+MySQL=LOVE
Нет - в обоих случаях выключен...

Да включение safe_mode увеличивает время работы в обоих версиях в среднем в 2 раза.
 
Сверху