PHPからPerlスクリプトを呼び出す
PHPからPerlスクリプトを実行するには、shell_exec関数を利用します。この関数のプロトタイプは次のとおりです。
string shell_exec ( string $cmd )
shell_exec関数はコマンドシェルを使ってコマンドを実行し、その結果を文字列で返します。$cmdパラメータは、実行するコマンドを表します。
PHPがセーフモードで動作しているときは、shell_exec関数が無効になっています。
PHPからPerlスクリプトを呼び出すサンプルコードを以下に示します。ここで呼び出しているPerlスクリプトは、上で作成したサンプル「test.pl」です。このPerlスクリプトを呼び出すPHPアプリケーションは「test.php」です。なお、本稿で紹介するすべてのサンプルスクリプトは、記事先頭のリンクからダウンロードできます。
<?php
$result=shell_exec("C:\Perl\bin\perl.exe test.pl");
echo($result);
?>
このファイルを「test.php」という名前で保存し、それをブラウザで開くと、「Hello from ActivePerl!」というメッセージが表示されます。
スクリプトにデータを渡し、その結果を取得したいという場合も多いでしょう。次に示すPHPスクリプト(values.php)は、2つの整数(144、22)と1つの浮動小数点数(34.3445)をPerlスクリプトに渡します。Perlスクリプトは、これらの値を用いて数学的計算(合計、平均、平方根など)を実行し、結果を出力します。
<?php $result=shell_exec( "C:\Perl\bin\perl.exe values.pl 144 22 34.3445"); echo($result); ?>
上記のコードは、計算処理を実行するPerlスクリプト(values.pl)を呼び出します。このスクリプトのコードを以下に示します。
# Parameters sent by the PHP script $a=$ARGV[0]; $b=$ARGV[1]; $c=$ARGV[2]; print "The three parameters passed by the PHP script are: "; print $a." --- ".$b." --- ".$c."<br />"; #Exercise some of the Perl math functions #using the three parameters $a,$b,$c print "sum(a+b) ="; print $a+$b."<br />"; print "product(a*b) = "; print $a*$b."<br />"; print "average(a,b,c) = "; print (($a+$b+$c)/3); print "<br />"; print "sqrt(a) = "; print sqrt($a)."<br />"; print "int(c) = "; print int($c)."<br />"; print "log(a) = "; print log($a)."<br />"; 出力結果 The three parameters passed by the PHP script are: 144 --- 22 --- 34.3445 sum(a+b) =166 product(a*b) = 3168 average(a,b,c) = 66.7815 sqrt(a) = 12 int(c) = 34 log(a) = 4.969813299576
PHPからPerlスクリプトに対しては、引数を何個でも渡すことができます。Perl側ではこれらの引数を$ARGV[0]、$ARGV[1]・・・$ARGV[n]のようなポジショナル引数を使った形式で取り出します。上記の例では、この方法で$a、$b、$cに値を割り当てました。つまり、$ARGV[0]=144、$ARGV[1]=22、$ARGV[2]=34.3445となります。
この簡単な計算サンプルスクリプトにも、Perlスクリプトを使って出力を整形する処理が含まれています。この例ではHTMLの改行タグ(<br />)を生成しているだけですが、Perlスクリプトを使って、さらに複雑な出力フォーマットを生成することもできます。
PHP、HTML、Perl
次に紹介するアプリケーションは、PHPから呼び出されるPerlスクリプトを使って簡単なHTMLドキュメントを生成します。このHTMLコードを生成するのに使用するPHPスクリプト(perlPHP.php)とPerlスクリプト(perlHTML.pl)を以下に示します。
<?php
$result=shell_exec("C:\Perl\bin\perl.exe perlHTML.pl");
echo($result);
?>
# perlHTML.plのリスト # output some html code print "<html>"; print "<head><title>Perl -HTML</title></head>"; print "<body>"; print "<h4>This page comes from Perl </h4>"; print "Hello Everybody!"; print "</body>"; print "</html>";
この出力は、以下に示すように、2本の罫線の間の整形されたテキストとしてブラウザに表示されます。

