在PHP脚本中调用时,无法通过Perl建立MySQL连接

时间:2015-04-14 17:31:08

标签: php mysql perl

我正在通过PHP脚本调用的Perl脚本中创建与MySQL数据库的连接。以下是2个脚本:

的Perl:

#!/usr/bin/perl
# script name = MyCode.pl
use DBI;
my $data_source = q/dbi:mysql:name:localhost/;
my $user = q/myname/;
my $pwd = q/pword/;

print "before...\n";
# Connect!
$dbhandle= DBI->connect($data_source,$user,$pwd) or die "can't connect
       $data_source: $DBI::errstr \n";
print "...after \n";

PHP:

<?php
 // script name = Test.php
 $myResult=shell_exec("perl /path/MyCode.pl");
 echo $myResult;
?>

在命令行上执行时,Test.php打印“before ...”和“... after”,并且在Perl代码中确实建立了DB连接。但是,当从我的(Chrome)浏览器执行Test.php时,所有打印的内容都是“之前......”并且没有建立连接。并显示 no 错误消息。

为什么在命令行上取得成功,而不是从Web服务器取得成功?

3 个答案:

答案 0 :(得分:2)

是的,PHP shell_exec()函数没有捕获STDERR。

要调试代码,可以在系统命令末尾添加2>&1,将STDERR重定向到 STDOUT

$myResult = shell_exec("perl /path/script.pl 2>&1");

此外,如果在运行时发生错误,您可以将DBI模块设置为 die

$dbh = DBI->connect($data_source,$user, $pwd, { RaiseError => 1, PrintError => 0}) or die $DBI::errstr;

答案 1 :(得分:0)

我的第一个猜测:从PHP中你用“perl /path/MyCode.pl”执行它

Apache打开的shell与您的用户不同,并且该用户不会在其路径中进行perl。

尝试从完整路径使用Perl:“/ full / path / to / perl /path/MyCode.pl”

仅供参考:使用perl“scriptname”执行脚本不是一个好习惯。而是在shebang中定义Perl的完整路径,并始终使用完整路径启动脚本。这样你可以避免这样的错误。

此致 安德拉斯

答案 2 :(得分:0)

问题已解决......我需要正确的路径规范:使用以下命令完成(在godaddy上)

use cPanelUserConfig;

在Perl脚本中访问我安装的DBD :: mysql模块。