開發環境信息 1、基本環境信息如下: [root@localhost lib] cat /etc/os release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PR ...
開發環境信息
1、基本環境信息如下:
[root@localhost lib]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
2、開發環境最好已經安裝好了PHP,這樣在編譯、測試等環節就不會遇到不必要的麻煩了。
建議在Linux環境下開發PHP擴展,上邊列出來的是我使用的開發環境信息。
PHP版本信息
[root@localhost lib]# php -v
PHP 7.0.17 (cli) (built: Mar 30 2017 07:50:59) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
Hello World擴展開發
(1)、cd
進入PHP源碼目錄下的ext目錄;
(2)、創建擴展程式骨架信息,執行下邊命令就會在當前目錄下創建好一個名為hello的擴展目錄,該目錄下即為這個擴展的骨架代碼;
./ext_skel --extname=hello
(3)、修改hello目錄下的config.m4文件,修改信息如下:
dnl If your extension references something external, use with:
dnl PHP_ARG_WITH(hello, for hello support,
dnl Make sure that the comment is aligned:
dnl [ --with-hello Include hello support])
dnl Otherwise use enable:
dnl PHP_ARG_ENABLE(hello, whether to enable hello support,
dnl Make sure that the comment is aligned:
dnl [ --enable-hello Enable hello support])
dnl
是註釋符號,這裡把最後三行的註釋去掉就行了。
(4)、修改hello目錄下的hello.c文件,實現hello方法,修改內容如下:
找到PHP_FUNCTION(confirm_hello_compiled)
,在其上面增加如下代碼:
PHP_FUNCTION(hello)
{
zend_string *strg;
strg = strpprintf(0, "hello word");
RETURN_STR(strg);
}
找到PHP_FE(confirm_hello_compiled, NULL)
,在其上面增加如下代碼:
PHP_FE(hello, NULL)
編譯安裝
在hello目錄下執行如下命令:
phpize
./configure
make && make install
執行成功後,會在執行信息的最後看到下邊這句話,這句話告知了生成的擴展的存放目錄,cd
進去可以看到編譯好的擴展hello.so
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20151012/
然後去修改php.ini(這個文件通常是在/usr/local/lib目錄下)文件,在擴展信息那邊加上extension = hello.so
,保存後執行php -m
就可以看到hello這個擴展了
幾個註意點如下
(1)、在執行phpize
之前可以先執行whereis phpize
確認下phpize的實際位置;
(2)、在執行phpize
的時候可能會提示下邊信息:
[root@localhost hello]# /usr/local/bin/phpize
Configuring for:
PHP Api Version: 20151012
Zend Module Api No: 20151012
Zend Extension Api No: 320151012
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
出現這個問題最簡單的解決辦法就是分別安裝下m4和autoconf,安裝命令如下:
yum install m4
yum install autoconf
測試擴展
直接在控制台輸入php -r "echo hello();"
,看到輸出 hello word 就表示成功啦^_^