2011年9月15日木曜日

php extentionを作りたい

extensionを作る

① 手始めにPHPをソースからコンパイルしてみる。
$ sudo wget http://jp.php.net/get/php-5.3.8.tar.gz/from/this/mirror
$ sudo tar -xzvf php-5.3.8.tar.gz
$ cd php-5.3.8.tar.gz
$ (configureを実行でMakefileを作成、5.2.16のphpinfoから抜粋、丸っと貼り付けで動いたw)
'./configure' '--host=i686-redhat-linux-gnu' '--build=i686-redhat-linux-gnu' '--target=i386-redhat-linux' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-curl' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-wddx' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-mime-magic' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter' '--disable-json' '--without-pspell'

※エラー
error: Could not find pcre.h in /usr

パス違うのかな。。
$sudo find / -name pcre.h
/usr/local/otp_src_R13B01/erts/emulator/pcre/pcre.h
/usr/local/php-5.3.8/ext/pcre/pcrelib/pcre.h

yumでは入っていたけど、ソースが無いからヒットしないのかな。。
--with-pcre-regex=/usr/local/php-5.3.8/ext/pcre/pcrelib/pcre.h
でもう一度configureした。しかし、今度は、
error: Could not find libpcre.(a|so) in /usr/local/php-5.3.8/ext/pcre/pcrelib/
と言われた。
findで探したがなかった。
つまり、pcreもソースからインストールしないと行けないということか。

pcre.hが見つからないエラー
pcreインストール

$ sudo wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.13.tar.gz
$ sudo tar -xvzf pcre-8.13.tar.gz
$ cd pcre-8.13
$ sudo .configure
$ sudo make
$ sudo make install

pcreできたっぽい。
じゃ、
--with-pcre-regex=/usr/local/pcre-8.13
としてもう一度configure.
おかしいね。
やっぱり、libpcre.(a|so)見つからない。
過去の質問
--with-pcre-regex=/usr/local
としてもう一度configure.
できたっぽい。

じゃ、make
そして、make install

試しに $ php -v

【エラー】
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/20090626/pdo_mysql.so' - /usr/lib/20090626/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
こんなのがいっぱい出てきた。。
読み込めない。では、それを設定しているファイルを探す。

$ grep -R 20090626 /usr/*
/usr/bin/php-config:extension_dir='/usr/lib/20090626'

こいつか。
逆に、「pdo_mysql.so」こいつがいるパスを探す

$ find / -name pdo_mysql.so
/usr/lib/php/modules/pdo_mysql.so

ここだ。では、下記に変更してみる。
/usr/bin/php-config:extension_dir='/usr/lib/php/modules'

駄目だ。

php.iniにextension_dir書いてみるか?
extension_dir=/usr/lib/php/modules

extensionは指定した所を見るようになったが、
そもそも、使えるモジュールじゃない?


今日は諦めて元戻すか。今度リベンジする。

yum removeで一回全部消した。
・php
・php-common
・php-cli
・php-mcrypt
・php-ldap
・php-mbstring
・php-mysql
・php-pdo
・php-pear
・php-soap
・php-xml
たぶん復活。

0 件のコメント:

コメントを投稿