我正在尝试开发一个小型网站,使用连接到我家里的 mac mini 的网络摄像头拍摄我家的快照。 mac mini 正在运行 OS X Server。网络摄像头是罗技 HD Pro 网络摄像头 C920(USB 连接)。它基于 PHP 和 HTML5(除 CSS 外没有其他代码)。
我的开发机器是使用内置 iSight 摄像头的 MacBook Pro。它不运行OS X 服务器;我手动启用了 apache 和 PHP。在我的笔记本电脑上开发网站时,一切都完美无缺。当我在我的 mac mini 上安装它时,imagesnap 程序会打开相机但从未完成;我必须手动终止进程,并且永远不会创建快照。
记录了以下错误:
imagesnap[2363]: *** QTCaptureSession warning: Session received the following error while decompressing video: Error Domain=NSOSStatusErrorDomain Code=-12903 "The operation couldn’t be completed. (OSStatus error -12903.)". Make sure that the formats of all video outputs are properly configured.
这仅在直接从站点运行时才有效。如果我从命令行运行相同的程序,它工作得很好......甚至以 _www 用户身份运行它!
sudo -u _www bin/imagesnap images/snapshot_$DATE.jpg
这是在 PHP 中执行调用的代码:
<?php
if(isset($_POST['submit'])) {
system('bin/run_imagesnap.sh', $return_value);
if ($return_value) {
echo "The command failed.";
}
}
?>
我无法弄清楚如何将日期写入输出文件名(我是 PHP 菜鸟),所以我使用 bash 脚本帮我完成了(我更擅长 BASH):
#!/bin/bash
DATE=`date +"%m-%d-%y_%T"`
bin/imagesnap -q -w 3 images/snapshot_$DATE.jpg
我还尝试了 exec()、passthru() 和 shell_exec(),结果都相同。
最后,我还尝试了以下方法:创建 test.php,放入代码:
<?php
system('bin/run_imagesnap.sh', $return_value);
if ($return_value) {
echo "The command failed.";
}
?>
并使用 php-cli 作为 _www 用户在命令行上运行它:
sudo -u _www php test.php
而且它也工作得很好(创建了快照文件并且没有给出错误)。
我想这可能与 OS X 服务器应用程序有关,但谷歌搜索没有返回任何结果。
我被难住了。当我在浏览器上运行完全相同的代码但使用完全相同的工具和用户在命令行上运行良好时,为什么它会中断?
最佳答案
不知道这是否是正确的方法,但我最终使用 sudo 来运行脚本。
visudo
然后为 _www 用户提供对脚本的无密码 root 访问权限:
_www ALL=NOPASSWD: /path/to/script
现在可以了。剥猫皮的方法总是不止一种..
关于php - 使用 Mac 服务器在 PHP 中运行 imagesnap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485267/