2014-10-29 47 views
1

我试图从PHP运行图像等待处理的Python脚本导入cv2.so Python脚本无法执行,从PHP

php脚本

<?php 
echo exec('echo $PATH '); 
putenv("PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin"); 
echo "<br>"; 
echo exec('echo $PATH'); 
echo "<br>"; 
echo exec('whoami'); 
echo "<br>"; 
echo exec('/usr/bin/python /var/www/html/wordspot/uploads/editimage1.py /var/www/html/wordspot/uploads/test.jpg 2>&1'); ?> 

python脚本

import sys,getopt 
import numpy as np 
import cv2 

imname=str(sys.argv[1]) 
print imname 
img=cv2.imread(imname,0) 
ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) 
cv2.imwrite(imname,thresh1) 

虽然在执行“php test.php”时在终端上有效(我以root身份运行)

关于眉毛呃我得到这个输出

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin 
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin 
apache 
ImportError: libopencv_core.so.3.0: cannot open shared object file: No such file or directory 

我认为进口cv2.so导致此错误(它运行例如在Hello world Python的例子) 我能做些什么,使来自Apache用户可见的OpenCV的库?

编辑 解决方法:把库的路径/etc/ld.so.conf.d/opencv.confexecuting ldconfig -v 改变了错误"ImportError: libopencv_core.so.3.0: cannot enable executable stack as shared object requires: Permission denied"

setenforce 0它的工作禁用SELinux的经过。 (这将无法生存重新启动,SELinux的需要从在/etc/selinux/config禁用并更改为SELINUX=disabled,或提供SELinux中正确的权限,以允许访问库)。

+2

$ PATH为可执行的二进制文件。有一个用于库的LD_PATH。你需要检查路径。 – 2014-10-29 15:28:29

回答

1

哪里libopencv_core.so.3.0位于何处?如果是在/usr/local/lib,尝试在执行程序前设置LD_LIBRARY_PATH这样的:

putenv("LD_LIBRARY_PATH=/usr/local/lib"); 
+0

这没有奏效。不过,在/etc/ld.so.conf.d/opencv.conf上设置了路径后,我执行了ldconfig -v,现在又出现了一个新错误,与上面类似。新错误是 ImportError:libopencv_core.so.3.0:无法启用可执行堆栈作为共享对象需要:权限被拒绝 – 2014-10-29 21:36:57

+0

解决了,我还需要禁用SELinux。 – 2014-10-29 21:40:33