【发布时间】:2011-10-20 17:09:20
【问题描述】:
我刚刚设法在 OSX 上安装了适用于 Python 的 mySQLdb - 从命令行可以正常工作。我可以查询数据库没有问题。
我现在要做的是使用 system() 函数从 PHP 调用 python 脚本。
这个sn-p:
import MySQLdb
print "hello from py"
当从 PHP system() 运行时,向 PHP 返回“1”,但如果我从命令行运行它,它会打印出“hello from py”。如果我注释掉 import 语句,并使用 system() 再次通过 PHP 运行脚本,它会返回“hello from py”
因此,我确定它一定与 MySQLdb 有关。我对 UNIX 不是很熟练,虽然我猜这可能与 _www 用户通过 PHP 访问 mySQLdb 模块不正确有关??
我无法让它向 PHP 返回任何错误,因此很难排除故障。
一些帮助指出我正确的方向,或者:将 Python 的错误消息发送到 PHP,并自行解决问题,将不胜感激。
编辑:
一些更好的信息:
我把 sn-p 改成这样:
print "before"
try:
import MySQLdb
except Exception,e:
print e
print "hello from py"
并使用 PHP exec() 而不是 system 执行它:
exec('python /Users/Tapefreak/sites/a/testpy.py');
这就是 PHP 的结果:
无法将文件提取到 egg 缓存
尝试将文件提取到 Python 鸡蛋缓存:
[Errno 13] 权限被拒绝:'/Library/WebServer/.python-eggs'
Python egg 缓存目录当前设置为:
/Library/WebServer/.python-eggs
也许您的帐户没有对该目录的写入权限? 您可以通过设置 PYTHON_EGG_CACHE 来更改缓存目录 环境变量指向一个可访问的目录。
所以,我创建了目录并对其进行了更改。
然后,脚本的输出变为:
dlopen(/Library/WebServer/.python-eggs/MySQL_python-1.2.3b2-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2):库未加载:libmysqlclient.18.dylib 引用自: /Library/WebServer/.python-eggs/MySQL_python-1.2.3b2-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 原因:找不到图片
这是我之前收到的一条消息,但原以为已修复——结果发现它仅针对我的本地用户修复,而不针对 www 和 root 用户。 (请耐心等待,我正在学习......)
对 SO 进行更多挖掘,我找到了添加符号链接的解决方案:Python mysqldb: Library not loaded: libmysqlclient.18.dylib
我在 /usr/lib 中添加的:
ln -s /usr/local/mysql-5.5.16-osx10.6-x86_64/lib/libmysqlclient.18.dylib libmysqlclient.18.dylib
它现在似乎可以工作了:PHP 可以执行使用 MySQLdb 的 Python。
【问题讨论】: