使用SWIG/PHP控制Raspberry Pi(mjpg拖缆)上的应用程序

使用SWIG/PHP控制Raspberry Pi(mjpg拖缆)上的应用程序,php,raspberry-pi,swig,lighttpd,Php,Raspberry Pi,Swig,Lighttpd,我尝试通过raspberry pi上的swig/c/php接口启动“mjpg streamer”。之前,通过swig/c/php成功控制了两个应用程序: 通过i2cset进行GPIO控制 通过wiringPI实现GPIO控制 对于“mjpg拖缆”,我使用了以下代码: 并像GPIO控件一样运行“make” swig -Wextra -php camera.i gcc -fpic -c `php-config --includes` camera.c camera_wrap.

我尝试通过raspberry pi上的swig/c/php接口启动“mjpg streamer”。之前,通过swig/c/php成功控制了两个应用程序:

  • 通过i2cset进行GPIO控制
  • 通过wiringPI实现GPIO控制
对于“mjpg拖缆”,我使用了以下代码:

并像GPIO控件一样运行“make”

    swig -Wextra -php camera.i
    gcc -fpic -c `php-config --includes` camera.c camera_wrap.c
    gcc -shared camera_wrap.o camera.o -o camera.so
    cp camera.so `php-config --extension-dir`
    service lighttpd restart

最后,我运行'chmod 4755/usr/local/lib/input_raspicam.so'和'chmod 4755/usr/local/lib/output_http.so',就像我启用'i2cset'时那样

在本例中,我不使用/dev/video[0..n],可能它应该是另一个设备

该系统在raspbian jessie、php-5.6.14、php5-[dev、cli、cgi]、lighttpd、swig-2.0.12下运行。根据phpinfo(),模块已成功加载


有人知道出了什么问题吗?

我认为这两个对系统的调用在连续运行时并没有达到您希望的效果。第一个调用的导出只会影响为该特定调用而生成的shell进程的环境,该特定调用是对
系统的
。对系统的下一次调用将继承其父系统的环境,该环境不会被更改。相反,您可能想做的是:

system("LD_LIBRARY_PATH=/usr/local/lib/ mjpg_streamer -o 'output_http.so -w /media/MINIUSB/dev/Control/www' -i 'input_raspicam.so -x 640 -y 480 -fps 15'");
这将为调用mjpg_拖缆的进程设置环境。或者最好改用putenv/setenv


由于您使用的是PHP,并且只是调用系统,所以最好使用PHPs
shell\u exec
或类似的工具,因为在您的C中没有PHP不能做的事情(它只是以一种循环的方式为您调用bash)

我认为这两个对系统的调用在连续运行时并没有达到您希望的效果。第一个调用的导出只会影响为该特定调用而生成的shell进程的环境,该特定调用是对
系统的
。对系统的下一次调用将继承其父系统的环境,该环境不会被更改。相反,您可能想做的是:

system("LD_LIBRARY_PATH=/usr/local/lib/ mjpg_streamer -o 'output_http.so -w /media/MINIUSB/dev/Control/www' -i 'input_raspicam.so -x 640 -y 480 -fps 15'");
这将为调用mjpg_拖缆的进程设置环境。或者最好改用putenv/setenv


由于您使用的是PHP,并且只是调用系统,因此最好使用PHPs
shell_exec
或类似工具,因为在您的C中没有PHP无法完成的事情(它只是以一种循环的方式调用bash)

在构建应用程序时,您可以将rpath构建到中。因此,使用
gcc-Wl,-rpath,/usr/local/lib…
而不是使用LD\u LIBRARY\u路径


正如@Flexo所指出的,一个单独的系统()来设置环境变量不会在随后对系统()的调用中影响环境。

在构建应用程序时,您可以将rpath构建到。因此,使用
gcc-Wl,-rpath,/usr/local/lib…
而不是使用LD\u LIBRARY\u PATH


正如@Flexo所指出的,单独设置环境变量的system()不会在后续调用system()时影响环境。

您没有提到您遇到了什么问题。Jo,对不起。问题是,什么都没有发生,我在日志文件(/var/log/lighttpd/error.log、dmesg等)中也没有得到任何信息。您希望看到什么?我不确定,但可能在PHP中,就像在其他目标语言中一样,加载模型时不会运行任何代码。由于您没有发布任何PHP代码,我认为任何东西都不应该单独运行。您没有提到您遇到了什么问题。Jo,对不起。问题是,什么都没有发生,我在日志文件(/var/log/lighttpd/error.log、dmesg等)中也没有得到任何信息。您希望看到什么?我不确定,但可能在PHP中,就像在其他目标语言中一样,加载模型时不会运行任何代码。由于您没有发布任何PHP代码,我假设不应该单独运行任何东西。PHP代替C是可能的-是的,但在下一个开发步骤中,我希望在一个程序中集成多个函数,而不是调用一个程序。合并这两个命令没有帮助。我假设,我必须chmod一些其他文件和/或设备/dev/*。。。我查看了jpg_streamer和raspistill的源代码,但没有找到任何东西/dev/video0不在使用中,在我的例子中也不存在。PHP代替C是可能的-是的,但在下一个开发步骤中,我想在一个程序中集成多个函数,而不是调用一个程序。合并这两个命令没有帮助。我假设,我必须chmod一些其他文件和/或设备/dev/*。。。我查看了jpg_streamer和raspistill的源代码,但没有找到任何东西/dev/video0未被使用,在我的案例中也不存在。