gpt4 book ai didi

shell_exec() 调用 PHP 文件的 PHP 路径

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:21 25 4
gpt4 key购买 nike

我正在尝试使用 shell_exec() 并且很难理解如何使用它。我引用了这个页面:Is there a way to use shell_exec without waiting for the command to complete? .

我创建了两个 PHP 文件:

shell_exec.php

<?php 
shell_exec('php ' . __DIR__ . '/log.php > /dev/null 2>/dev/null &');
?>

log.php

<?php
$file = __DIR__ . '/log.txt';
$current = time() . ": sample text\r\n";
file_put_contents($file, $current,FILE_APPEND);
?>

然后我从浏览器访问了 shell_exec.php 的页面。我希望它运行 log.php 并创建一个文件。然而,什么也没有发生。

我怀疑函数中指定的php路径,即上面代码中的php,在不同的操作系统中是不同的。我目前正在 Windows 中进行测试,所以这可能是它不起作用的原因。但我不是 100% 确定。

如果是这样,我如何找到 php 路径并在我的环境中指定它?这是否也意味着如果我分发一个使用 shell_exec() 的脚本并调用一个 php 脚本,我是否必须编写一些代码来找出 php 路径?那么,有什么好的方法吗?

最佳答案

If so, how can I find the php path and specify it in my environment? Also does that mean that if I distribute a script which uses shell_exec()...

不幸的是,是的。您分发脚本的环境必须有 命令行 PHP(不一定与 Web 服务器使用的 PHP 相同 - 它可能是不同的版本)。

而且没有简单的方法可以“找到”它。

所以您需要做的是,明确声明(分发时)PHP 命令行可执行文件必须位于 PATH 中。

此时,shell_exec('php -q -f yourfile...') 应该可以工作了。

您可以将输出重定向到一个文件(如果需要,总是相同的),如果没有错误则将其删除。否则文件将显示发生了什么错误,这可能很有用。

更新:第一次调试时,不要重定向输出,但尝试:

<?php
Header("Content-Type: text/plain");
error_reporting(E_ALL);
print shell_exec('php "' . __DIR__ . '/log.php" 2>&1'); // > /dev/null 2>/dev/null &');
?>

通过这种方式,您可以查看该命令是否遇到其他问题,例如一开始就没有创建 log.txt 文件的权限。

关于shell_exec() 调用 PHP 文件的 PHP 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12396636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com