【问题标题】:shell_exec() always returning an empty stringshell_exec() 总是返回一个空字符串
【发布时间】:2018-11-18 09:44:48
【问题描述】:

我正在尝试在我的 Android 手机中创建服务器。我无法从我的 PHP 代码中执行任何 shell 脚本。

代码如下:

//index.php
<?php
$output=shell_exec("sdcard/htdocs/myscript.sh 2>&1");
if(!$output){
  echo "Failed";
}else{
  echo $output;
}
?>

//myscript.sh
cd sdcard/htdocs/images
ls -t1 | head -n 1

脚本在终端模拟器中运行良好。我也尝试更改脚本文件的权限,但没有奏效。我不知道它是否需要超级用户权限才能在 PHP 代码中执行 shell 脚本。

整个代码用于返回在 images 目录中创建的最后一个文件的文件名。

需要建议以使此代码正常工作。还有其他方法可以执行所需的工作吗?

【问题讨论】:

  • 您的 PHP 配置中是否启用了 shell_exec()
  • 安全模式已关闭,php.ini 中 disable_functions 右侧没有任何内容
  • 您可能想尝试另一个提供更多诊断功能的程序执行功能,例如exec()。但是,您的相对路径表明该脚本托管在 /mnt 或类似位置,这是放置脚本的一个奇怪的地方......我敢打赌它只是找不到脚本,因为路径无效。

标签: php linux apache terminal server


【解决方案1】:

确保你运行了什么

chmod a+x sdcard/htdocs/myscript.sh

在你的文件上。

$output 也不是布尔值。

【讨论】:

    【解决方案2】:

    您的代码看起来不错。脚本执行不需要超级用户权限。您应该打开 PHP 错误输出或检查 PHP 错误日志文件。我敢打赌你会在那里找到原因。如果没有,请重新检查目录和文件权限:

    ./index.php
    ./sdcard/htdocs/myscript.sh
    ./sdcard/htdocs/images
    

    sdcardsdcard/htdocs 需要可执行权限。 sdcard/htdocs/images 需要可执行和读取权限(ls in myscript.sh),sdcard/htdocs/myscript.sh 也是如此。但我想这是另外一回事,因为应该显示权限错误(2&gt;&amp;1)。


    编辑

    您可以使用 PHP 找到最后修改的文件,无需运行另一个进程。采取以下两项之一:

    $images = glob('sdcard/htdocs/images/*');
    $images = array_combine(array_map('filemtime', $images), $images);
    asort($images);
    echo $lastModifiedImage = end($images);
    

    或者使用更少的数组操作:

    $images = glob('sdcard/htdocs/images/*');
    array_reduce($images, function($previous, $element) use (&$found) {
        $mtime = filemtime($element);
        $found = $previous < $mtime ? $found : $element;
        return $previous < $mtime ? $mtime : $previous;
    }, 0);
    echo $found;
    

    【讨论】:

      【解决方案3】:

      sdcard 和 sdcard/htdocs 需要可执行权限。 sdcard/htdocs/images 需要可执行和读取权限(myscript.sh 中的 ls),sdcard/htdocs/myscript.sh 也是如此。但我想这是另外一回事,因为应该显示权限错误 (2>&1)。

      可能是胖子!

      【讨论】:

      • 这应该是一个评论,因为你没有回答这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 2019-07-25
      相关资源
      最近更新 更多