【发布时间】:2015-06-20 10:40:34
【问题描述】:
我正在一个 Perl 脚本中创建与 MySQL 数据库的连接,该脚本由 PHP 脚本调用。以下是 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”,并且 DB 连接确实在 Perl 代码中建立。但是,当从我的(Chrome)浏览器执行 Test.php 时,打印的所有内容都是“之前...”并且没有建立连接。并显示no错误信息。
为什么在命令行上会成功,而从 Web 服务器却没有?
【问题讨论】:
-
好问题。好奇你为什么要这样做?
-
当它在命令行而不是在浏览器中工作时,我总是先去权限。您的网络服务器(apache?)是否有权运行 perl 并有权访问 /path/MyCode.pl?
-
我有一个用 Perl 编写的“后端”例程,用于模拟我的一个业务客户的流程。事情在我需要的地方发生了变化
-
@MikeP 离题,但您可以在发布后的前五分钟内编辑 cmets。
-
尝试将
or die更改为or print。