PerlからPHPを呼び出す
sample1.cgi(呼ぶ側)#!/usr/bin/perl
$str = `/usr/bin/php -f ./test.php sample1.php X`; # sample1.phpに引数Xをつけて呼び出し、返ってきた値を$strに格納
print "Content-Type: text/html\n\n"; # HTTPヘッダ出力
print($str);
sample1.php(呼び出される側)
<?php
$get = $argv[1]; // 引数をもらう
// 何らか処理をする
echo $return; // 何らかの値を返す
?>
別サーバに置いてあるmp3ファイルの再生時間(長さ)を取得
sample2.cgi#!/usr/bin/perlMP3::Infoを使うと、サンプリング周波数・ビットレート、VBR・CBRの判別、チャンネル数(1ch・2ch)、ステレオ・ジョイントステレオ等の判別、ID3タグの読み書きをすることができる。
use MP3::Info; # Perlモジュール MP3::Infoの使用を宣言
`/usr/local/bin/wget -q -O tmp.mp3 http://example.com/sample2.mp3`; # wgetを使って、http://example.com/sample2.mp3をローカルにダウンロードし、tmp.mp3に改名
$info = get_mp3info("tmp.mp3") -> {TIME}; # MP3::Infoで再生時間を、MM:SS形式で取得
print "Content-Type: text/html\n\n";
print "$info"; # 再生時間を表示
unlink "tmp.mp3"; # 用済みになったtmp.mp3を削除
詳細はCPANのMP3::Infoを参照。
PHPで再生時間を取得したいのなら、PHP Calculate Duration of MP3 :: zedwood.comを参照。
別サーバに置いてあるmp3ファイルの大きさ(ファイルサイズ)を取得
sample.3.cgi#!/usr/bin/perlローカルにダウンロードしてからファイルテスト演算子を使ってファイルサイズを取得するのがセオリーだが、今回は手抜きしてHTTPヘッダのContent-Lengthを流用するという方法を取った。
use LWP::UserAgent; # Perlモジュール LWP::UserAgentを使用
$ua = LWP::UserAgent->new;
print "Content-Type: text/html\n\n";
print $ua->simple_request( HTTP::Request->new(GET => http://example.com/sample3.mp3) )->headers->header("Content-Length"); # HTTPヘッダからContent-Lengthを取得し、表示
LWP::UserAgentの詳細はCPANのLWP::UserAgentを参照。
Perlモジュールをインストールする方法
レンタルサーバに使いたいPerlモジュールが入っていないときに、CPANモジュールを使わないでインストールする方法。使いたいPerlモジュールから○○○.pmを取り出し、Perlスクリプトと同じ場所にインストールする。
なお上のサンプルスクリプトで使ったMP3::Infoのようにモジュール名に「::」を含む場合、./MP3/Info.pmのようにディレクトリを作ってインストールする。
ものによっては、○○○.pm以外のファイルも一緒にインストールする必要があったり、他のモジュールと依存関係が生じることもあるが、たいていは上記の方法でうまくいく。