Можете ли вы включить PHP в файл Perl? - PullRequest
3 голосов
/ 18 января 2009

У меня есть страница, написанная на Perl кем-то другим. Я не знаю Perl, поэтому я написал PHP-файл, который сейчас просто ссылается на страницу Perl. Что я хотел бы сделать, это встроить PHP-файл в Perl-файл, если Perl-странице передана определенная переменная. Если бы я использовал PHP для обоих, я мог бы просто сделать

if ($_GET['sidebar']) include "embedded.php";

Я знаю, что есть способы чтения текстовых файлов в Perl, но можно ли включить файл PHP в файл Perl?

Я предполагаю, что это не сработает, потому что они обрабатываются разными частями сервера, так что нет больших надежд, но, возможно, кто-то пробовал что-то подобное.

Ответы [ 4 ]

14 голосов
/ 18 января 2009

Если вы просто хотите включить результирующий вывод (HTML и т. Д.) Скрипта PHP на страницу, сгенерированную на Perl, вы можете использовать обратные пометки для вызова скрипта PHP через php-cli, например:

Сначала скрипт test.pl:

[root@www1 cgi-bin]# cat test.pl
#!/usr/bin/perl
print "This is a perl script\n";
my $output = `php test.php`;
print "This is from PHP:\n$output\n";
print "Back to perl...\n";
exit 0;

Далее скрипт test.php:

[root@www1 cgi-bin]# cat test.php
<?php

echo "PHP generated this";

?>

Вот результат работы "test.pl":

[root@www1 cgi-bin]# perl test.pl
This is a perl script
This is from PHP:
PHP generated this
Back to perl...
11 голосов
/ 18 января 2009

Существуют модули PHP и PHP :: Interpreter , оба имеют метод include. Хотя сам не пробовал ни одного из них.

1 голос
/ 18 января 2009

Интерпретатор Perl может выполнять синтаксические команды Perl, несмотря на некоторые сходства между синтаксисом Perl и PHP, вам потребуется интерпретатор PHP для запуска кода PHP. Вместо этого вы можете использовать некоторые команды Perl для вывода PHP-скрипта. Вы должны выполнить сценарий PHP, используя системный интерпретатор PHP в своем коде Perl, а затем использовать выходные данные этого выполнения. Ваш PHP-код должен быть кодом командной строки, который будет возвращать (например, echo или print) вывод. если вам нужно передать аргументы в код PHP, используйте аргументы командной строки при выполнении сценария PHP в вашем коде Perl. поэтому ваш Perl-код будет выглядеть так:

 // your code before PHP call
 $php_output = `php /path/to/php/script -param1 -param2 -param3`;
 // your code after PHP call

и ваш PHP-скрипт может получать такие параметры:

<?php
// argv() is defined by PHP and contains all command line params
$params = argv();
// first index of argv is the name of the PHP script you are running.
array_shift($params);
// now you have all parameters.
// your code here generates some results.
echo $resutls;
?>

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

0 голосов
/ 18 января 2009

Вы можете проверить этот проект:

http://metacpan.org/pod/PHP::Include

HP :: Включить строит на плечах Filter :: Simple and Parse :: RecDescent предоставить утилиту Perl для в том числе очень простые файлы PHP из Perl-программа.

При работе с Perl и PHP это часто удобно иметь возможность делиться данные конфигурации между программами написано на обоих языках. Один Решение этого было бы использовать независимая от языка конфигурация файл (я слышал, кто-то говорит XML?). Другое решение заключается в использовании Perl's Гибкость, чтобы читать PHP и переписать его как Perl. PHP :: Включить делает последнее с помощью Filter :: Simple и Parse :: RecDescent переписать очень простой PHP как Perl.

Filter :: Simple используется для включения макросы (на данный момент только один), которые заставить PHP быть интерполированным в ваш Perl исходный код, который затем анализируется используя грамматику Parse :: RecDescent для генерировать соответствующий Perl.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...