【发布时间】:2012-03-04 09:01:39
【问题描述】:
于是我从http://php.net/manual/en/function.exec.php找到了一个函数
function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}
Windows 使用情况:
pclose(popen('start /B php path/to/background_cron.php', 'r'));
Unix 用法:
exec('php path/to/background_cron.php >> path/to/background_error.log &')
但是当这些行被调用时,实际上什么都没有发生(等待 5 分钟左右之后)。难道我做错了什么?在激活这些行之前,我有一个 file_exists 检查我的 path/to/background_cron.php 是否存在,如果不存在,它将返回错误。
在实时 unix 服务器上,所有者、组、公共 (0755) 的所有文件夹权限设置为写入、读取、执行,所有者、组、公共 (644) 的文件权限设置为读取。在 unix 命令运行后,background_log 为空,它创建了 4 个新的空白行 (\n),但不返回任何期望
【问题讨论】:
-
我还稍微修改了函数,添加了一个 try catch 以查看是否捕获了任何异常,但它很清楚。
-
我已经将它设置为绝对值,当我在 apache windows 服务器上测试它时,它正在从 C:\ 驱动器调用 background_cron,当我在实时服务器上运行代码时它正在从 unix 服务器上的网站域调用它
标签: php windows unix exec popen