Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выполнение задачи по частям
 
 автор: restall   (11.07.2006 в 09:39)   письмо автору
 
 

Здраствуйте!
Есть файлик 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 строк, итак до конца...
Помогите, если можете...
Зарание Спасибо!

   
 
 автор: valenok   (11.07.2006 в 10:27)   письмо автору
 
   для: 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 />''; 
               }
         }
}            
 

   
 
 автор: valenok   (11.07.2006 в 10:28)   письмо автору
 
   для: restall   (11.07.2006 в 09:39)
 

И заодно - в дальнейшем не пиши неинформативные названия тем

   
 
 автор: restall   (11.07.2006 в 12:20)   письмо автору
 
   для: valenok   (11.07.2006 в 10:28)
 


$r="$server";

В этой переменной был типа чеерз слеш написано адрес старниц к примеру $r="$server/faylik.php?pass=89048248034klkf"; понимаете... потому я его просто вынял, забыл убрать переменную...
Насчет код оптимизирвоать, он и так оптимизирвоан до минимума. Насчет что мне даст типа если будет брать по 10 сточек. Обьясняю, когда выполняется ввесь скрипт, олн выполняется довольно долго ну 2 где-то минуты (в браузере) это довольно долго... и у меян инет не выдерживает, да и лимит маленький... тоесть апачка посто сбраысвает процес, н евыполнив его.. .а мне это не нужно, потому я хочу розбить эть то все дело на маленькие части... упсть к примеру 10 загрузилось... потом обновление.. потом снова 10... и так пока не выполниться.. будет выполнятся 3-4 минуты - будет ок... посто сейчас и этог онету... Я счейчас добавляю через шелл.. .я просто написал выполнение через шелл ппшного файла... Процес не тухен, но очень длинный... Шелл славиться своею медленною выполнимостю...(зато без ошибок).
Если вы можете можете помочь - помогите.
Насчет темы, буду знать))
Жду ответа.

   
 
 автор: Trianon   (11.07.2006 в 12:31)   письмо автору
 
   для: restall   (11.07.2006 в 12:20)
 

Вам нужно использовать функцию time() в цикле опроса серверов.
Когда затраченное время превысит некоторый лимит, нужно прервать цикл, запомнить номер строки и сгенерировать код на JS , который бы перезагрузил страницу, указав следующий номер в параметре обращения к странице.

   
 
 автор: restall   (11.07.2006 в 12:34)   письмо автору
 
   для: Trianon   (11.07.2006 в 12:31)
 

А поподробнее с кодом именно запоминания строк и дальнешенго использывания... И что вы предлагаете на JS написать?? Чем обычный рефреш хуже? Тем болие я эти языком невалдею...

   
 
 автор: Trianon   (11.07.2006 в 12:50)   письмо автору
 
   для: 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ом.

   
 
 автор: valenok   (11.07.2006 в 12:39)   письмо автору
 
   для: 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 />'
               } 
         } 
}  

   
 
 автор: cyberface   (11.07.2006 в 15:26)   письмо автору
 
   для: restall   (11.07.2006 в 09:39)
 

Извините, не читал всю тему, но у меня тут лежит открытый учебник Котерова и в нем написано следущее:

<?
$f 
fopen$fname "file.txt""rt" );
$lines explode("\n"fread($ffilesize($fname)));
?>

"Эти две строчки не только поместят в массив $lines все строки файла, но еще и:
- удалят лишние символы перевода строки (\n);
- удалят символы \r (на счет режима открытия файла "rt");
- сделают это даже быстрее, чем один вызов file().
Последний пункт наводит на размышление, но простая проверка показывает: да, пара fread() + explode() работает быстрее, чем вызов file(). Парадокс"
Попробуйте, может быть поможет...

   
 
 автор: Trianon   (11.07.2006 в 16:54)   письмо автору
 
   для: cyberface   (11.07.2006 в 15:26)
 

И при чем тут это всё?
Если Вы попробуете отпрофилировать код, то увидите, что 99,99% времени занимает выполнение file_get_contents, т.к. читаемый файл является http-потоком на другом сервере.
Это, конечно, весьма благое дело - оптимизоровать оставшиеся 0,01%, да только эффекта не будиет никакого.

   
 
 автор: cyberface   (11.07.2006 в 21:47)   письмо автору
 
   для: Trianon   (11.07.2006 в 16:54)
 

=))) Я же говорю, что тему не читал =) просто у меня лежал учебник открытый именно на этой странице, ну я и написал все что видел :-j

   
 
 автор: valenok   (12.07.2006 в 09:29)   письмо автору
 
   для: cyberface   (11.07.2006 в 21:47)
 

=)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования