shell_exec()总是返回一个空字符串

时间:2018-06-08 10:38:59

标签: php linux apache terminal server

我正在尝试在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目录中创建的最后一个文件的文件名。

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

3 个答案:

答案 0 :(得分:0)

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

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

sdcardsdcard/htdocs需要可执行的持久性。 sdcard/htdocs/images需要可执行和读取权限(ls中为myscript.sh),sdcard/htdocs/myscript.sh也是如此。但我想这是别的,因为应该显示权限错误(2>&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;

答案 1 :(得分:0)

确保您运行的是什么

chmod a+x sdcard/htdocs/myscript.sh

在您的档案上。

$ output也不是布尔值。

答案 2 :(得分:-1)

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

可能是FAT!