php - 如何在 Apache2 中使用 php 执行 shell 脚本?
问题描述
我是 Apache2 的初学者。
我想做的事
・我想在 apache2 中使用 raspberry pi 3 用 PHP 执行 shell 脚本。
我做了什么为了做上面。
- 我在树莓派上安装了 apache2 和 php7。
我把
index.php
写的那个hello world
放在/var/www/html/
目录里。
脚本如下。/var/www/html/index.php
<?php echo('hello world'); ?>
我确保可以
hello world
从连接到树莓派的本地 PC 的浏览器中看到。- 我更改了 PHP 脚本以执行 shell 脚本。脚本如下。
/var/www/html/index.php
<?php exec('sh /var/pi/blink.sh'); ?>
错误
・Apache2 不执行shell 脚本。
尝试
- 我让
www-data
用户有权在没有密码的情况下执行它。
・<code>$ sudo visudo # => /etc/sudoers.tmp
・我添加www-data ALL=NOPASSWD:/bin/sh
到上面的文件中。 - 我确保我可以通过更改权限来运行树莓派中的
sh /var/pi/blink.sh
文件,我想在树莓派的 Apache2 中运行该文件。 - 我添加
sudo
了index.php
看起来像<?php exec('sudo sh /var/pi/blink.sh'); ?>
但是,没有任何改变。
我正在使用的设备
・Mac book air (OSX 10.13.6)
・Raspberry pi (Model B) with Raspbian (Raspbian GNU/Linux 9 (stretch)。
解决方案
您是否检查过以确保您的脚本具有适当的权限?通常 755 将适用于 PHP 试图执行的外部脚本。另外,您是否尝试过 shell_exec() 而不是 exec()? http://php.net/manual/en/function.shell-exec.php
推荐阅读
- flutter - 'bool?' 类型的值 不能分配给“bool”类型的变量。扑
- firebase - 无法获得正确的 Firebase 存储包
- c# - 除非您在启用热重载的情况下进行更改,否则 PDF 不会呈现 (PDFView4Net)
- c# - 检查多个组合框和文本框的内容
- xamarin.ios - Xamarin.iOS-如何实现步进进度条
- html - 跳转到页面的特定部分,但不显示在浏览器窗口的顶部
- r - 如何更改R中表的结构?我想像下面附上的图片那样改变它
- docker - 如何在部署 docker 镜像时向 Heroku CLI 命令添加参数,就像我们在 `docker build` 和 `docker run` 中所做的那样?
- c++ - 是否可以延长传递给函数的右值的寿命?
- angular - 如何在 SPA 应用程序中使用支付 3rd 方应用程序 iframe 时回调 API 服务