purazumakoiの[はてなブログ]

技術メモから最近はライフログも増えてきてます。

suPHPでのPHP環境でモジュールを追加インストールする

参照
PHP用にcURLをインストール、設定する | 渋谷生活

べースの環境

CloudCore VPS CV01を使ってみた その3 suPHPでphp4.4、5.2、5.3を同居させる の続き2 PHP切り替え - purazumakoiの[はてなブログ]

今回実行した流れ

################################################################################
#
# phpにcurlモジュール 追加インストール
#
################################################################################
yum install curl-devel

#ソースの場所に
cd /root/php-5.2.17/ext/curl

/usr/local/bin/phpize-5.2.17

./configure   --with-php-config=/usr/local/bin/php-config-5.2.17
make
make test
make install

#↓ここまで実行すると以下のような ここに保存したよというメッセージが出る
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20060613/


#php.iniで
#↓---------------
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613/"
extension=curl.so
#-----------------

を末尾に追加する

1個めの環境はいけたが

2個めの環境はmake時に

/root/php-5.2.17/ext/curl/php_curl.h:84: error: expected specifier-qualifier-list before 'zend_fcall_info_cache'
/root/php-5.2.17/ext/curl/php_curl.h:94: error: expected specifier-qualifier-list before 'zend_fcall_info_cache'

省略

/root/php-5.2.17/ext/curl/interface.c:2152: error: 'php_curl_write' has no member named 'stream'
/root/php-5.2.17/ext/curl/interface.c:2154: error: 'php_curl_write' has no member named 'stream'
/root/php-5.2.17/ext/curl/interface.c:2155: error: 'php_curl_write' has no member named 'stream'
/root/php-5.2.17/ext/curl/interface.c:2157: error: 'php_curl_read' has no member named 'stream'
/root/php-5.2.17/ext/curl/interface.c:2158: error: 'php_curl_read' has no member named 'stream'

みたいなエラーが出た。。。

そこで追って見る
zend_fcall_info と zend_fcall_info_cache の定義 - Sarabande.jp

うまく言ったほうだと
vim /usr/local/include/php/Zend/zend_API.h の372行目あたりに

typedef struct _zend_fcall_info {
        size_t size;
        HashTable *function_table;
        zval *function_name;
        HashTable *symbol_table;
        zval **retval_ptr_ptr;
        zend_uint param_count;
        zval ***params;
        zval **object_pp;
        zend_bool no_separation;
} zend_fcall_info;

typedef struct _zend_fcall_info_cache {
        zend_bool initialized;
        zend_function *function_handler;
        zend_class_entry *calling_scope;
        zval **object_pp;
} zend_fcall_info_cache;

とかある

zend_API.hを見比べてみると

うまくいかない方の最初のほう

/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |

うまく行く方の最初のほう

/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |

うまくいかない方はどうも /usr/local/include/php/Zend/ 以下の内容が古いようなので、全部入れ替えてあげたらmakeが通った

環境によってはそれでも、実行時に

/usr/local/bin/php-cgi-5.2.17: symbol lookup error: /usr/local/lib/php/extensions/no-debug-non-zts-20060613/curl.so: undefined symbol: TSRMLS_SET_CTX

とかいうエラーが出たりするのでそのときはもう再コンパイルするしかないかもしれない。