关于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命令问题的主要内容,如果未能解决你的问题,请参考以下文章

从 php 在命名管道上运行 shell 命令

如何让php执行shell

从 PHP 执行 shell 命令

shell从入门到精通关于内建命令(内置命令)和外建命令

为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?

shell编程概念介绍及变量定义--关于脚本运行与shell进程之间的关系