2013-03-14 78 views
0

我有一個PHP腳本,在python程序中調用。下面是PHP腳本:PHP和導入pylab

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

,這是test.py內容: 「Hello World」 的

test.py: 

    import numpy as np 
    from matplotlib.patches import Ellipse 
    # import matplotlib.pyplot as plt 
    # from matplotlib.pyplot import figure, show 
    # import pylab 

    print "Hello World!" 

現在,這工作得很好,我也得到在瀏覽器中。但是,如果我取消註釋任何導入(即導入matplotlib.pyplot作爲plt,導入matplotlib.pyplot作爲plt或導入pylab),我沒有得到PHP的結果。如果有人能夠幫助我,那將會很棒,因爲我需要Python中的所有繪圖功能。

+0

你試過只運行了Python文件沒有意見,看看你得到任何錯誤?我想你沒有pylab和其他的安裝。 – 2013-03-14 00:15:09

+0

Python代碼在終端中工作得很好。我已經安裝了它們。 – user2167741 2013-03-14 00:17:51

+0

這個問題的任何幫助? – user2167741 2013-03-14 17:01:54

回答

0

沒有完整的答案,但也許有幫助:

假設你是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> 

.py文件:

import numpy as np 
import matplotlib.pyplot as plt 

print "Hello World!" 

2>&1將程序的錯誤輸出重定向到標準輸出,這可以用於調試目的。

在瀏覽器頁面上的結果包含:

File "/Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/init.py", line 403, in _get_configdir raise RuntimeError("Failed to create %s/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data"%h) RuntimeError: Failed to create /Library/WebServer/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data

比我的根:

mkdir /Library/WebServer/.matplotlib 
chown _www /Library/WebServer/.matplotlib/ 

而不是包含在去年的錯誤在瀏覽器的頁面:

File "/Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/numerix/ma/init.py", line 16, in from numpy.core.ma import * ImportError: No module named ma

嗯,這仍然令人失望,但是你的里程可能會有所不同,問題可能與第e Web服務器用戶(_www)的環境/權限。

0

感謝Jan Kuiken試用它!經過艱苦的鬥爭,終於找到了答案。首先如在this page建議,添加以下爲 'test.py',

import os 
os.environ[ 'MPLCONFIGDIR' ] = '/tmp/' 
import matplotlib 
matplotlib.use('agg') 

和進口pylab(即,未註釋的話)。

這從命令行工作,但不在瀏覽器中。然後,我做了一個中繼並得到了在瀏覽器中出現以下錯誤:

使dyld:找不到符號:從參考__cg_jpeg_resync_to_restart :/系統/資源庫/框架/ ApplicationServices ... 預計在:/應用程序/ MAMP /Library/lib/libjpeg.62.dylib

我想通了,它應該與ImageMagick的問題,其次可以從以下頁面的建議: Getting MAMP 1.9 to work with ImageMagick

,正確安裝後,我能得到的Python代碼正在進行。 python代碼有一個命令來繪製和保存圖形,我猜ImageMagick在這種情況下是必需的!

0

當python腳本通過php執行時,matplotlib部分沒有執行。 然後我就包括我的.py文件下面的語句..

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

import matplotlib 

matplotlib.use('agg') 

和它的工作...