Сервер перегружен!

Motor

Guest
Сервер перегружен!

Как сделать чтоб юзеру выводилось сообщение (например: "сервер перегружен"), при выполнении скрипта более 20сек, и после этого работа скрипта приостанавливалась.
 

chiffa

Guest
Motor, сам не проверял, но можешь попробывать: делаешь выполнение скрипта 20 секунд, а потом функцией на JavaScript onload () выводишь сообщение! Попробуй так...
 

Motor

Guest
Функция set_time_limit (20), устраивает всем, но мне нужно вывести свое сообщение, а не : "Fatal error: Maximum execution time of 20 seconds exceeded in ..."

А Яву я не знаю.
 

Boratustra

Новичок
Motor IMHO set_time_limit поможет ограничить время работы скрипта, но по истечении времени выдаст fatal error, что не даст тебе возможность сообщить что-нибудь красивое юзеру.

долго пишу:), уже не актуально
 

chiffa

Guest
Motor,

<body language="vbscript" OnLoad="Loading">

<script language="vbscript">
sub Loading()
alert "Если Вы видите это сообщение, значит страница загрузилась"
end sub
</script>
</body>
 

Boratustra

Новичок
Любопытно, а откуда такое число "20 секунд", по-моему про дружественность к юзеру тут беспокоиться нечего: он уже или уйдет куда-нибудь, или раз 5 нажмет на refresh, так что не увидит заботы о нем:)
 

gray07

Новичок
Можно попробовать set_error_handler(), если она сможет перехватить эту ошибку, а если нет, то register_shutdown_function(). А джаваскрипт ИМХО тут не поможет.
 

Boratustra

Новичок
Originally posted by gray07
Можно попробовать set_error_handler(), если она сможет перехватить эту ошибку, а если нет, то register_shutdown_functi
Ну fatal error не подпадает под обработчик,
а вообще, если пользователи готовы долго ждать результатов, то тут, я думаю, можно использовать iframe или frameset, чтобы время исполнения скрипта отслеживать с помощью броузера
 

gray07

Новичок
Да потому что через 20 сек вывалится не джаваскрипт а ошибка "Fatal error: Maximum execution time of 20 seconds exceeded in ..", т.е. скрипт ничего не выдаст
 

Boratustra

Новичок
chiffa, gray07 прав, по истечении времени javascript не сработает.
gray07, register_shutdown_function(): The registered shutdown functions are called after the request has been completed (including sending any output buffers), so it is not possible to send output to the browser...
Motor, я бы посоветовал использовать фреймы: в одном месте посылаешь запрос на сервер и кидаешь timeout в броузер. В скрипте на onload ставишь очищение timeout'а. Если скрипт успевает, то юзер ничего не узнает, иначе срабатывает timeout, в котором останавливается скрипт и выдается твоя инфа юзеру.
По-моему, иначе никак. Ну а если это обычный новостной сайт, то ИМХО лучше переделать алгоритм:).
 

chiffa

Guest
<html>
<head></head>
<body language="vbscript" OnLoad="Loading">


<script language="vbscript">
sub Loading()
Время ожидания загрузки скрипта исчерпано!"
end sub
</script>




<?
set_time_limit ( 20 );

function SearchFiles($indir,$SearchStr) {
static $files;

if ($dir_handle = @opendir($indir)) {
while($file = readdir($dir_handle)) {

if ($file!=".." && $file!="." && is_dir($indir.'/'.$file)) {
SearchFiles($indir."/".$file,$SearchStr);
}

if (is_file($indir."/".$file) && $file!=".." && $file!=".") {
if (preg_match("~".preg_quote($SearchStr)."~",$file)) {
$files[]= $indir.'/'.$file;
}
}

}
}

return $files;
}


$arra = SearchFiles('c:','AUTOEXEC.BAT');

$path = $arra[0];
$file12 = dirname ($path);
echo "$file12";

?>


</body>
</html>

Выводить, то оно выводит, но выводит даже если скрипт выполняеться мень 20, сообщение выводиться все равно. Мне кажеться можно дожать и довести дологического конца...
 

Boratustra

Новичок
Даа... беру свои опрометчивые слова на счет javascripta назад:
onload прекрасно работает. Вот кривоватый, но показательный пример:

<html>
<head>
<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript">
<!--
function tooLong()
{
document.body.innerHTML = 'Time expired';
}
//-->
</SCRIPT>
</head>
<body onLoad="tooLong();">
<?php
set_time_limit(3);
echo 'All';
for ($i = 0;$i < 3;$i++) $i = 0;
echo ' is done';
?>
<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript">
<!--
document.body.onload = '';
//-->
</SCRIPT>
</body>
</html>

соответственно в случаях зацикливания/нормальной работы наблюдаются нужные результаты :). Ну а доделать под себя уже можно:)
 
Сверху