Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL连接无法从Perl CGI脚本中工作_Perl_Apache_Tomcat_Cgi_Dbi - Fatal编程技术网

MySQL连接无法从Perl CGI脚本中工作

MySQL连接无法从Perl CGI脚本中工作,perl,apache,tomcat,cgi,dbi,Perl,Apache,Tomcat,Cgi,Dbi,我可以使用Perl脚本中的DBI模块轻松地连接到远程MySQL服务器。但是,当我尝试在CGI脚本中使用相同的连接设置/属性时,连接失败 尽管使用了,apache错误日志或浏览器中都没有记录有用的错误/警告 use CGI::Carp qw(warningsToBrowser fatalsToBrowser); 奇怪的是,当从终端执行时,完全相同的脚本工作正常。我还尝试将CGI脚本连接到localhost上的MySQL服务器,但没有成功 另一方面,phpMyAdmin在机器上工作得很好 我使用的

我可以使用Perl脚本中的DBI模块轻松地连接到远程MySQL服务器。但是,当我尝试在CGI脚本中使用相同的连接设置/属性时,连接失败

尽管使用了,apache错误日志或浏览器中都没有记录有用的错误/警告

use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
奇怪的是,当从终端执行时,完全相同的脚本工作正常。我还尝试将CGI脚本连接到localhost上的MySQL服务器,但没有成功

另一方面,phpMyAdmin在机器上工作得很好

我使用的是CentOS 5.8版。我怀疑这是apache用户或操作系统上其他任何地方的系统/权限问题,但已经走到了死胡同

任何指点都将不胜感激

非常感谢

编辑:我正在使用以下连接字符串

$dbh=DBI->connect($ds、$uname、$pwd、{RaiseError=>1})或die“$DBI::errstr无法连接:$!
”;
检查您在MySQL中设置了哪些用户。如果您试图通过网络连接进行连接,则用户的主机关联可能会出现问题

尝试:
选择主机,mysql中的用户。用户

修复了它。如果对Linux管理不太熟悉的人也面临类似的问题,下面是发生的情况。我的CentOS机器上的安全系统“selinux”禁止httpd与远程MySQL服务器建立网络连接。必须使用以下命令显式启用它

setsebool -P httpd_can_network_connect=1
您可以在此处阅读有关selinux的更多信息:


总是有错误消息。您可能没有正确访问它们,或者忽略了它们。请尝试在终端上执行相同的脚本,但首先更改为Apache用户<代码>sudo-u。如果失败了,那么调试就容易多了。此外,如果没有错误或警告,您如何知道连接失败?@LenJaffe-我收到以下错误消息:
软件错误:DBI连接(“$dbname:$host:$port”,“$username”,“…)失败:无法连接到“$host”(13)上的MySQL服务器在/var/www/cgi-bin/crm/$scriptname.cgi第24行
不确定该怎么做。Thanks@Schwern-谢谢你的提示!我以apache用户的身份从终端运行脚本,它执行时没有任何错误!现在更加混乱了。可能有什么问题?错误字符串中是否确实有
$dbname:$host:$port
$username
?尝试打印出
$ds
$uname
$pwd
。我认为它们没有包含你认为它们包含的内容。我想你在某个地方有一个单引号,你应该有一个双引号。谢谢Nicole。我用来连接的MySQL用户似乎拥有适当的权限。对于主机“localhost”和“%”的用户名的两个条目,Select_Priv列的值分别为“Y”。在任何情况下,正如我前面提到的,我可以从同一台主机连接到MySQL,但是可以从终端连接。只有在从浏览器调用脚本时才会出现问题。使用apache用户从终端执行脚本也很好!
setsebool -P httpd_can_network_connect=1