PHP与pylab的导入

PHP与pylab的导入,php,macos,import,matplotlib,fgets,Php,Macos,Import,Matplotlib,Fgets,我有一个在python程序中调用的PHP脚本。以下是php脚本: <?php $last_line = popen('/Library/Frameworks/Python.framework/Versions/Current/bin/python test.py', 'r'); $results = fgets($last_line); print $results; ?> 现在,这很好用,我在浏览器中看到“Hello World!”。但是,如果我取消对任何

我有一个在python程序中调用的PHP脚本。以下是php脚本:

<?php
    $last_line = popen('/Library/Frameworks/Python.framework/Versions/Current/bin/python test.py', 'r');
    $results = fgets($last_line);
    print $results;
?>

现在,这很好用,我在浏览器中看到“Hello World!”。但是,如果我取消对任何导入的注释(即,将matplotlib.pyplot作为plt导入、将matplotlib.pyplot作为plt导入或将pylab导入),我不会从PHP获得结果。如果有人能帮我,那就太好了,因为我需要Python中的所有绘图函数。

没有完整的答案,但可能有帮助:

假设您在Mac OS上,我已将您的
.php
文件更改为:

<br><br>==== Start ====<br><br>

<?php
    error_reporting(E_ALL);

    $handle = popen('python test.py 2>&1', 'r');
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo $buffer."<br>";
    }
    pclose($handle);

?>

<br><br>==== End ====<br><br>
2>&1
将程序的错误输出重定向到标准输出,这可用于调试目的

浏览器页面上的结果包含:

文件 “/Library/Python/2.6/site packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/init.py”, 第403行,在_get_configdir raise RuntimeError(“创建失败 %s/.MatPultLB;考虑将MPLCONDISDR设置为可写目录 对于matplotlib配置数据“%h”,运行时错误:无法创建 /Library/WebServer/.matplotlib;考虑将MPLCONDIODIR设置为 matplotlib配置数据的可写目录

比我当root时做的还要多:

mkdir /Library/WebServer/.matplotlib
chown _www /Library/WebServer/.matplotlib/
比浏览器中包含为最后一个错误的页面:

文件 “/Library/Python/2.6/site packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/numerix/ma/init.py”, 第16行,从numpy.core.ma导入*ImportError:没有名为 妈


嗯,这仍然令人失望,但是您的里程数可能有所不同,问题可能与Web服务器用户(_www)的环境/权限有关。

感谢Jan Kuiken的尝试!经过艰苦的努力,我终于找到了答案。首先,根据中的建议,我将以下内容添加到
test.py

import os
os.environ[ 'MPLCONFIGDIR' ] = '/tmp/'
import matplotlib
matplotlib.use('agg')
和导入的
pylab
(即,未注释)

这在命令行中起作用,但在浏览器中不起作用。然后我进行了一次passthru,在浏览器中出现以下错误:

dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ApplicationServices...
Expected in: /Applications/MAMP/Library/lib/libjpeg.62.dylib
我发现这应该是ImageMagick的问题,并遵循了下一页的建议:


在正确安装之后,我能够继续运行python代码。python代码有一个用于绘制和保存图形的命令,我想在这种情况下需要ImageMagick

通过php执行python脚本时,matplotlib部分未执行。 然后,我只在.py文件中包含以下语句

import os
os.environ[ 'MPLCONFIGDIR' ] = '/tmp/'

import matplotlib

matplotlib.use('agg')

它成功了…

您是否尝试过只运行python文件而不运行注释,以查看是否有任何错误?我猜你没有安装pylab和其他的。python代码在终端上运行得很好。我已经全部安装好了。对这个问题有什么帮助吗?
dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ApplicationServices...
Expected in: /Applications/MAMP/Library/lib/libjpeg.62.dylib
import os
os.environ[ 'MPLCONFIGDIR' ] = '/tmp/'

import matplotlib

matplotlib.use('agg')