|
|
|
| Здраствуйте!
Есть файлик servers.txt в нем хранятся urlы типа
vasya.ru
petya.ru
kolya.ru
и так далее... этих строк в файле где-то около 200.
Я вот что с ними делаю... тоесть заганяю в масив и по очереди захожу на сайты(ну там определенная страница, которая выполняет свое действие и выдает "success" если все ок)
Вот кусочек кода, который ТИПА заходит на страницы и запускает скрипты внутри их
if ($servers=file('servers.txt')) {
echo 'Список серверов загружен<br />';
foreach ($servers as $server) {
$server=trim($server);
$r="$server";
$result=file_get_contents($r);
if ($result=="success") {
echo 'Сервер '.$server.' успешно синхронизирован.<br />';
} else {
echo '<font color=red>Ошибка синхронизации сервера '.$server.'. </font>';
if (!$result) {
echo '<font color=red>Невозможно запустить скрипт '.$server.'</font>';
} else {
echo '<font color=red>Ошибка: '.$result.'</font>';
}
echo '<br />';
}
}
} else {
echo 'Не могу открыть список серверов.';}
|
Это меня все устраивало бы, если бы было бы всего 10 сайто, по которых нужно ходить.. а их 200. Время обхода затягивается на долго, не помогает set_time_limit(0);
Я пробывал запустить это все дело через шелл, думал быстрее, но это затянулось аж в 10 минут.
Что мне нужно?
Брать по 10 строк с этого же файлика, и выполнять это же действие тоетсь
$result=file_get_contents($r);
|
а потом обновлять окно, пусть даже мета рефрешом, и брать следуйчие 10 строк, итак до конца...
Помогите, если можете...
Зарание Спасибо! | |
|
|
|
|
|
|
|
для: restall
(11.07.2006 в 09:39)
| |
<?
$servers=file('servers.txt') OR die('Не могу открыть список серверов.');
echo 'Список серверов загружен<br />';
foreach ($servers as $server) {
$server=trim($server);
$result=file_get_contents($server);
if ($result=="success") {
echo 'Сервер '.$server.' успешно синхронизирован.<br />';
} else {
echo '<font color=red>Ошибка синхронизации сервера '.$server.'. </font><br />'';
if (!$result) {
echo '<font color=red>Невозможно запустить скрипт '.$server.'</font><br />'';
} else {
echo '<font color=red>Ошибка: '.$result.'</font><br />'';
}
}
}
|
| |
|
|
|
|
|
|
|
для: restall
(11.07.2006 в 09:39)
| | И заодно - в дальнейшем не пиши неинформативные названия тем | |
|
|
|
|
|
|
|
для: valenok
(11.07.2006 в 10:28)
| |
В этой переменной был типа чеерз слеш написано адрес старниц к примеру $r="$server/faylik.php?pass=89048248034klkf"; понимаете... потому я его просто вынял, забыл убрать переменную...
Насчет код оптимизирвоать, он и так оптимизирвоан до минимума. Насчет что мне даст типа если будет брать по 10 сточек. Обьясняю, когда выполняется ввесь скрипт, олн выполняется довольно долго ну 2 где-то минуты (в браузере) это довольно долго... и у меян инет не выдерживает, да и лимит маленький... тоесть апачка посто сбраысвает процес, н евыполнив его.. .а мне это не нужно, потому я хочу розбить эть то все дело на маленькие части... упсть к примеру 10 загрузилось... потом обновление.. потом снова 10... и так пока не выполниться.. будет выполнятся 3-4 минуты - будет ок... посто сейчас и этог онету... Я счейчас добавляю через шелл.. .я просто написал выполнение через шелл ппшного файла... Процес не тухен, но очень длинный... Шелл славиться своею медленною выполнимостю...(зато без ошибок).
Если вы можете можете помочь - помогите.
Насчет темы, буду знать))
Жду ответа. | |
|
|
|
|
|
|
|
для: restall
(11.07.2006 в 12:20)
| | Вам нужно использовать функцию time() в цикле опроса серверов.
Когда затраченное время превысит некоторый лимит, нужно прервать цикл, запомнить номер строки и сгенерировать код на JS , который бы перезагрузил страницу, указав следующий номер в параметре обращения к странице. | |
|
|
|
|
|
|
|
для: Trianon
(11.07.2006 в 12:31)
| | А поподробнее с кодом именно запоминания строк и дальнешенго использывания... И что вы предлагаете на JS написать?? Чем обычный рефреш хуже? Тем болие я эти языком невалдею... | |
|
|
|
|
|
|
|
для: restall
(11.07.2006 в 12:34)
| |
<?
$start_from = isset($_GET['from']) ? intval($_GET['from'])) : '0';
$page = isset($_GET['page']) ? intval($_GET['page'])) : 0;
++$page;
$maxtime=20;
$servers = file('servers.txt');
$start_time = time();
echo "Page $page<hr>";
for($i = $start_from; $i < count($servers); $i++)
{
if(time() -$start_time > $maxtime)
exit("<script> window.location.href= '?from=$i&page=$page'; </script>") ;
$server = trim($servers[$i];
$result=file_get_contents($server);
if ($result=="success") echo 'Сервер '.$server.' успешно синхронизирован.<br />';
else
{
echo '<font color=red>Ошибка синхронизации сервера '.$server.'. </font><br />'';
if (!$result) echo '<font color=red>Невозможно запустить скрипт '.$server.'</font><br />'';
else echo '<font color=red>Ошибка: '.$result.'</font><br />'';
}
}
echo "<hr>End of job";
?>
|
Хуже - тем, что после вывода на страницу операции с заголовками использовать поздно. Рефреш придется выполнить JSом. | |
|
|
|
|
|
|
|
для: restall
(11.07.2006 в 12:20)
| |
<?
<?
$servers=file('servers.txt') OR die('Не могу открыть список серверов.');
echo 'Список серверов загружен<br />';
if($_GET['server_num']){$i=$_GET['server_num'];}else{$i=0;}
$time=time()+30;
for ($i;$i<count($servers);$i++) {
if(time()>$time){ echo "<SCRIPT>document.location='".$_SERVER['PHP_SELF']."?server_num=".($i-1)."';</SCRIPT>"; die();}
$servers[$i]=trim($servers[$i]);
$result=file_get_contents($servers[$i]);
if ($result=="success") {
echo 'Сервер '.$servers[$i].' успешно синхронизирован.<br />';
} else {
echo '<font color=red>Ошибка синхронизации сервера '.$servers[$i].'. </font><br />';
if (!$result) {
echo '<font color=red>Невозможно запустить скрипт '.$servers[$i].'</font><br />';
} else {
echo '<font color=red>Ошибка: '.$result.'</font><br />';
}
}
}
|
| |
|
|
|
|
|
|
|
для: restall
(11.07.2006 в 09:39)
| | Извините, не читал всю тему, но у меня тут лежит открытый учебник Котерова и в нем написано следущее:
<?
$f = fopen( $fname = "file.txt", "rt" );
$lines = explode("\n", fread($f, filesize($fname)));
?>
|
"Эти две строчки не только поместят в массив $lines все строки файла, но еще и:
- удалят лишние символы перевода строки (\n);
- удалят символы \r (на счет режима открытия файла "rt");
- сделают это даже быстрее, чем один вызов file().
Последний пункт наводит на размышление, но простая проверка показывает: да, пара fread() + explode() работает быстрее, чем вызов file(). Парадокс"
Попробуйте, может быть поможет... | |
|
|
|
|
|
|
|
для: cyberface
(11.07.2006 в 15:26)
| | И при чем тут это всё?
Если Вы попробуете отпрофилировать код, то увидите, что 99,99% времени занимает выполнение file_get_contents, т.к. читаемый файл является http-потоком на другом сервере.
Это, конечно, весьма благое дело - оптимизоровать оставшиеся 0,01%, да только эффекта не будиет никакого. | |
|
|
|
|
|
|
|
для: Trianon
(11.07.2006 в 16:54)
| | =))) Я же говорю, что тему не читал =) просто у меня лежал учебник открытый именно на этой странице, ну я и написал все что видел :-j | |
|
|
|
|
|
|
|
для: cyberface
(11.07.2006 в 21:47)
| | =) | |
|
|
|