关于php运行shell命令问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于php运行shell命令问题相关的知识,希望对你有一定的参考价值。
刚才你的回答,不管用啊,提交后显示array()。。。。。没有执行。。 还有就是我想的是不用输入命令。命令是预设好的,直接点击就执行
参考技术A 命令没有执行返回内容,就显示未空array();127394775这是群号
为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?
【中文标题】为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?【英文标题】:Why does this PHP script with a shell_exec call run from the command line in Windows 10, but not the browser/localhost?为什么这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机? 【发布时间】:2021-09-30 16:52:07 【问题描述】:我在 Windows 10 上使用 XAMPP,并尝试运行一个简单的 PHP 脚本,该脚本使用 shell_exec
函数在同一目录中调用一个简单的 R 脚本。这是 PHP index.php
文件:
<?php
echo shell_exec('Rscript test.R');
这是test.R
文件:
print("Hello, World!")
从命令行(即 Windows 的 Git),当我在文件夹中运行 php index.php
时,我得到以下输出:
[1] "Hello, World!"
但是,当我通过 XAMPP 和 localhost
从 Web 浏览器运行 index.php
时,我在页面上看不到任何内容。起初,我认为这可能是权限问题,因此我授予文件夹上所有用户的完全控制访问权限,但似乎没有任何改变。
关于如何从浏览器中获得此功能的任何想法?谢谢。
【问题讨论】:
我会亲自查看 PHP 日志文件,看看是否有错误。您也可以显示它们(参见stackify.com/display-php-errors)。可能shell_exec
在 Apache 的 PHP INI 中被禁用。它也可能与“安全模式”有关。我相信你可以在论坛上找到答案。祝你好运!
Patrick,非常感谢您的评论并为我指明了方向。不幸的是,我不确定这些都是问题所在。我查看了php.ini
文件,没有为disable_functions
指令列出任何内容,并且在任何地方都没有提到shell_exec
。此外,我将链接文章中推荐的三个错误报告行添加到我的 PHP 脚本中,但没有显示任何内容。最后,看起来 PHP 中的“安全模式”在 5.4 中被禁用,而我使用的是 PHP 7.4 (php.adamharvey.name/manual/en/features.safe-mode.php)。还有其他想法吗?谢谢。
【参考方案1】:
找到了我遇到的问题的答案。显然,即使 Rscript
是我的 Windows 10 PATH
变量的一部分,当我尝试在 PHP 中通过 shell_exec
执行 R 脚本时,我必须拥有 Rscript 可执行文件的完整路径(我猜是因为 PHP脚本/Apache 服务器不知道路径变量)。
我更改了shell_exec
函数调用如下,它起作用了:
echo shell_exec('"C:\Program Files\R\R-4.1.0\bin\Rscript" test.R');
这是帮助我解决这个问题的 SO 帖子的链接:
shell_exec does not execute from browser requests
【讨论】:
以上是关于关于php运行shell命令问题的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?