PHP exec 函数运行不正常
PHP exec function does not work well
首先使用windows.
我有以下代码:
index.php
<?php
error_reporting(E_ALL);
$tiempo_inicio = microtime(true);
exec('C:\wamp\bin\php\php5.5.12\php.exe -e C:\wamp\www\mail.php > /dev/null &');
$tiempo_fin = microtime(true);
echo ($tiempo_fin - $tiempo_inicio);
?>
Mail.php
<?php
$tiempo_inicio = microtime(true);
$logs = fopen("test.txt","a+");
sleep(2);
$tiempo_fin = microtime(true);
fwrite($logs, ($tiempo_fin - $tiempo_inicio)."
");
sleep(4);
$tiempo_fin = microtime(true);
fwrite($logs, ($tiempo_fin - $tiempo_inicio)."
");
sleep(6);
$tiempo_fin = microtime(true);
fwrite($logs, ($tiempo_fin - $tiempo_inicio)."
");
echo 'fin';
?>
但我希望它不起作用,因为我想要的是运行后台文件而不需要用户等待这个文件完成。
我做错了什么?
你说的是非阻塞执行(一个进程不等待另一个进程。PHP真的不能很好地做到这一点(无论如何),因为它是围绕单个线程设计的.不知道你的过程是做什么的我不能准确地评论这个但是我可以提出一些建议
我过去在 Windows 上使用 pclose
/popen
和 Windows 启动命令而不是 exec
取得了成功。这样做的缺点是很难对您调用的程序中的任何错误做出反应。
我会尝试这样的事情(我今天不在机器上测试):
$command_string = 'C:\wamp\bin\php\php5.5.12\php.exe -f "C:\wamp\www\mail.php" -- variablestopass';
pclose(popen("start /B ".$command_string, 'r'));
首先使用windows.
我有以下代码:
index.php
<?php
error_reporting(E_ALL);
$tiempo_inicio = microtime(true);
exec('C:\wamp\bin\php\php5.5.12\php.exe -e C:\wamp\www\mail.php > /dev/null &');
$tiempo_fin = microtime(true);
echo ($tiempo_fin - $tiempo_inicio);
?>
Mail.php
<?php
$tiempo_inicio = microtime(true);
$logs = fopen("test.txt","a+");
sleep(2);
$tiempo_fin = microtime(true);
fwrite($logs, ($tiempo_fin - $tiempo_inicio)."
");
sleep(4);
$tiempo_fin = microtime(true);
fwrite($logs, ($tiempo_fin - $tiempo_inicio)."
");
sleep(6);
$tiempo_fin = microtime(true);
fwrite($logs, ($tiempo_fin - $tiempo_inicio)."
");
echo 'fin';
?>
但我希望它不起作用,因为我想要的是运行后台文件而不需要用户等待这个文件完成。
我做错了什么?
你说的是非阻塞执行(一个进程不等待另一个进程。PHP真的不能很好地做到这一点(无论如何),因为它是围绕单个线程设计的.不知道你的过程是做什么的我不能准确地评论这个但是我可以提出一些建议
我过去在 Windows 上使用 pclose
/popen
和 Windows 启动命令而不是 exec
取得了成功。这样做的缺点是很难对您调用的程序中的任何错误做出反应。
我会尝试这样的事情(我今天不在机器上测试):
$command_string = 'C:\wamp\bin\php\php5.5.12\php.exe -f "C:\wamp\www\mail.php" -- variablestopass';
pclose(popen("start /B ".$command_string, 'r'));