php - 无法执行从 php 导入 cv2.so 的 python 脚本

标签 php python opencv

我正在尝试运行 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.conf中加入库的路径,执行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 并更改为 SELINUX=disabled,或者在 SELinux 中提供正确的权限允许访问图书馆。)

最佳答案

libopencv_core.so.3.0 在哪里?如果它在 /usr/local/lib 中,请在执行程序之前尝试像这样设置 LD_LIBRARY_PATH:

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

关于php - 无法执行从 php 导入 cv2.so 的 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26634219/

相关文章:

PHP + MySQL - 随机列出MySQL表中的所有数据

python - 使用按位运算将两个整数相加时无限循环?

opencv - 计算机视觉-计算图像中的小圆圈

php - 使用javascript获取元素id

php - 2个javascript函数冲突?

python - 以特定用户身份执行脚本

python - 相当于 Python 中 R 的 %in% 运算符

python - 带有 contrib 的 OpenCV 3.0 Windows 二进制安装

android - 无法在android中构建caffe

php - ZF2 - ServiceManager 和 'aware' 接口(interface)