首页 > 解决方案 > PHP 7.3.2 shell_exec 输出突然停止工作

问题描述

我要疯了,我有一个PHP文件来定位我网络上的其他树莓派计算机,我可以通过这个文件直接连接,这工作得很好,但突然无缘无故停止工作,我不能似乎知道为什么。

我正在使用Nginx,最近将我的 PHP 升级到PHP 7.3.19-1~deb10u1 (cli)(构建时间:2020 年 7 月 5 日,使用 sudo apt install 升级。

PHP

<a class='myButton' id="scan" href='scan.php' target='_self'>SCAN NETWORK</a>
</center>
    <p></p>
<?php
$output = shell_exec("sudo arp-scan --localnet | awk '/b8:27:/ { print $1 }'");
$output = shell_exec("sudo arp-scan --localnet | awk '/dc:a6:/ { print $1 }'");
$a = explode(PHP_EOL, $output);
foreach ($a as $b) {if ($b != " " and !empty($b)) { echo '<div class="col2" id="col2"> <a id="scan" href="http://' . $b . '/web/" target="_parent"><img id="logo" src="http://' . $b . '/led/assets/logo.png?t=" . time();"> </a></div>' ; echo "<br /> <a class='myButton' href='http://$b/led/numbers/1.php'>1</a> &nbsp; <a class='myButton' href='http://$b/led/numbers/2.php'>2</a> &nbsp; <a class='myButton' href='http://$b/led/numbers/3.php'>3</a> &nbsp; <a class='myButton' href='http://$b/led/numbers/4.php'>4</a> &nbsp; <a class='myButton' href='http://$b/led/numbers/5.php'>5</a>  &nbsp; <a class='myButton' href='http://$b/led/numbers/6.php'>6</a>&nbsp;  "; }}
?>

我为所有需要的命令授予了visudo权限。

www-data ALL=NOPASSWD: /usr/bin/sudo
www-data ALL=NOPASSWD: /usr/bin/print
www-data ALL=NOPASSWD: /usr/bin/awk
www-data ALL=NOPASSWD: /usr/sbin/arp-scan
www-data ALL=NOPASSWD: /usr/bin/php
www-data ALL=NOPASSWD: /usr/sbin/php-fpm7.3

我还检查了我的php.ini文件,看看是否有任何更改,但文件仍然保持不变。

disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,

有人可以为我提供有关如何解决此问题的想法吗?

标签: phpshellshell-execvisudo

解决方案


没关系 PHP 7.3.19-1~deb10u1 (cli) 上确实发生了一些变化,我通过将代码绑定到一行来解决了这个问题。

    <?php
    $output = shell_exec("sudo arp-scan --localnet | awk '/dc:a6:/ { print $1 }' && sudo arp-scan --localnet | awk '/b8:27:/ { print $1 }'");
    $a = explode(PHP_EOL, $output);
    foreach ($a as $b) {if ($b != " " and !empty($b)) { echo '<div class="col2" id="col2"> <a id="scan" href="http://' . $b . '/web/" target="_parent"><img id="logo" src="http://' . $b . '/led/assets/logo.png?t=" . time();"> </a></div>' ; echo "<br /> <a class='myButton' href='http://$b/led/numbers/1.php'>1</a> &nbsp; <a class='myButton' href='http://$b/led/numbers/2.php'>2</a> &nbsp; <a class='myButton' href='http://$b/led/numbers/3.php'>3</a> &nbsp; <a class='myButton' href='http://$b/led/numbers/4.php'>4</a> &nbsp; <a class='myButton' href='http://$b/led/numbers/5.php'>5</a>  &nbsp; <a class='myButton' href='http://$b/led/numbers/6.php'>6</a>&nbsp;  "; }}
?>

有趣的部分是在其中一个树莓派上,我没有升级 PHP 版本,以前的代码仍然可以正常工作。


推荐阅读