« [ZT]如何备份、还原或移动 Outlook 数据 | 首 页 | 转贴: vi的使用之汇总(By 张微波 ) »

2006 年 06 月 12 日

OpenPNE之GD安装记录

| 分类: 服务器日志 Server Log |

老板要俺安装个 OpenPNE , 无奈之下试验了一下。
安装完毕后发现不能上传图片, Google 了一下,找到了一个解决方案,顺便在这里记录一下。

服务器原本的PHP配置:

'./configure'
'--with-mysql=/usr/local/mysql'
'--with-apxs2=/usr/local/apache2/bin/apxs'
'--with-openssl=/usr/local/ssl'
'--enable-mbstring=all'
'--enable-mbregex'
'--with-zlib'
'--with-dom'
'--with-oci8-instant-client=/usr/local/kdx/instantclient10_1'
'--enable-sigchild'
发现没有安装 GD library,于是补上。当然特别要注意的是 jpeg 的支持。

JPEG Library 的安装:

# wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
# tar -zxvf jpegsrc.v6b.tar.gz
# cd jpeg-6b
# ./configure --enable-shared
# make && make install
这里如果忘记了 --enable-shared , 会导致 GD 在 configure 的时候找不到 jpeg library。(虽然这里不使用自己编译的 GD)

libpng 的安装:

# wget ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.2.10-no-config.tar.gz
# tar -zxvf libpng-1.2.10-no-config.tar.gz
# cd libpng-1.2.10
# cp ./scripts/makefile.linux .
# mv makefile.linux makefile
# make && make install
  • Trouble shooting:
  • 关于 GD library,由于 PHP 自带 GD library ,所以建议使用自带的 GD,同时添加上以上安装的 jpeg 和 png 的 library 的 config。 如果使用 --with-gd=/usr/local/gd(例)强行定制 path,会在编译中出现错误。
    ext/gd/gd.lo(.text+0x1198): In function `zif_imagecolormatch':
    /usr/local/src/php-4.4.2/ext/gd/gd.c:836: undefined reference to `gdImageColorMatch'
    ext/gd/gd.lo(.text+0x2b68): In function `zif_imagerotate':
    /usr/local/src/php-4.4.2/ext/gd/gd.c:1149: undefined reference to `gdImageRotate'
    ext/gd/gd.lo(.text+0x5801): In function `zif_imageline':
    /usr/local/src/php-4.4.2/ext/gd/gd.c:2228: undefined reference to `gdImageAALine'
    ext/gd/gd.lo(.text+0x6874): In function `zif_imageellipse':
    /usr/local/src/php-4.4.2/ext/gd/gd.c:2367: undefined reference to `gdImageEllipse'
    ext/gd/gd.lo(.text+0x9795): In function `zif_imageantialias':
    /usr/local/src/php-4.4.2/ext/gd/gd.c:3904: undefined reference to `gdImageAntialias'
    collect2: ld returned 1 exit status
    make: *** [sapi/cli/php] Error 1


    然后重新编译一下PHP,其实只要加上一个
    --with-gd \
    --with-jpeg-dir \
    --with-png-dir
    就OK了。

    注意:
    PHP编译中,如果使用 --with-gd 将编译 php 自带的 GD library,从而得到以下结果
    gd-bundled
    添加了 --with-jpeg-dir --with-png-dir 后的 phpinfo()
    gd-withjpge


  • 参考资料:
  • OpenPNE で画像アップ成功
    OpenPNE で画像アップ成功
    結局、PHP が標準で JPEG をサポートしていなかっただけで・・・
    [OpenPNE]
    一切、画像がアップ出来ない状況だったので調査&対応しました。

    画像のアップロードで実行される do.php から呼ばれている webapp/lib/t_framework/module_execute.php の中を見て、どこで落ちてしまうのかをチェック。どうも、画像をアップすると lib/tejimaya/db_common.php からの結果が返ってこない様子。
    そこで、今度は db_common.php の中の関数をチェック。その中の t_check_image_format 関数の中で呼ばれている imagecreatefromjpeg 関数が反応しないことをやっと突き止めた。何せ、PHP のソースをこんなに真面目に読んだのも初めてなので、ここまでで半日を費やしました。(^^; とほほほ・・・(Perl なら 15分で済んでそうな内容だ・・・(^^;)

    で、imagecreatefromjpeg 関数。
    この関数は GD ライブラリを使うようなので、phpinfo() で gd の状況をチェックしてみると、GIF Read Support、GIF Create Support、PNG Support は enabled なのに、JPEG ファイルに関しては何の表示も無し・・・。試しに GIF ファイルや PNG ファイルをアップしてみると無事アップ出来た。JPEG だけ駄目なのね。とほほほ・・・

    ググってみると、今時の PHP は JPEG を標準サポートしていないようです。何でですかねぇ???Windows BMP ファイルは標準サポートのようなので、いったい何を考えているのやら・・・です。

    ちなみに OpenPNE を動かしている FreeBSD 機には、ちゃんと Jpeglib がインストールされています。
    /var/db/pkg/jpeg-6b_3/+CONTENTS を見ると、/usr/local 以下にインストールされていることが判ります。確かに、/usr/local/lib/libjpeg.a が存在しています。
    そこで、-with-jpeg-dir=/usr/local オプションをつけて PHP の再 make をすることになります・・・やれやれ。(^^;

    ということで、
    ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pgsql --enable-mbstring --enable-mbregex --with-dom --with-zlib-dir=/usr/local/include --with-iconv=/usr/local --with-gd --enable-zend-multibyte --with-mysql=/usr/local/lib/mysql --with-jpeg-dir=/usr/local
    というオプション付きで PHP を configure し、改めて make, make install したところ、gd 情報に JPG Support enabled が追加され、無事、JPEG 画像をアップ出来るようになりました。やれやれ・・・

    いやぁ、でも、こうやって異常原因を見ていくと、けっこう言語仕様がわかってきて良いという面もあります。漠然とソースを眺めていても身には付きませんから。

    しかし、何せ PHP のステートメントもよく知らないし、当然 PHP 用の統合開発環境のようなものも持ってませんから、状況調べるのに、ソース内に、
    @$file = fopen('/tmp/pne_debug_log', "a");
    fputs($file, 'm=' . $_REQUEST['m'] . "\n");
    fclose($file);
    みたいなログ吐く処理を埋め込みまくるという原始的な方法でデバッグしました。(^^;
    他人に見られると格好悪いので、そろそろ Eclipse の PHP プラグインなんか試してみようかな・・・と思う今日この頃。(でも、一人でやってると秀丸エディタとかでぱぱっと作るのが一番楽なんだよね)

    (END)

    评论 (1 条)

    kaugummi:

    kaugummi
    2006年06月22日 12:39

    你好,我也在玩OpenPNE,可以交流一下,hehe...

    发表评论

    (如果您还为在此成功留言,也许是因为需要管理员逐一审核留言内容后放可看到您的评论。请稍后并感谢您的耐心等待。)

    阅览更多文章请访问 首页过去的存档