PHPからPerlのモジュールを使ってバーコードを生成

※ 「PECL-PerlでPHPからPerlを実行」の続きです。

PHPからPerlのGD::Barcode::NW7を使ってバーコードを生成してみます。

まずはファイルを作って・・

# vi nw7.php

中身はこれ。

<?php
/**
 * PECL-Perl sample
 */
$param = date('YmdHis');

// バーコード生成モジュールの呼び出し
$perl = new Perl();
$perl->eval( 'use GD::Barcode::NW7' );
$perl->eval( 'binmode STDOUT;' );
$output = $perl->eval( 'GD::Barcode::NW7->new( "' . $param . '" )->plot->png' );

// ファイルに出力
$fp = fopen( 'nw7.png' , 'w' );
fwrite( $fp , $output );
fclose( $fp );
?>

コンソールから実行!!

# php nw7.php

生成されたバーコードはこれ。

うまくいきました~

25
3月
2010

PECL-PerlでPHPからPerlを実行

PECL-Perlを使うと、PHPからPerlを実行できるようです。

PECLが入ってなかったのでインストール

今回はDebianなのでaptitude。

# aptitude install php-pear

PECL-Perlをインストールしてみる

# pecl install perl
Package "perl" Version "1.0.0" does not have REST xml available
Cannot initialize 'perl', invalid or missing package file
Package "perl" is not valid
install failed
#

あらら失敗。
いろいろ調べましたが、こうなってしまうとソースからコンパイルしないといけないみたい。

PECL-Perlをソースからコンパイル

コンパイル時にphpizeが必要なのでphp5-devをインストールする。

# aptitude install php5-dev

ちなみにCentOSやRedHatなどの場合は

# yum install php5-devel

準備OK!
それではソースからコンパイル!

# wget http://pecl.php.net/get/perl-1.0.0.tgz
# tar -xvzf perl-1.0.0.tgz
# cd perl-1.0.0
# phpize
# ./configure --prefix=/usr

ここで、WARNINGが出た。

checking for re2c... no
configure: WARNING: You will need re2c 0.9.11 or later if you want to regenerate PHP parsers.

re2c が必要みたい。

# aptitude install re2c

もう一度、コンパイルのやり直し

# wget http://pecl.php.net/get/perl-1.0.0.tgz
# tar -xvzf perl-1.0.0.tgz
# cd perl-1.0.0
# phpize
# ./configure --prefix=/usr
# make
# make install

で、Apacheを再起動。

# /etc/init.d/apache2 restart

これでOKかなと思った矢先、こんなWarningが出てた。

# php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20060613+lfs/perl.so' - /usr/lib/php5/20060613+lfs/perl.so: cannot open shared object f
ile: No such file or directory in Unknown on line 0
PHP 5.2.0-8+etch16 (cli) (built: Nov 24 2009 11:14:47)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
#

よくよくconfigureの結果を見てみると

checking for perl support... yes, shared
Note (probably harmless): No library found for -lperl

むむむ。これかなぁ・・?
いろいろ調べてlibperl-devが必要らしいので入れてみる。

# aptitude install libperl-dev

そしておもむろに再起動。

# /etc/init.d/apache2 restart

こんどはうまくいったみたい。

サンプルを実行してみる

ここを参考に、まずはphpファイルを作成。

vi test01.php

中身はこれ。

<?php
print "Hello from PHP!\n";   // PHPから出力
$perl = new Perl();          // Perlをオブジェクト化
$perl->require("test01.pl"); // Perlのファイルを読み込んでEval
print "Bye\n";
?>

次にperlファイルを作成。

vi test01.pl

中身はこれ。

#!/usr/bin/perl
print "Hello World from Perl!!!\n"

そして実行!!

# php test01.php
Hello from PHP!
Hello World from Perl!!!
Bye

やったー。なんとか出来ました><

via: http://d.hatena.ne.jp/tageo/20100323/1269328888
via: http://d.hatena.ne.jp/kazukichop/20061120
via: http://www.linuxquestions.org/questions/debian-26/cant-compile-xchat-on-debian-sarge-perl-problem-259654/

