SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Windows環境でのPerlとPHPの連携

PHPを使ったPerlスクリプトの実行、パラメータの受け渡しなど

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本の罫線の間の整形されたテキストとしてブラウザに表示されます。

ブラウザに表示されるテキスト
ブラウザに表示されるテキスト

次のページ
Perlスクリプト内で1つの関数を呼び出す

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Octavia Andreea Anghel(Octavia Andreea Anghel)

経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4169 2009/08/03 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー