SHOEISHA iD

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

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

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

japan.internet.com翻訳記事

Windows環境でのPerlとPHPの連携

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

PHPオブジェクトのメンバをPerlに渡す

 ここにSimpleClassという名前のPHPクラスのインスタンスがあるとします。このオブジェクトのメンバをPerlスクリプトに渡すにはどうすればよいでしょうか。SimpleClassの定義を以下に示します。

<?php
class SimpleClass
{
    // member declaration
    public $phone = 3274927349;
    public $name = 'El';
    public $surname = 'Ramon';
    
    // method declaration
    public function displayVar() {
      //...
    }
}
$simpleClass = new SimpleClass();
//$simpleClass->displayVar();
?>

 上述のサンプルで紹介したシリアライズメソッドを利用すれば、以下に示すように、SimpleClassのインスタンスをシリアライズし、その結果をPerlに渡すことができます(メンバの名前と値を取り出すには、このPerlスクリプトがデシリアライズ処理を実装していなければなりません)。

...
echo "Perl call ...\n";
//Serializing the object
$var = serialize($simpleClass);
$result=shell_exec(
   "C:\Perl\bin\perl.exe serialize.pl $var");
echo($result);
...[/s]

このコードで呼び出されるPerlスクリプト(serialize.pl)は次のとおりです。

[sg]
$var = $ARGV[0];
print "$var";

 また、次のobjectPerl.phpスクリプトに示すように、クラスのメンバを明示的に渡すこともできます。

<?php
class SimpleClass
{
    // member declaration
    public $phone = 3274927349;
    public $name = 'El';
    public $surname = 'Ramon';
    
    // method declaration
    public function displayVar() {
      //...
    }
}
$simpleClass = new SimpleClass();
//$simpleClass->displayVar();
echo "Perl  call ...<br />";
$cmd = "C:\Perl\bin\perl.exe objectPerl.pl
   $simpleClass->name
   $simpleClass->surname $simpleClass->phone";
$result = shell_exec($cmd);
echo($result);
?>

 インスタンスのメンバを明示的に渡す場合、それを受け取るPerlスクリプト(objectPerl.pl)は、次のようになります。

print "The name is: ".$ARGV[0];
print "<br /> The surname is: ".$ARGV[1];
print "<br /> The phone number is: ".$ARGV[2];

 出力結果は次のとおりです。

Perl call ...
The Name is: El
The Surname is: Ramon
The phone number is: 3274927349

Cygwinを利用する

 Cygwinは、Windowsシステム上でLinux環境を利用することが可能なツールです。Cygwinには、Linux APIエミュレーションレイヤの役割を果たすDLL(cygwin1.dll)が含まれています。このDLLは、Linux APIの主要機能およびLinuxのルック&フィールを備えたツール群を提供します。これらの機能やツールはすべて、Linuxの公式仕様に準拠しています。

 Cygwinはhttp://www.cygwin.comからダウンロードできます。ダウンロードされるファイルには、インストール手順を指示してくれるsetup.exeファイルも含まれます。必要なCygwinパッケージをすべて選択してインストールしたら、Cygwin.batファイルをダブルクリックしてCygwinをコマンドプロンプトで実行します。図2に示す画面が表示されます。

図2 Cygwinコマンドプロンプト:Cygwin.batファイルを使ってCygwinを実行すると、Cygwinコマンドプロンプトが表示される
図2 Cygwinコマンドプロンプト:Cygwin.batファイルを使ってCygwinを実行すると、Cygwinコマンドプロンプトが表示される

 Cygwinを利用すれば、シェルコマンドスクリプトを実行する、任意のPCにリモートログインする、Windowsマシン上のPosize/Linux/UNIXシェルから問題を修正する、といったことが可能になります。PHPアプリケーション内でCygwinを利用するには、次のようにPerl.exeファイルへのパスを設定します。

${CYGWIN_HOME}\bin\Perl.exe

 Cygwinを通じてPerlスクリプトを実行するPHPスクリプトは次のようになります。

<?php
$result=shell_exec(
   "C:\Cygwin\bin\Perl.exe {Perl_script_name}.pl");
echo($result);
?>

 Perl_script_nameの部分は、本稿のダウンロードサンプルに含まれる任意のPerlスクリプトと置き換えることができます。

 以上、PHPからPerlを呼び出すためのサンプルをいくつか紹介しました。さまざまなタイプの引数(文字列、数値、配列、オブジェクト)を使ってPHPからPerlスクリプトを呼び出したり、Perlスクリプトでサブルーチンを呼び出したりするのは難しくないことがお分かりいただけたと思います。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー