apache PHP exec()使用字符串调用带命令行参数的程序

mm9b1k5b  于 2023-03-13  发布在  Apache
关注(0)|答案(1)|浏览(112)

我的网页调用php文件来执行gphoto 2。

<?php
$cmdexec='gphoto2 --auto-detect --set-config shutterspeed=' . $_POST["shutterspeed"] .' --set-config iso=' . $_POST["iso"] . ' --filename=/home/photos/' . $_POST["filename"] . ' --capture-image-and-download';
echo '<pre>The command is: '.$cmdexec.'<br>';
$photo=exec($cmdexec, $cmdrtn);
?>

回声返回:
命令为:gphoto 2--自动检测--设置配置快门速度=40 --设置配置iso=5 --文件名=/home/photos/20230310154522.jpg --捕获图像并下载
如果我复制该命令(从“gphoto 2”到行尾)并粘贴到命令行,它会完美地工作(相机被触发,文件被下载)。如果我在PHP交互式环境中执行它,情况也是如此。但在网页上,我得到的结果是:
阵列([0] =〉型号端口[1] =〉----------------------------------------------------------- [2] =〉佳能数码反叛XT(正常模式)usb:002,007)
我可以在命令行中输入gphoto 2--auto-detect而不输入其他参数,得到相同的结果。显然,gphoto 2正在执行,但不是我想要的方式。这表明其余参数要么没有传递给gphoto 2,要么以gphoto 2忽略它们的方式传递。
我应该这样调用exec()吗?我做错了什么?
注1:这是一个离线的本地主机网站,因此命令注入不是问题。注2:Xubuntu 22.04,Apache 2 2.4.52,PHP 8.1,gphoto 2 2.5.27注意事项3:这段代码曾经在这台机器上工作。在一次升级后它坏了。注意4:我还尝试过转义字符串中的空格(例如:gphoto 2--自动检测--设置配置......等),没有任何改变。

bqf10yzr

bqf10yzr1#

问题原来是USB设备的权限问题。我用以下代码修复了它:

chmod u+s /usr/bin/gphoto2

相关问题