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の初期設定

仕事でPerl使う事があり、開発環境のDebianでCPANの設定をしてみる。

cpan は既に入っているようなので、 cpan コマンドを実行。

# cpan

cpanコマンドが使えない場合は、

# perl -MCPAN -e shell

「マニュアル設定しますか?」という質問に「no」と回答すると初期設定は完了。

# cpan

/etc/perl/CPAN/Config.pm initialized.

CPAN is the world-wide archive of perl resources. It consists of about
100 sites that all replicate the same contents all around the globe.
Many countries have at least one CPAN site already. The resources
found on CPAN are easily accessible with the CPAN.pm module. If you
want to use CPAN.pm, you have to configure it properly.

If you do not want to enter a dialog now, you can answer 'no' to this
question and I'll try to autoconfigure. (Note: you can revisit this
dialog anytime later by typing 'o conf init' at the cpan prompt.)

Are you ready for manual configuration? [yes] no

設定が失敗したら

以下のように設定ファイルを削除して、再度cpanを実行すれば、最初から設定が出来る。

# rm /etc/perl/CPAN/Config.pm
24
3月
2010