【发布时间】:2013-04-30 01:23:43
【问题描述】:
我正在努力使用 PHP 的 exec() 让 php 文件在后台运行。作为第一次测试,我尝试了:
exec("ls -l > logfile.txt 2> errfile.txt &");
效果很好。 logfile.txt 被一个目录列表填充。
根据 php 文档中的说明,由于 exec 启动了在后台运行的进程,标准输出(和标准错误)被重定向到文件。
现在,我试试
exec("/usr/bin/php -f /path/to/my.php > logfile.txt 2> errorfile.txt &");
似乎什么都没有发生。
这是我正在尝试的测试文件:
alpha.php
<?php
$version="a";
// Go do something we do not need to wait for.
exec("/usr/bin/php -f /path/to/beta.php > logfile.txt 2> errorfile.txt &");
?>
<html>
<head><title>Test</title></head>
<body>
<p>This is Alpha version <?php echo $version; ?></p>
</body>
</html>
beta.php
<?php
if (!($fp = fopen('/home/johnst12/public_html/workshops/admin/betadata.txt', 'w'))) { exit;}
fprintf($fp, "Proof that Beta executed.");
fclose($fp);
?>
如果我直接运行 beta.php,它可以正常工作。 Betadata.txt 收到消息。
如果我运行 alpha.php 来启动 beta.php,则不会创建 betadata.txt。 logfile.txt 和 errorfile.txt 保持为空(预期)。
我确定 php 的路径和我的 php 文件的路径是正确的。
在谷歌上搜索澄清并没有结果。几个共同的主题似乎是 (a) 资源不足? (b) 对目标 php 文件没有权限?资源不足似乎不太可能。脚本的权限是全局读取 644 (rw-r--r--)。我尝试添加执行(755)以防万一。它没有任何区别。
PHP 版本 5.3.21 Linux/Apache 系统。 安全模式关闭
我错过了什么?谢谢。
【问题讨论】:
-
该用户有权限写入该用户所在的文件夹。尝试运行 whoami 并在服务器中 su - "theuser" 并触摸文件