如何让MySQLdb工作在OSX与_www用户


How to get MySQLdb to work on OSX with _www user?

我刚刚设法在OSX上安装了mySQLdb for Python -并且从命令行它工作得很好。我可以查询数据库。

我现在要做的是使用system()函数从PHP调用python脚本。

代码片段:

import MySQLdb
print "hello from py"

当从PHP运行时system()返回"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缓存

在尝试将文件解压缩到Python蛋缓存:

[Errno 13] Permission denied: '/Library/WebServer/.python-eggs'

Python egg缓存目录当前设置为:

/图书馆/网络服务器/.python-eggs

也许您的帐户没有对这个目录的写访问权限?你可以通过设置PYTHON_EGG_CACHE来改变缓存目录环境变量指向可访问的目录。

所以,我创建了这个目录,并把它命名为

然后,脚本的输出变为:

dlopen(/图书馆/网络服务器/.python-eggs mysql_python - 1.2.3b2 py2.6 macosx - 10.6 - universal.egg - tmp/_mysql.so,2):库未加载:libmysqlclient.18。引用自:/图书馆/网络服务器/.python-eggs/mysql_python - 1.2.3b2 py2.6 macosx - 10.6 - universal.egg - tmp/_mysql.so原因:没有找到图像

这是我早些时候收到的一条消息,但我认为已经修复了——结果是它只修复了我的本地用户,而不是www和root。(请原谅我,我正在学习……)

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可以执行Python,使用MySQLdb.

检查apache的错误日志。另外,尝试登录_www并手动执行脚本。

将上述/usr/lib中的符号链接添加到/usr/local/mysql-5.5.16-osx10.6-x86_64/lib/libmysqlclient.18.dylib中,为我解决了此问题。希望对大家有所帮助