./configure --prefix=/usr/local/php \
--with-config-file-path=/etc \
--enable-opcache \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--without-pdo-sqlite \
--without-sqlite3 \
--with-mysql-sock=/tmp/mysql.sock \
--with-curl \
--enable-mbstring \
--with-iconv \
--with-mhash \
--with-mcrypt \
--with-openssl \
--with-gd \
--enable-sockets \
--with-gettext \
--with-zlib \
--enable-zip \
--enable-soap \
--with-xmlrpc
www用户需要已存在
编译常见问题:
1.configure: error: xml2-config not found. Please check your libxml2 installation.
解决办法:安装 libxml2-dev
2.configure: error: Please reinstall the BZip2 distribution
解决办法:安装 bzip2-dev
3.configure: error: Please reinstall the libcurl distribution -easy.h should be in <curl-dir>/include/curl/
解决办法:安装 libcurl4-gnutls-dev
4.configure: error: jpeglib.h not found.
解决办法:安装 libjpeg-dev
5.configure: error: png.h not found.
解决办法:安装 libpng-dev
6.configure: error: libXpm.(a|so) not found.
解决办法:安装 libxpm-dev
7.configure: error: freetype.h not found.
解决办法:安装 libfreetype6-dev
8.configure: error: Your t1lib distribution is not installed correctly. Please reinstall it.
解决办法:安装 libt1-dev
9.configure: error: mcrypt.h not found. Please reinstall libmcrypt.
解决办法:安装 libmcrypt-dev
10.configure: error: Cannot find MySQL header files under yes.
Note that the MySQL client library is not bundled anymore!
解决办法:安装 libmysql++-dev
11.configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
解决办法:安装 libxslt1-dev
创建的模块为hello
1.cd /php5.5.13/ext/
2.执行./ext_skel --extname=hello,将在该目录生成 ~/php-5.5.13/ext/hello
3.编辑 config.m4 文件,去掉第16行和第18行的注释(注释符号为 dnl 。)
16: PHP_ARG_ENABLE(hello, whether to enable hello support,
17: dnl Make sure that the comment is aligned:
18: [ --enable-hello Enable hello support])
4.进入/hello目录,执行/usr/local/php/bin/phpize,生成configure文件
正常:
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
错误:
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
解决办法:安装autoconf,再次执行phpize
5.修改php_hello.h,在 PHP_FUNCTION(confirm_hello_compiled); 之下加入函数声明
PHP_FUNCTION(nova_hello);
6.打开 nova.c,在zend_function_entry nova_functions[]加入以下内容
const zend_function_entry hello_functions[] = {
PHP_FE(confirm_hello_compiled, NULL) /* For testing, remove later. */
PHP_FE(hello_hello, NULL)
PHP_FE_END /* Must be the last line in nova_functions[] */
};
然后在nova.c文件末尾添加nova_hello函数内容
PHP_FUNCTION(hello_hello){
long int a,b,c;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"ll",&a,&b )==FAILURE){
return;
}
c=a+b;
RETURN_LONG(c);
}
7.编译扩展模块,进入/php5.5.13/ext/hello/目录,执行
./configure --with-php-config=/usr/local/php/bin/php-config
Make
Make install
编译成功后,.so文件存放在
[root@localhost nova]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
8.打开php.ini 添加一行 extension=hello.so
9.重启php-fpm,或者apache
10.检测是否成功加载
/usr/local/php/bin/php -m|grep hello查看是否有 hello.so
或
<?php
echo hello_hello(1,2);
phpinfo();
?>
注意:
1.CLI模式下执行测试文件,最好加上php.ini文件
/usr/local/php/bin/php -c /etc/php.ini hello.php
2.PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20121212/hello.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20121212/hello.so: cannot open shared object file: No such file or directory in Unknown on line 0
解决办法:修改php.ini里extension_dir,添加/usr/local/lib/php/extensions/no-debug-non-zts-20121212/