きゃらりこ日誌

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ファイルの大きさ(ファイルサイズ)を取得
ローカルにダウンロードしてからファイルテスト演算子を使ってファイルサイズを取得するのがセオリーだが、今回は手抜きしてHTTPヘッダのContent-Lengthを抽出するという方法を取った。

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を取得し、表示

LWP::UserAgentの詳細はCPANのLWP::UserAgentを参照。


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

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


過去ログ:
2004年 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2005年 01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2006年 01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2007年 01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2008年 01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2009年 01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2010年 01月 02月 03月 06月 12月
2011年 01月
2015年 06月 07月 08月 09月 10月 11月 12月
2016年 01月 02月 03月 04月 05月 06月 07月 08月 09月
2017年 01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2018年 01月 02月 03月 04月 05月 06月