我刚刚设法在OSX上安装了mySQLdb for Python - 而且从命令行可以正常工作。我可以查询数据库没问题。
我现在要做的是使用system()函数从PHP调用python脚本。
此片段:
import MySQLdb
print "hello from py"
从PHP系统运行时()将“1”返回给PHP,但如果我从命令行运行它,则打印出“hello from py”。如果我注释掉import语句,并使用system()再次通过PHP运行脚本,则返回“hello from py”
因此我确信它必须与MySQLdb有关。我不是非常擅长UNIX虽然我猜它可能与_www用户通过PHP访问mySQLdb模块有关 - 不正确吗?
我无法让它将任何错误返回给PHP,因此很难排除故障。
一些帮助指出了我正确的方向,要么:将Python的错误消息发送到PHP,并解决问题本身,将不胜感激。
修改
一些更好的信息:
我将代码段更改为:
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 cache
尝试将文件提取到时发生以下错误 Python egg cache:
[Errno 13]权限被拒绝:'/ Library / WebServer /。python-eggs'
Python egg cache目录当前设置为:
/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。
答案 0 :(得分:0)
检查您的apache错误日志中是否有错误。 另外,尝试su to到_www并手动执行脚本。
答案 1 :(得分:0)
如上所述,将/usr/lib
中的符号链接添加到/usr/local/mysql-5.5.16-osx10.6-x86_64/lib/libmysqlclient.18.dylib
为我解决了这个问题。希望这对其他人有用。