25
3月
2010

CPANでGD::Barcode::NW7をインストール

NW7でバーコード生成をする為に、CPANのモジュールを入れる。

さっそくインストール

# cpan
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')

cpan> install GD::Barcode::NW7

すると、Warningが出た。

System call "/usr/bin/wget -O - "ftp://ftp.perl.org/pub/CPAN/authors/01mailrc.txt.gz"  > /root/.cpan/sources/authors/01mailrc.txt"
returned status 1 (wstat 256)
Warning: expected file [/root/.cpan/sources/authors/01mailrc.txt.gz] doesn't exist
No external ftp command available

どうやら、ダウンロード先URLが ftp://ftp.perl.org/pub/CPAN になっていて、そこにダウンロード対象のモジュールが無いみたい。

CPANの設定を確認してみる

cpan> o conf
CPAN::Config options from /etc/perl/CPAN/Config.pm:
    commit             Commit changes to disk
    defaults           Reload defaults from disk
    init               Interactive setting of all options

    build_cache        10
    build_dir          /root/.cpan/build
    cache_metadata     1
    cpan_home          /root/.cpan
    cpan_version_check 1
    dontload_hash
    ftp                /usr/bin/ftp
    ftp_proxy
    getcwd             cwd
    gpg                /usr/bin/gpg
    gzip               /bin/gzip
    histfile           /root/.cpan/histfile
    histsize           100
    http_proxy
    inactivity_timeout 0
    index_expire       1
    inhibit_startup_message 0
    keep_source_where  /root/.cpan/sources
    lynx
    make               /usr/bin/make
    make_arg
    make_install_arg
    makepl_arg         INSTALLDIRS=site
    ncftp
    ncftpget
    no_proxy
    pager              /usr/bin/less
    prerequisites_policy ask
    scan_cache         atstart
    shell              /bin/bash
    tar                /bin/tar
    term_is_latin      1
    unzip              /usr/bin/unzip
    urllist
    wget               /usr/bin/wget

urllist が空でした。
urllist が空の場合は、ダウンロード先URLは ftp://ftp.perl.org/pub/CPAN になるようです。

ダウンロード先URLを追加

以下のサイトから国内のダウンロード先URLを選んで追加する。
http://www.cpan.org/SITES.html

cpan> o conf urllist push ftp://ftp.nara.wide.ad.jp/pub/CPAN/
cpan> o conf commit
commit: wrote /etc/perl/CPAN/Config.pm

再度、NW7をインストール

cpan> install GD::Barcode::NW7

サンプルを動かしてみる。

nw7.pl というファイル名でサンプルを作成してバーコードを生成してみる。

# vi nw7.pl

中身はコレ。

#!/use/bin/perl

use GD::Barcode::NW7;
$data = '1234567890123';
binmode STDOUT;
print GD::Barcode::NW7->new($data)->plot->png;
# perl nw7.pl
Can't locate object method "Small" via package "GD::Font" (perhaps you forgot to load "GD::Font"?) at /usr/local/share/perl/5.8.8/GD/Barcode/NW7.pm line 83.

GD::Font が入ってないみたいですね。

libgd-gd2-perl をインストール

Debianなのでapt-getで。

# apt-get install libgd-gd2-perl
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  libgd-gd2-perl
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 58 個。
218kB のアーカイブを取得する必要があります。
展開後に追加で 586kB のディスク容量が消費されます。
取得:1 http://ftp.debian.org etch/main libgd-gd2-perl 1:2.34-1 [218kB]
218kB を 2s で取得しました (93.3kB/s)
未選択パッケージ libgd-gd2-perl を選択しています。
(データベースを読み込んでいます ... 現在 14610 個のファイルとディレクトリがインストールされています。)
(.../libgd-gd2-perl_1%3a2.34-1_i386.deb から) libgd-gd2-perl を展開しています...
libgd-gd2-perl (2.34-1) を設定しています ...
#

再度、サンプルを実行

# perl nw7.pl

今度はうまくいったので、画像に出力してみる。

# perl nw7.pl > nw7.png

無事、PerlでNW7のバーコードを生成できました~

24
3月
2010