PHPスクリプトからPythonスクリプトを実行する際に問題が発生しています。私のクライアントはBluehostを使用していますので、ここで説明しているeasy_installメソッドを使用してPython用のサードパーティ製モジュール(numpy)をインストールしました:https://my.bluehost.com/cgi/help/530?step=530PHPスクリプトがPythonスクリプトから出力を取得できない
私は2つのpythonスクリプトとPHPスクリプトを作成しました。
hello.pyは含まれています
print "Hello, World!"
hello-numpy.pyは含まれています
import numpy
print "Hello, World!"
PHPスクリプトが含まれています
Output from exec('python hello.py'): <?php echo exec('python hello.py'); ?><br>
Output from exec('python hello-numpy.py'): <?php echo exec('python hello-numpy.py'); ?><br>
Output from exec('whoami'): <?php echo exec('whoami'); ?>
私は、PHPからこの出力を得ます:
Output from exec('python hello.py'): Hello, World!
Output from exec('python hello-numpy.py'):
Output from exec('whoami'): venicetw
しかし、SSHウィンドウからこれらのスクリプトを実行すると、以下の結果が得られます。
# python hello.py
Hello, World!
# python hello-numpy.py
Hello, World!
# whoami
venicetw
Pythonスクリプトの輸入がnumpyの際にPHPが任意の出力を取得していないようだが、それはSSHから正常に動作します。さらに、PHPはhello.pyでは0、hello-numpy.pyでは1を返します。私はそれが許可の問題かもしれないと思ったが、PHPとSSHの両方が "venicetw"ユーザとして実行されている。 PHPとApacheがPythonスクリプトからの出力を得られないのはなぜですか?それは私がBluehostと、または私が確認すべき他の何かと議論することができる何か? Apache 2.2.21
,PHP 5.2.17
,Python 2.4.3
およびnumpy 1.6.0
を使用しています。
更新: SSHは、次のPythonパスを出力します。
/home8/venicetw/public_html/venicenoise/python
/home8/venicetw/.local/lib/python2.4/site-packages/ogcserver-0.1.0-py2.4.egg
/home8/venicetw/.local/lib/python2.4/site-packages/PIL-1.1.7-py2.4-linux-x86_64.egg
/home8/venicetw/.local/lib/python2.4/site-packages/lxml-2.3.2-py2.4-linux-x86_64.egg
/home8/venicetw/.local/lib/python2.4/site-packages/WebOb-1.2b2-py2.4.egg
/home8/venicetw/.local/lib/python2.4/site-packages/PasteScript-1.7.5-py2.4.egg
/home8/venicetw/.local/lib/python2.4/site-packages/PasteDeploy-1.5.0-py2.4.egg
/home8/venicetw/.local/lib/python2.4/site-packages/Paste-1.7.5.1-py2.4.egg
/home8/venicetw/.local/lib/python2.4/site-packages/numpy-1.6.0-py2.4-linux-x86_64.egg
/home8/venicetw/.local/lib/python2.4/site-packages
/home8/venicetw/.local/lib/python/site-packages
/home8/venicetw/public_html/venicenoise/python
/usr/lib64/python24.zip
/usr/lib64/python2.4
/usr/lib64/python2.4/plat-linux2
/usr/lib64/python2.4/lib-tk
/usr/lib64/python2.4/lib-dynload
/usr/lib64/python2.4/site-packages
/usr/lib64/python2.4/site-packages/Numeric
/usr/lib64/python2.4/site-packages/PIL
/usr/lib64/python2.4/site-packages/gtk-2.0
/usr/lib/python2.4/site-packages
しかし、ApacheはこれらのみPythonのパスを出力します。
/home8/venicetw/public_html/venicenoise/python
/usr/lib64/python24.zip
/usr/lib64/python2.4
/usr/lib64/python2.4/plat-linux2
/usr/lib64/python2.4/lib-tk
/usr/lib64/python2.4/lib-dynload
/usr/lib64/python2.4/site-packages
/usr/lib64/python2.4/site-packages/Numeric
/usr/lib64/python2.4/site-packages/PIL
/usr/lib64/python2.4/site-packages/gtk-2.0
/usr/lib/python2.4/site-packages
ソリューション:から実行するの/ usr/binに/ envをすることでPHPとSSHの両方で、私は、PHPがnumpyがインストールされているPythonパスの環境変数がないと判断することができました。この場合、PHPスクリプトの先頭に
putenv('PYTHONPATH=/home8/venicetw/.local/lib/python2.4/site-packages:/home8/venicetw/.local/lib/python/site-packages:');
を追加すると、すべて正常に動作します。
ああ、これを持っています: "ImportError:numpyという名前のモジュールがありません" Apacheを再起動するだけの問題なのでしょうか? –
同じPythonバージョンにアクセスしていることを確認してください。 –
ちょうどチェックしました - 彼らは両方ともPython 2.4.3にアクセスしています。共有ホスティング環境では、Apacheを再起動することは選択肢にはなりません。 –