如何在PHP中包含.pl(PERL)文件

时间:2010-04-14 07:32:36

标签: php perl include

我在php(index.php)中有两个页面,在Perl(dbcon.pl)中有另一个页面。

基本上我希望我的php文件只显示UI,所有数据操作都将在Perl文件中完成。

我试过了 在index.pl

<?php include("dbcon.pl");?>
<html>
<br/>PHP</br>
</html>

和dbcon.pl有

#!/usr/bin/perl
use strict;
use warnings;
use DBI;

use CGI::Simple;
my $cgi = CGI::Simple->new;
my $dsn = sprintf('DBI:mysql:database=%s;host=%s','dbname','localhost');

my $dbh = DBI->connect($dsn,root =>'',{AutoCommit => 0,RaisError=> 0});


my $sql= "SELECT * FROM products";
my $sth =$dbh->prepare($sql);
$sth->execute   or die "SQL Error: $DBI::errstr\n";
while (my @row = $sth->fetchrow_array){
print $cgi->header, <<html;
<div>&nbsp;@row[0]&nbsp;@row[1]&nbsp;@row[2]&nbsp;@row[3]&nbsp;@row[4]</div>
html
}

但是当我在浏览器中运行index.php时,它会打印dbcon.pl文件中的所有代码而不是执行它

如何克服这个问题?

注意:我在Windows环境中运行它

有没有其他方法可以做到这一点?

4 个答案:

答案 0 :(得分:5)

请问问题到底是什么?我在Perl代码中看不到任何“特殊”,所以你要么:

a)不知道如何从PHP访问您的数据库(即您不了解PHP)或

b)不知道Perl在做什么(即你不知道Perl)或

c)可能你的环境已经设置好了,你可以使用Perl DBI,但不能用PHP做同样的事情。

这个 link 应该指导您直接从PHP执行Perl中的操作。您可以轻松找到各种PHP / DB组合的几十个示例。

唯一的另一种方法是做另一张海报建议的内容:调用Perl脚本并解析结果(打印到标准输出)。

这是rubygoldbergsque,脆弱且不可接受作为解决方案,除非您绝对不顾一切地使用仅作为Perl模块提供的东西(在您发布的示例中不是这种情况)。

一般情况下,如果你想用一种语言完成某些事情并从其他语言中使用它,最好的方法是使(在你的情况下)Perl作为一种“服务器”运行,即一个单独的过程 - 并使用XML-RPC或其他一些轻量级协议使其公开服务。

使用exec()或类似结构调用程序是非常糟糕的做法。

答案 1 :(得分:2)

你正在尝试的是不容易的。您必须使用PHP执行perl脚本,捕获输出并将其打印为:

<?php echo exec('perl dbcon.pl'); ?>

如上所述,这不是一件好事。为了在后端和用户界面之间实现良好的分离,您应该查看现有的PHP框架。

答案 2 :(得分:2)

Perl PECL package将Perl集成到PHP中。

P.S。恕我直言,最好在Perl中使用像Template Toolkit这样的模板系统。你甚至可以在模板中使用Perl。

答案 3 :(得分:0)

如果您正在使用Catalyst,我们可以Catalyst::View::PHP我怀疑它会为您提供更多关于如何使用php作为模板系统的线索。它还提到了PHP::Interpreter