Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Perl,pph


Автор: o6s 20.12.2008, 20:44
Доброе врямя суток.
Можно ли передать переменуую из perl-скрипта в php-скрипт ?
Я пока подумываю о том, что бы использовать временный файл, из которого php будет считывать нужную ему переменню или стандартный какой-нить дескриптор, но может быть есть более человеческие варианты ?

Автор: sir_nuf_nuf 21.12.2008, 02:07
давай сразу терминологию проясним, что бы... эм ну стать более грамотными.
из perl в php нельзя передать переменную. 

perl - это программа. интерпретатор. отдельный процесс
php - аналогично. отдельный процесс.

ваш процесс perl обрабатывает данные (!). perl дает нам способ обращаться к данным по именам - это переменные.

Следовательно ваш вопрос выглядит так:

1) "как передать данные из одного процесса в другой ?"

или чуть более подробно:

2) "какое API существует в perl и php для передачи данных между процессами ?"

Сначала ответим на вопрос 1:
можно:
-передать данные как аргументы при запуске программы (аргументы командной строки если хотите)
-передать данные как переменные окружения
-передать данные через файл
-передать данные через pipe
-через shared memory
-через очередь сообщений
-воспользоваться cокетами
-отправить по e-mail в конце концов =)

Тут есть нюансы:
- у вас работают оба процесса одновременно
- процесс perl порождает процесс php

В зависимости от этого нужно выбирать способ передачи.

Если вы просто порождаете новый процесс то легче всего передать через аргументы командной строки или через pipe
Ecли два процесса работают одновременно - через IPC.

Теперь когда мы поняли что хотим, разберемся как это делать. Т.к. в ПХП я пном  - пень.. пишу примеры только на perl
1) через аргументы командой строки:
Код

my $a = "hello";
system("script.php", $a); #это запусти скрипт PHP и передаст параметр как ARGV[0] или как там в ПХП
exec("script.php", $a); #аналогично, но при этом perl скрипт прекратит свое существование
open PIP, "|script.php";  #это породит новый процесс script.php и передаст данные через pipe
print PIP $a;                    # в php они будут доступны через STDIN
close PIP;


2) если процесс php уже запущен, то нужно выбрать подходящий IPC
http://perldoc.perl.org/perlipc.html
http://www.google.ru/search?q=IPC+PHP&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:ru:unofficial&client=firefox-a

Автор: o6s 21.12.2008, 18:23
Спасибо за развернутый ответ.

Автор: gcc 24.12.2008, 06:53
я хотел сделать так:

пхп -> перл -> пхп

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)