簡體   English   中英

無法執行從php導入cv2.so的python腳本

[英]Can't execute python script that imports cv2.so from php

我正在嘗試從php運行用於圖像處理的python腳本

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.conf添加庫的路徑並executing ldconfig -v將錯誤更改為"ImportError: libopencv_core.so.3.0: cannot enable executable stack as shared object requires: Permission denied"

setenforce 0禁用SELinux后,它開始工作。 (這將在重啟后無法幸存,需要從/etc/selinux/config SELINUX=disabled並更改為SELINUX=disabled ,或者在SELinux中提供正確的權限以允許訪問該庫。)

libopencv_core.so.3.0在哪里? 如果位於/usr/local/lib ,請在執行程序之前嘗試像這樣設置LD_LIBRARY_PATH

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM