У меня есть страница, написанная на Perl кем-то другим. Я не знаю Perl, поэтому я написал файл PHP, который прямо сейчас ссылается на страницу Perl. То, что я хотел бы сделать, это вставить файл PHP в файл Perl, если на perl-страницу была передана определенная переменная. Если бы я использовал PHP для обоих, я мог бы просто сделать
if ($_GET['sidebar']) include "embedded.php";
Я знаю, что есть способы читать текстовые файлы в Perl, но могу ли я включить PHP-файл в файл Perl?
Я предполагаю, что это не сработает, потому что они обрабатываются разными частями сервера, поэтому нет больших надежд, но, возможно, кто-то попробовал что-то вроде этого.
Если вы просто хотите включить полученный результат (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...
Существуют модули PHP и PHP :: Interpreter , оба имеют метод include
. Однако я не пробовал ни одного из них.
Perl-интерпретатор может выполнять команды синтаксиса Perl, несмотря на некоторые сходства между синтаксисом Perl и PHP, для запуска PHP-кода вам понадобится PHP-интерпретатор. Вместо этого вы можете использовать некоторые команды Perl для использования вывода скрипта PHP. вы должны выполнить PHP-скрипт, используя интерпретатор PHP в вашем коде Perl, а затем использовать вывод этого выполнения. ваш PHP-код должен быть некоторым кодом командной строки, который возвращает (например, эхо или печать) вывод. если вам нужно передать аргументы в 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. но общие шаги таковы.
Вы можете проверить этот проект:
http://metacpan.org/pod/PHP::Include
HP :: Include строит на плечах Filter :: Simple и Parse :: RecDescent, чтобы предоставить Perl-утилиту для включения очень простых файлов PHP из Perl-программы.
При работе с Perl и PHP часто бывает удобно обмениваться данными конфигурации между программами, написанными на обоих языках. Одним из решений этого будет использование независимого от языка файла конфигурации (я слышал, что кто-то сказал XML?). Другое решение – использовать гибкость Perl для чтения PHP и переписать его как Perl. PHP :: Include делает последнее с помощью Filter :: Simple и Parse :: RecDescent, чтобы переписать очень простой PHP как Perl.
Фильтр :: Simple используется для включения макросов (на данный момент только один), которые заставляют PHP быть интерполированным в ваш исходный код Perl, который затем анализируется с использованием грамматики Parse :: RecDescent для создания соответствующего Perl.
PHP :: Include был разработан, чтобы позволить более предприимчивым добавлять грамматики, которые расширяют сложность PHP, которые могут быть включены.