2014-10-29 66 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