きゃらりこ日誌

2018年06月

インターネット / 技術 / メモ

perlのちょっとしたテクニック

DiaryCGI nicky!にHTML5化改造を施したり、全面UTF-8化したり、nicky!用RSSFeed CGIをPodcast対応にさせたときに調べた内容のまとめ。

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/perl

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を削除
MP3::Infoを使うと、サンプリング周波数・ビットレート、VBR・CBRの判別、チャンネル数(1ch・2ch)、ステレオ・ジョイントステレオ等の判別、ID3タグの読み書きをすることができる。
詳細はCPANのMP3::Infoを参照。
PHPで再生時間を取得したいのなら、PHP Calculate Duration of MP3 :: zedwood.comを参照。


別サーバに置いてあるmp3ファイルの大きさ(ファイルサイズ)を取得
sample.3.cgi
#!/usr/bin/perl

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を取得し、表示
ローカルにダウンロードしてからファイルテスト演算子を使ってファイルサイズを取得するのがセオリーだが、今回は手抜きしてHTTPヘッダのContent-Lengthを流用するという方法を取った。
LWP::UserAgentの詳細はCPANのLWP::UserAgentを参照。


Perlモジュールをインストールする方法
レンタルサーバに使いたいPerlモジュールが入っていないときに、CPANモジュールを使わないでインストールする方法。

使いたいPerlモジュールから○○○.pmを取り出し、Perlスクリプトと同じ場所にインストールする。
なお上のサンプルスクリプトで使ったMP3::Infoのようにモジュール名に「::」を含む場合、./MP3/Info.pmのようにディレクトリを作ってインストールする。
ものによっては、○○○.pm以外のファイルも一緒にインストールする必要があったり、他のモジュールと依存関係が生じることもあるが、たいていは上記の方法でうまくいく。
[ | この記事のURL ]