2010-04-14 1 views
-5

У меня есть две страницы одна в php (index.php) и еще одна в Perl (dbcon.pl).Как включить файл .pl (PERL) в PHP

В основном я хочу, чтобы в моем файле php отображался только пользовательский интерфейс, и все операции с данными выполнялись в файле 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 вместо его выполнения

как преодолеть эту проблему?

примечание: я бег это окно среда

есть ли другой способ сделать это?

+11

Вы должны понимать основные принципы работы инструментов, перед которыми вы работаете, перед их использованием. Я не хочу быть грубым, но этот вопрос почти кричит «Я не знаю, как работают интерпретируемые языки», поэтому, хотя вы можете следовать некоторым из приведенных ниже ответов (они достаточно хороши), вы столкнетесь с гораздо большими проблемами в ближайшее будущее. –

+0

я буду держать это в виду, спасибо – dexter

+1

Я сожалею звучать грубо, тоже, но вы действительно кажется, решил это так, как вы решили использовать, и упорно отказываются делать это любым иным способом. На мой взгляд, нет абсолютно никаких оснований использовать Perl и PHP в таком нечетном сочетании, и вы, похоже, не можете сформулировать фактический * мотив *, чтобы идти своим путем, кроме неопределенных утверждений типа «мне действительно нужно сделать это таким образом только". –

ответ

2

То, что вы пытаетесь, не так просто. Вам придется выполнить скрипт на языке Perl с PHP, перехватывать вывод и печать это нравится:

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

Как уже упоминалось, что это не очень хорошая вещь, чтобы сделать. Для хорошего разделения между бэкэнд и пользовательским интерфейсом вы должны взглянуть на существующие фреймворки PHP.

+1

Не решение, которое я бы рекомендовал вообще. – jamiei

+1

Да, это не так. Но это то, что он хотел сделать. – Daff

+0

Могу ли я узнать, почему его не рекомендуется – dexter

5

Могу я спросить, в чем проблема на самом деле? Я не вижу ничего «специального» в коде Perl, так что вы либо:

а) Не знаю, как получить доступ к БД из PHP (то есть вы не знаете PHP) или

б) Не знаю, что делает Perl (т.е. вы не знаете Perl) или

c) возможно, ваша среда настроена так, что вы можете использовать Perl DBI, но вы не можете сделать то же самое с PHP.

Этот link должен предоставить вам указатели на то, что вы делаете в Perl непосредственно с PHP. Вы легко найдете десятки примеров для различных комбинаций PHP/DB.

Единственный другой способ - сделать то, что предлагает другой плакат: вызвать скрипт Perl и проанализировать результат (отпечатанный до стандартного).

Это рубиголдбергский, хрупкий и неприемлемый, как решение, если вы не отчаянно пытаетесь использовать что-то, доступное только в качестве модуля Perl (что не относится к примеру, опубликованному вами).

В общем, если вы хотите что-то сделать на языке и использовать его на каком-то другом языке, лучшим способом было бы сделать (в вашем случае) Perl работать как своего рода «сервер», то есть отдельный процесс - и предоставлять услуги с использованием XML-RPC или другого легкого протокола.

СООТВЕТСТВИЕ ПРОГРАММЫ С exec() ИЛИ ПОДОБНЫМИ СТРОИТЕЛЬСТВАМИ - ЧРЕЗВЫЧАЙНАЯ ПРАКТИКА.

+0

спасибо за ответ, я знаю, как БД доступа формирует как PHP, так и PERL, моя главная задача - вызывать (или выполнять) perl-файл из php, потому что я думал о том, чтобы делать все внутренние операции в perl и UI будет в php. Еще раз спасибо – dexter

+2

Нет никакого разделения. Ваш скрипт perl по-прежнему выводит элементы пользовательского интерфейса. Вы действительно должны взглянуть на все фреймворки PHP для разделения, которое вы хотите сделать. – Daff

+1

«Я думал, что все внутренние операции в Perl» немного слабее, если вы не хотите использовать что-то, что недоступно в PHP. Если это так, обратитесь к решению «Сервер». Использование Exec() будет ужасно медленным, неэффективным и хрупким. –

2

Существует Perl PECL package для интеграции Perl в PHP.

P.S.ИМХО лучше использовать систему шаблонов, такую ​​как Template Toolkit в Perl. Вы даже можете использовать Perl внутри шаблонов.

0

Если вы используете Catalyst, вы могли бы нас Catalyst::View::PHP Я подозреваю, что это даст вам больше подсказок о том, как использовать php в качестве вашей системы шаблонов. В нем также упоминается PHP::Interpreter