UNIX版PHPはexif_read_dataがオプション扱い

phpspotで下記のようなサンプルがあったので現状使い道無いけど、将来ウェブアルバムとか作ることがあったら使うかもしれないので試してみた。

PHPで画像のEXIF情報を読み取るサンプルphpspot開発日誌
http://phpspot.org/blog/archives/2008/04/phpexif.html

結果、関数が組み込まれてなかった。。。GDとかJPEGライブラリ入れているのであると思っていたのが勘違いwググってみたらやはり、–enable-exifをつけてコンパイルしないといけないらしい。

php exif_read_data()が使用できないとは – Yaskey Diary
http://www.yaskey.cside.tv/mapserver/diary/diary.php?mode=main&COM=232

しょうがないので追加モジュールとしてインストールしようとしたら自宅BSDでは

Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.

とエラーが発生。確かにautoconfは今使ってないな。。。昔入れたけど不要になって消した。(元々OSに入ってるはずのm4はm4.orgにしたままだったwww)

下記が以前autoconf入れたときのメモだが、m4は–prefix=/usrで/usr/bin/m4にインストールされるようにしないと後で面倒です。デフォルトだとで/usr/local/bin/m4になってしまう。

autoconf automake libtoolをインストール

これはまた必要になったときにやってみよう。。。ソフトウェアの再利用とか大賛成だけど、どのライブラリを使用しているとか表示義務が欲しいですよね。ソースが見れるからって一々解析するのも面倒。

PHPにモジュールを追加

PHPにモジュールを追加

先日Apacheのモジュールを別途追加したばかりですが、今度はPHPでも同様の事をやってみたのでメモ。

例としてpdoとpdo_mysqlを入れます。
まずはPHPのソースに飛ぶ

# cd /usr/local/src/php-5.2.3/ext/pdo

# ls
CREDITS        config.m4     pdo.php                pdo_sql_parser.lo  pdo_stmt.lo
EXPERIMENTAL   config.w32    pdo_dbh.c              pdo_sql_parser.re  php_pdo.h
Makefile.frag  package2.xml  pdo_dbh.lo             pdo_sqlstate.c     php_pdo_driver.h
README         pdo.c         pdo_sql_parser.c       pdo_sqlstate.lo    php_pdo_int.h
TODO           pdo.lo        pdo_sql_parser.c.orig  pdo_stmt.c         tests

何もしてなければ上記の通り、configureファイルが無いのでphpizeする。

# which phpize
/usr/local/bin/phpize

# phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519

これでconfigureファイルができましたので設計します。

# ./configure –with-pdo

–with-pdoは無くてもできたかも。

# make
# make install
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20060613/
Installing header files:          /usr/local/include/php/
Installing PDO headers:          /usr/local/include/php/ext/pdo/

以上でpdoのインストールが終わりました。
続いてpdo_mysqlのインストールを行います。

# cd /usr/local/src/php-5.2.3/ext/pdo_mysql
# phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519

今度はmysqlに関連するモジュールのためmysqlがインストールされているディレクトリを指定します。
# ./configure –with-pdo-mysql=/usr/local/mysql/

# make
# make install

最後にphp.iniに下記2行を追加します。

extension=pdo.so
extension=pdo_pgsql.so

php -m コマンドで確認します。

# php -m
[PHP Modules]
ctype
curl
date
dom
ffmpeg
filter
gd
hash
iconv
json
libxml
mbstring
mysql
pcre
PDO
pdo_mysql
pdo_sqlite
posix
Reflection
session
SimpleXML
SPL
SQLite
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

参考:phpize で共有 PECL 拡張モジュールをコンパイルする方法
http://php.plus-server.net/install.pecl.phpize.html

 

最近PHPがフルボッコのようです

PHPが非難される流れは去年の後半あたりから把握してますが、PHP5以降は言語として特に非難される程のものもないような気がします。PHP本体のセキュリティホールとかは別ですが…。ただPHPプログラマーが訳も分からないまま叩かれているような気がしてちょっとかわいそう。

私も何故かここ3年程仕事で一番多く使った言語がダントツPHPで次がC++そしてPerlといった感じ。PHPが選ばれたのはクライアントや上流の決定による物ですが、理由は単純明快で「書くコード量が少なく開発効率が良いから」「誰にでも割り振れてアサインが楽だから」ということです。当然工数も費用も削減できて良いように思えますが正直コンピュータの動作や通信については理解の妨げになっているので学習者や初心者にはオススメしたくない言語です。あとVBでリストラになってPHP再チャレンジの人も同様です。

簡単であることと基礎的なものは別次元の内容なので学習の際にはこの部分を混同して欲しくない。PHP言語はウェブプログラミングする際に便利な組み込み関数や定義が容易されていて初心者でもすぐにある程度ちゃんとしたものが作れてしまう。だがそこにウェブプログラミングとしての基礎を学ぶことが出来ない。GETやPOSTをPHP言語上でどのように取得するか覚えても、HTTPプロトコル上でどのような形式で送信されていてプログラム内で切り抜き処理をしているかなんてPHPだけでは想像もつかないだろう。PerlやC言語であればそのへんも全部自分で考えて処理しなければならないので勉強になる。

数学に例えれば微分の公式覚えて、微分が出来るようになったけど微分の理論を全然理解してないと似ている。(というのが高校生時代の私…orz)

ゲーム制作スキルとなれば物理や数学の基礎からプログラミングの応用まで勉強すべき事があるのですが、RPGツクールやオーサリングツールだと簡単に作れてしまうみたいな。

だからPHPだけしかやってないと他の言語で同じ事を達成するにはコンピュータ理論や通信の基礎的な学習が必要だし、プログラミングに対しての理解の深さに差が出てきます。仕事で初めてプログラミングに触れてそれがPHPだった言う人も最近は多いのでこの機会にぜひPerlや他の言語にも挑戦してみてください。

最近は確かに学生時代までに趣味または専門授業でコンピュータ理論を勉強したことがなくこの業界にプログラマーとして就職している人も増えてきたので非難する前に勉強するチャンスをあげたほうが良いなと思いました。