我的网页调用了一个php文件来执行gphoto2。这是 PHP
<?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); ?>
回声返回:
命令是:gphoto2 --auto-detect --set-config shutterspeed=40 --set-config iso=5 --filename=/home/photos/20230310154522.jpg --capture-image-and-download
如果我复制该命令(从“gphoto2”到行尾)并将其粘贴到命令行,它会完美运行(触发相机并下载文件。)如果我从PHP交互环境。但是在网页上我得到的结果是:
数组 ( [0] => 模型端口 [1] => ------------------------------------------ -------------- [2] => Canon Digital Rebel XT(正常模式)usb:002,007 )
我可以通过键入 gphoto2 --auto-detect 从命令行获得相同的结果,而无需所有其他参数。显然,gphoto2 正在执行,但不是我想要的方式。这表明其余参数要么没有传递给 gphoto2,要么以 gphoto2 忽略它们的方式传递。
我应该这样调用 exec() 吗?我做错了什么?
注 1:这是一个离线的本地主机网站,因此命令注入不是问题。 注2:Xubuntu 22.04、Apache2 2.4.52、PHP 8.1、gphoto2 2.5.27 注意 3:此代码用于在本机上工作。它在其中一次升级后坏了。 注4:我也试过转义字符串中的空格(例如:gphoto2 --auto-detect --set-config ...等),没有任何变化。