Попытка вызывать скрипт python (2.6) из php, когда вы делаете HTTP-запрос GET с Android, но если в моем скрипте находится numpy import, я получаю сбой, если я его удалю, скрипт / вызов работает. Я вычисляю спектр БПФ числового поля в MySQL, поэтому мне нужно numpy (или я?).
Я смотрю на подобные вопросы по SO, и этот , ответивший @ dietrich-epp, является лучшим, но когда я пытаюсь сделать такое же предложение, мой скрипт все еще терпит неудачу.
Вот моя часть импорта моего скрипта python:
import os, os.path, sys import numpy import string import math import MySQLdb
И начало моего PHP-файла:
<?php putenv('PYTHONPATH=/usr/lib/python2.6/site-packages:'); ...
И это, как я называю свой скрипт python:
$command = "/var/www/html/tremcam/tst0.py localhost baseline@nd.edu 2>&1"; $pid = popen( $command,"r"); while( !feof( $pid ) ) { #echo fread($pid, 256); print(json_encode(fread($pid, 256))); flush(); ob_flush(); usleep(100000); } pclose($pid);
И мои переменные среды имеют значение PYTHONPATH:
/var/www/html/tremcam/pythons /usr/lib/python2.6/site-packages /usr/lib /usr/lib/python26.zip /usr/lib/python2.6 /usr/lib/python2.6/plat-linux2 /usr/lib/python2.6/lib-tk /usr/lib/python2.6/lib-old /usr/lib/python2.6/lib-dynload /usr/lib/python2.6/site-packages/gtk-2.0 /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
Должно ли это ( PYTHONPATH=/usr/lib/python2.6/site-packages
) указывать вместо /usr/lib/python2.6/site-packages/numpy
?
Я попытаюсь использовать passthru () вместо того, как я это имею в PHP. Обратите внимание, что после того, как я смогу импортировать numpy как np, код займет несколько секунд, это также будет проблемой?
Обновление: если я использую: passthru('/var/www/html/tremcam/tst0.py localhost baseline@nd.edu 2>&1',$result);
Я получаю код статуса выхода 139, так что это не очень полезно для меня, как вы думаете?
Попробуйте с setsebool httpd_tmp_exec on
если он работает, сделайте его постоянным с помощью setsebool -P httpd_tmp_exec on
Это должно быть SELinux, запрещающее Apache ваши каталоги pytonpath (и да, вы должны предоставить очень маленькую папку, если она все еще не работает, но она не должна быть необходимой вообще).
Немного менее чистый подход заключается в комментировании этой строки import ctypeslib
в /<your numpy path>/numpy/__init__.py
У меня была та же проблема, и оба подхода работали нормально (последнее, хотя может привести к некоторой несогласованности в более поздних разработках, поэтому я предлагаю вам сначала попробовать setsebool)