我正在尝试在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目录中创建的最后一个文件的文件名。
需要建议使这段代码有效。还有其他方法可以执行所需的工作吗?
答案 0 :(得分:0)
您的代码看起来很好。脚本执行不需要超级用户权限。您应该打开PHP错误输出或检查PHP错误日志文件。我打赌你找到原因。如果没有,请重新检查目录和文件权限:
./index.php
./sdcard/htdocs/myscript.sh
./sdcard/htdocs/images
sdcard
和sdcard/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!