Джентльмены, нужна помощь в борьбе с глюком, имеющим кодовое название "вечный кайф" .
Описываю явление.
Стоит на сервере апач 2/FreeBSD, php 5, кучка скриптов. Характерная картина: запускаем из браузера какой-нибудь php-скрипт, скрипт выдает в страницу браузера какой-нибудь текст, браузер ее выводит и... продолжает пытаться загружать страницу, хотя все что нужно было, на страницу уже выведено. Иконка загрузки крутится, прогресс-бар стопится где-то на 70-75%, и так может продолжаться _вечно_, пока не нажмешь на "стоп". Бывает, если на этом месте обновить страницу, то все нормально отрабатывает и процесс загрузки заканчивается, бывает наоборот: при первом обращении страница выводится нормально, а при повторном запуске того же скрипта - "вечный кайф"
Причем если на хорошем канале все это еще терпимо - можно плюнуть и продолжать работать, функционально вроде бы не мешает, то на дайлапе или, упаси боже, gprs, страница может и вовсе не отобразиться в браузере, а просто повиснуть на этапе загрузки. В общем, разные юзеры на разных каналах, с разными браузерами, жалуются на примерно однотипные вышеописанные явления. А кто платит за трафик - жалуются, что данный процесс еще и трафик у них отъедает.
Сие наблюдается независимо от "тяжести" выводимой страницы - там может быть, например, несколько строк практически неформатированного текста. Если взять исходный текст выводимой страницы, сохранить как html и положить страничку на тот же сервер - вывод будет моментальным и загрузка в браузере завершится сразу после вывода содержимого. Вообще, статические страницы практически любого размера и наполнения выводятся без проблем. Из чего я делаю вывод, что собственно код тут ни при чем, а проблема, видимо, где-то между php и апачем. Буферизацию включал-отключал - никакого эффекта.
Может быть, кто-то сталкивался с такой бякой - пожалуйста, подскажите, где крутить, что копать? И перед юзерами неудобно, и самому на все это смотреть противно . В общем, хелп!!
1. giddy - 17 Августа, 2007 - 13:39:00 - перейти к сообщению
2. valenok - 17 Августа, 2007 - 14:28:05 - перейти к сообщению
А почти всегда проблема в скрипте.
В конце после вывода всего чего должно было быть выведеным по задумке ,
срабатывает бесконечный цикл или чтото на его подобии.
Давайте код одной из страниц которые зависают.
(Может быть порблема совсем не в этом, но чаще всего именно так)
В конце после вывода всего чего должно было быть выведеным по задумке ,
срабатывает бесконечный цикл или чтото на его подобии.
Давайте код одной из страниц которые зависают.
(Может быть порблема совсем не в этом, но чаще всего именно так)
3. giddy - 17 Августа, 2007 - 14:53:35 - перейти к сообщению
valenok пишет:
А почти всегда проблема в скрипте.
В конце после вывода всего тчо должно было по плану быть выведено, встал себе какойто то бесконечный цикл или чтото в этом роде.
Давайте код однгой из страниц которые зависают.
(Может быть порблема совсем не в этом, но чаще всего именно так)
В конце после вывода всего тчо должно было по плану быть выведено, встал себе какойто то бесконечный цикл или чтото в этом роде.
Давайте код однгой из страниц которые зависают.
(Может быть порблема совсем не в этом, но чаще всего именно так)
Скрипт phpMyAdmin знаешь? Можно начать с него...
Ну или вот попроще страничка:
<?php
include "mysqlconfig.php";
include "fun.php";
set_time_limit(0);
$data = mysql_connect($base_name, $base_user, $base_pass);
if(!mysql_select_db($db_name,$data)){
echo mysql_error();
die();
}
$sqlqu = "SELECT vol from admin where 1 and k like 'iso_info'";
$sqldata = mysql_query($sqlqu);
$result = mysql_fetch_array($sqldata);
$iso_info = $result["vol"];
//echo "Список файлов iso /".$file."<br>";
$file = base64_decode($code);
exec($iso_info." -f -R -i '".$file."'",$echo);
for ($i=0; $i< count($echo);$i++) :
print $echo[$i]."<br>";
endfor;
exit();
?>
P.S. Код не мой
4. valenok - 17 Августа, 2007 - 15:13:33 - перейти к сообщению
Хороший код. Давайте его разберём..
(php код стоит заключать в теги [ php][/ php])
(php код стоит заключать в теги [ php][/ php])
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- include "mysqlconfig.php";
- include "fun.php";
- // Эта строчка как раз позволяет работать скрипту столько - сколько ему влезет.
- // Ваш код я чуть подправил. Ту часть которая не принципиальна - стёр
- $iso_info = mysql_result(mysql_query("SELECT `vol` FROM `admin` WHERE `k` = 'iso_info' LIMIT 1"),0,0);
- // Тут сервер начинает выполнять некую операцию.
- // Тут вы как раз и начинаете ждать. Долго ждать. Пока сервер не закончит свою операцию.
- // Тоесть 70% уже позади, а вот тут он и повисает.
- // Иногда быстро проходит этот участок, иногда медленно. Иногда вообще не проходит из за неправильных параметров
- print $echo[$i]."<br>";
- endfor;
- echo "for loop is over";
- ?>