我有一个PHP脚本,使连接到远程SQL Server。我可以在命令行中以root用户的身份调用freetds命令:tsql -H hostname -U username它连接得很好,我可以运行查询。
我有一个PHP脚本在/var/www/html/axis/public/test.php当我:sudo -u apache -s(将用户从root更改为apache)然后从命令行运行我的PHP脚本时,它连接并运行查询非常好。但是当从web浏览器执行相同的脚本时,它失败了——浏览器返回一个DB Connection错误。web浏览器能够连接到它应该连接的任何地方,并呈现所有不需要SQL连接的网页。
apache是运行httpd的用户。我已经确认了这一点:ps aux | grep apache
为什么apache可以很好地从命令行执行PHP脚本,但是当浏览器试图连接到相同的脚本时,它失败了?
谢谢,吊杆
根据FreeTDS常见问题:
phphttp://www.freetds.org/faq.html
你也可以张贴你的连接代码和你得到的错误到底是什么?
所以问题出在SELinux上。日志含义禁止web服务器连接外部网络(SQL server)。我必须运行这个命令:
/usr/sbin/setsebool -P httpd_can_network_connect_db 1
一旦完成,一切都好了。这个答案是在Daniel Fazekas的帮助下提供的。谢谢大家和我一起看这个问题。