如何让MySQLdb与_www用户一起使用OSX?

时间:2011-10-20 17:09:21

标签: php python

我刚刚设法在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。

2 个答案:

答案 0 :(得分:0)

检查您的apache错误日志中是否有错误。 另外,尝试su to到_www并手动执行脚本。

答案 1 :(得分:0)

如上所述,将/usr/lib中的符号链接添加到/usr/local/mysql-5.5.16-osx10.6-x86_64/lib/libmysqlclient.18.dylib为我解决了这个问题。希望这对其他人有用。