2013-05-18 5 views
1

У меня есть два сценария, которые выполняют различные задачи на сервере. Один написан на Perl (.cgi) другой в PHP.Связь между скриптами CGI PHP и Perl

Я пытаюсь отправить запрос от PERL CGI скрипт, делая что-то вроде этого:

$ua = LWP::UserAgent->new; 
$ua->agent("$0/0.1 " . $ua->agent); 
$ua->timeout(30); 

$queryStr = (xxxMaskedxxx); 
$request = HTTP::Request->new('GET', $queryStr); 
$response = $ua->request($request); 
if ($response->is_success) 
{ 
     $search = strpos($res->content, "not"); 
     if($search==true) 
     { return -1; } 
} 

Я попробовал два способа отправить обратно результат от PHP:

Это:

HttpResponse::setCache(true); 
HttpResponse::setContentType('text/html'); 
if (!$result) 
     HttpResponse::setData("<html>Message not delivered</html>"); 
else 
     HttpResponse::setData("<html>Message successfully delivered</html>"); 
HttpResponse::send(); 

И это:

echo "Content-type: text/html\n\n"; 
if (!$result) 
     echo 'Message not delivered' . PHP_EOL; 
else 
     echo 'Message successfully delivered' . PHP_EOL; 

Но $response->is_success возвращает false для обоих случаев? Когда я пытаюсь распечатать ответ, я получаю это:

response is HTTP::Response=HASH(0x97a8b34)

Что я сделал не так?

Также два сценария сидят бок о бок. Есть ли лучшие способы общения между ними?

+1

'(xxxMaskedxxx);' должно быть, должно быть '' xxxMaskedxxx ";' Вы можете выполнить php-скрипт из perl, если установлена ​​версия 'php cli'. –

+0

@mpapec у вас есть образец, за которым я могу следовать? Я до сих пор не понимаю, как получить возврат из PHP-скрипта, используя php cli. –

+0

см. Образец ниже. php в режиме 'cli' принимает аргументы командной строки, которые хранятся в' $ argv' –

ответ

1

Perl вызова cli.php сценария с аргументами командной строки,

#!/usr/bin/perl 

my $content = `/usr/bin/php cli.php xxxMaskedxxx`; 

print $content; 

cli.php вторя назад получил аргумент

<?php 

// output first argument from command line 
print $argv[1]; 
1

Но $ response-> is_success возвращает ложь для обоих случаях?

В обоих случаях вы выводите по умолчанию HTTP status, который является «200 OK». Вам нужно указать output a status code, что указывает на сбой для is_success.

Когда я пытаюсь напечатать ответ, я подвожу этот

Это HTTP::Response object. Вам нужно изучить $response->decoded_content, если вы хотите получить текст из него.