к атцам php

EVPATIY

вопрос: запустить скрипт test.php, находящийся в данной директории в фоновом режиме (system, exec, shell_exec or whatsoever) при этом php не установлен как модуль.
спасибо.

abrek


php test.php &


или я что-то не понял?

EVPATIY

ага, наверное, не понял - речь идет про фоновый режим, т.е. когда скрипт запускается в shell, а на вывод ничего не идет, кроме, скажем, последней строки вывода (результата работы скрипта). Обычно такое делается коммандами вида
<?
system ('php -f test.php');
?>
но в моем случае чего-то не так - т.е. наверное потому что php не установлен как модуль (т.е. в приведенном примере, наверное, не работает 'php -f..)

EVPATIY

<?
`/php/php.exe -f ./test.php 2>&1`
?>
запускает кучу процессов и нифига не выполняет test.php

abrek

> /php/php.exe -f ./test.php 2>&1
это для какой ОС

Ivan8209

Это, видимо, CygWin.
---
...Я работаю антинаучным аферистом...

EVPATIY

просто win2k

Ivan8209

Хм...
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
C:\>/winnt/system32/debug
-q
C:\>_
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
Да-а-а...
Однако!
---
...Я работаю антинаучным аферистом...

abrek

а это:

2>&1

кто должен понимать в твоей win2k?
запусти из своего шелла такую команду, и увидишь, начинает ли хотя бы выполняться твой скрипт
под словами "запустить в фоне" ты что-то своё понимаешь, я так понял, ты хочешь подождать окончания выполнения скрипта, взять его вывод, вставить в документ и только потом продожить выполнение основного потока. это не "в фоне"

Ivan8209

Что из ДОСовых воспроизводимо пишет на stderr?
Чтобы можно было проверить на живом.
---
...Я работаю антинаучным аферистом...

EVPATIY

мне посоветовали следующее:
UNIX: /path/php -f /path/a.php &
WIN: START /MIN disk:\path\php -f disk:\path\a.php
я попробовал на win
system ('START /MIN c:\php\php.exe -f c:\php_test\a.php');
`START /MIN c:\php\php.exe -f c:\php_test\a.php`;
`START /MIN c:\php\php -f c:\php_test\a.php`;
`START /MIN c:\\php\\php.exe -f c:\\php_test\\a.php`;
`START /MIN c:\\php\\php -f c:\\php_test\\a.php`;
ни один из вариантов не срабатывает. чувствую себя ламером ) Ф1!

EVPATIY

из командной строки винды выполняется
c:\php\php.exe -f c:\php_test\s.php
и
c:\php\php.exe -f c:\php_test\a.php
т.е. и родительский и дочерний.

abrek

по каким признакам ты различаешь, срабатывает или нет?

EVPATIY

скрипт a.php создает новый файл test15.txt ^
как узнать расположение php на удаленном сервере (у хостера)?
щас пробую на unix

Ivan8209

start /min prog parm
_должен_, просто _обязан_ работать!
Ты, видимо, чего-то не замечаешь.
---
...Я работаю антинаучным аферистом...

EVPATIY

прямо в таком виде и писать в пхп-скрипте или с кавычками там или `?

Ivan8209

А как ты вызываешь внешнюю?
execve? system?
Как вызываешь, так и пиши.
Лучше вызывай через шелл, заморочек с путями не будет.
---
...Я работаю антинаучным аферистом...

Ivan8209

man which ?
---
...Я работаю антинаучным аферистом...

EVPATIY

вид родительского скрипта:
<?
`START /MIN c:\PHP\php -f c:\php_test\a.php`;
?>
дочерний - a.php - не выполняется
при этом в списке процессов появляется много php.exe и типа он все выполняется и выполняется...

EVPATIY

прости не понял по поводу man which

Ivan8209

А system что даёт?
Я php не знаю, так что сейчас поищу справку...
---
...Я работаю антинаучным аферистом...

EVPATIY

<?
system ('START /MIN c:\PHP\php -f c:\php_test\a.php');
?>
дает АБСОЛЮТНО то же самое.

Ivan8209

А если по классике?
http://www.php.net/manual/ru/function.pcntl-fork.php
http://www.php.net/manual/ru/function.pcntl-exec.php
---
...Я работаю антинаучным аферистом...

Ivan8209

А что даёт это
http://www.php.net/manual/ru/function.system.php
и это
http://www.php.net/manual/ru/function.exec.php
?
---
...Я работаю антинаучным аферистом...

EVPATIY

system и exec запускают процессы.
например на винде
<?
echo system('dir');
?>
выдает список в текущей директории и это у меня работает. словом, он (system) выполняет команды. аналогично с exec/ другие твои два пример вроде бы к делу не относятся. Мне нужно просто запустить один скипт из другого в фоновом режиме. Т.е. чтобы он работал на сервере, пока я сплю )

Ivan8209

Почему не относятся?
if(!(child=fork execve(...) ;
child содержит PID дочернего.
---
...Я работаю антинаучным аферистом...

alex-kras

Работает
pclose(popen("start /MIN php -f c:\a.php", "r";

Ivan8209

Так, а почему нельзя
system("start /min php -f file")
?
---
...Я работаю антинаучным аферистом...

EVPATIY

не выполняется.

EVPATIY

ну никак он не запускается. дело в том, что php Не прописан как cli (cgi)...
как еще можно? хостер не говорит путь к пхп.ехе

sergey_m

Лучше вызывай через шелл, заморочек с путями не будет.

insecure

Ivan8209

Не понял?
А что, CGI из-под root?
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
Оставить комментарий
Имя или ник:
Комментарий: