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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как запустить файл?

Сообщения:  [1-10]    [11-20]  [21-23] 

 
 автор: Денис   (27.03.2006 в 11:00)   письмо автору
 
   для: Shorr Kan   (25.03.2006 в 16:24)
 

Странно, я запустил этот же пример - все в порядке, выполнения не ждет. По процессам РНР выполняется, файл постоянно растет и выполнения не ждет. Делаю под Linux. Проблема была в том, что не выгружается поток, попробуйте помодифицировать мой пример, я уверен, что он рабочий.

   
 
 автор: Shorr Kan   (25.03.2006 в 16:24)   письмо автору
 
   для: Shorr Kan   (25.03.2006 в 16:10)
 

Сделал, как вы написали. Все равно ждет выполнения. Но я делаю на unix.

   
 
 автор: Shorr Kan   (25.03.2006 в 16:10)   письмо автору
 
   для: Денис   (24.03.2006 в 11:31)
 

Сейчас буду проверять....

   
 
 автор: Shorr Kan   (25.03.2006 в 16:09)   письмо автору
 
   для: Trianon   (24.03.2006 в 11:35)
 

Да, совершенно все равно.

   
 
 автор: Trianon   (24.03.2006 в 11:35)   письмо автору
 
   для: Shorr Kan   (23.03.2006 в 16:10)
 

Вам совершенно всё равно, сколько параллельных процессов будет одновременно порождать обработка запросов клиентов?

   
 
 автор: Денис   (24.03.2006 в 11:31)   письмо автору
 
   для: Shorr Kan   (23.03.2006 в 16:10)
 

Решил все-таки проверить ваш пример, так как действительно задело :). Написал следующий пример:

main.php

<?php
exec
('echo OK! | C:\php5\php.exe main.php >> log.txt'); 
?


index.php

<?php 
     set_time_limit
(60);   
     
ignore_user_abort(true); 
     
$i 0;
     while(
true) {
        
sleep(3);
        echo 
$i++ ." ";
     }
?>


Запустил...и все работает. Вы просто не переправили поток вывода, а именно: echo OK! | C:\php5\php.exe, т.е. вывожу что-то, раздваивая основной поток перенаправления в файл. Пробуйте, должно работать.

   
 
 автор: Shorr Kan   (23.03.2006 в 16:10)   письмо автору
 
   для: Денис   (23.03.2006 в 16:07)
 

Вы хотите сказать, что то что в php.net/exec столько комментариев - и почти в каждом пример с кодом... у них тоже ничего не вышло, хотя они эти примеры и писали? Я-то надеялся, что только у меня не работает...
Хотя... в любом справочнике об exec, system и фоновом режиме - написано...

   
 
 автор: Денис   (23.03.2006 в 16:07)   письмо автору
 
   для: Shorr Kan   (23.03.2006 в 14:31)
 

Теперь понятно. С моей точки зрения, вердикт будет следующим: на данный момент РНР не сможет решить эту задачу - нужен сторонний Application server, на который можно возложить часть работы. Если условие "не cron", и чтобы "в фоновом режиме", эту задачу решить на данном этапе развития РНР нельзя. Это моя точка зрения, как человека, работающего около года с этим языком.

   
 
 автор: Shorr Kan   (23.03.2006 в 14:31)   письмо автору
 
   для: Денис   (23.03.2006 в 11:40)
 

Ответ не тот, вы правы.

Задачу, в данном случае, можно поставить так. Вот один из комментариев:


19-Mar-2005 07:13 
I noticed that a couple of contributers planned on having threads running in background while operation continues. 

If you have a script that will function for itself there is an easy solution: call it through fsockopen (request to webserver) and do not wait for the answer. To make sure process is called correctly on all operating systems I had to add an fgets but break after first couple of bytes.

example main script

<?php
   
echo "This is main thread, returning immediately";
   
$fp fsockopen( <addyourcalltoscript> );
     
//fputs($fp, <yourvariablestosend>);
     
while(!feof($fp)){
         
fgets($fp128);
         break;
     }
   
fclose($fp);
?>

example child script

<?php
   
// make sure script runs without stopping //
     
set_time_limit(0);  
     
ignore_user_abort(true);
   
// your code
?> 


Обратите внимание на: call it through fsockopen (request to webserver) and do not wait for the answer

Суть кода - ясна и понятна, и работать это действительно должно. Но оно не работает. Либо дочерний скрипт не выполняется, либо родительский - ждет его выполнения. При этом - в disable_functions - пусто.
Вышеприведенный комментарий - не работает, хотя должен. Все аналоги кода в этом комментарии - тоже не работают.

Задача - запустить скрипт посетителем (не cron'ом) в фоновом режиме. Посетитель скрипт запускает и продолжает работать (может даже отключиться... или бродить по сайту), а скрипт выполняется сервером, независимо от посетителя.
Это называется "фоновым режимом". Да, это выполняет крон, да, кроном это сделать можно. Да... Но я хочу добиться работы именно запуска фонового скрипта - по http-запросу. То есть, мне не нужен обход проблемы. Мне нужно решение задачи "запустить дочерний скрипт в фоновом режиме, при заходе на сайт". Обходить эту задачу другим путём - всё равно что советовать человеку, незнающему дорогу, но желающему дойти до другого города пешком - сесть на электричку.

Для проверки, в дочернем скрипте можно использовать код записи в файл цифирки циклом до сотни, со sleep(1); - это задержит время выполнения дочернего скрипта на 100 секунд, но не должно задержать и на секунду человека, зашедшего на родительский скрипт.

   
 
 автор: Денис   (23.03.2006 в 11:40)   письмо автору
 
   для: Shorr Kan   (22.03.2006 в 19:14)
 

В этом случает вам поможет cron. Вы пишете скрипт, после отсылаете cron-демону команду на то, чтобы выполнялся этот скрипт(в любое удобное для вас время). Сервер будет работать с одним файлом, а cron в указанное ему время будет запускать скрипт в указанном ему файле. Таким образом, система не будет тормозить, так как это будут совершенно разные потоки.
Если и в этот раз ответ не совсем тот, который вам нужно, если ваша задача не является глобальным секретом представьте ее на обсуждение, т.е. что вы хотите сделать изначально и что хотите получить в результате - возможно вам преложать другой вариант, другой обход проблемы.

   

Сообщения:  [1-10]    [11-20]  [21-23] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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