程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP擴展-擴展的生成和編譯,php擴展生成編譯

PHP擴展-擴展的生成和編譯,php擴展生成編譯

編輯:關於PHP編程

PHP擴展-擴展的生成和編譯,php擴展生成編譯


首先說明一下,PHP擴展有兩種編譯方式:
方式一:在編譯PHP時直接將擴展編譯進去
方式二:擴展被編譯成.so文件,在php.ini裡配置加載路徑;

以下開始說明創建PHP擴展並編譯的步驟:
下載PHP源碼,並解壓,在源碼的根目錄下開始操作,
1. 使用ext_skel生成擴展框架,如下:

➜ php-5.6.24 cd ~/Downloads/tmp/php-5.6.24
➜ php-5.6.24 cd ext
➜ ext ./ext_skel --extname=myfirstext

 

ext_skel在執行後,會提示開發者後續的操作步驟,這個操作步驟是擴展的兩種編譯方式裡的方式一的步驟, 如下:

To use your new extension, you will have to execute the following steps:

1.  $ cd ..
2.  $ vi ext/plogger/config.m4
3.  $ ./buildconf
4.  $ ./configure --[with|enable]-plogger
5.  $ make
6.  $ ./sapi/cli/php -f ext/plogger/plogger.php
7.  $ vi ext/plogger/plogger.c
8.  $ make

2. 修改文件ext/myfirstext/config.m4
重點看line10-18的代碼,用於設置./configure時啟用此擴展的命令選項,將其中line16和line18的dnl刪掉,把dnl理解為注釋符。

14 dnl Otherwise use enable:
15
16 dnl PHP_ARG_ENABLE(myfirstext, whether to enable myfirstext support,
17 dnl Make sure that the comment is aligned:
18 dnl [ --enable-myfirstext Enable myfirstext support])
19
20 if test "$PHP_MYFIRSTEXT" != "no"; then
21 dnl Write more examples of tests here...

以上兩步驟是公共的,以下將分別介紹編譯PHP擴展的兩種方式,
方式一:編譯PHP時直接將擴展編譯進去
3. 在源碼根目錄下執行./buildconf,如下
4. 在源碼根目錄下執行./configure –enable-myfirstext
為了減少編譯時間,可以在configure階段指明不編譯某些模塊,比如:

./configure --without-iconv --enable-debug --enable-myfirstext --disable-cgi --enable-cli --without-pear --disable-xml --without-mysql

5. 在源碼根目錄下執行make
注意編譯成功後,別執行make install了,因為至此,擴展myfirstext已經編譯成功,並且已經生成了相應的php二進制文件了,它在./sapi/cli/php

方式二:擴展被編譯成.so文件,在php.ini裡配置加載路徑
3. 在擴展目錄ext/myfirstext/下執行phpize命令
4. 在擴展目錄ext/myfirstext/下執行./configure –enable-myfirstext命令
5. 在擴展目錄ext/myfirstext/下執行make
執行make後會在ext/myfirstext/modules下生成對應的.so文件,在php.ini中配置好加載此文件即可。

校驗擴展是否加載成功
執行./sapi/cli/php -f ext/myfirstext/myfirstext.php
或者通過php -m列出所有擴展,查看是否有myfirstext, 執行命令:./sapi/cli/php -m | grep myfirstext
通過以上校驗,說明擴展編譯成功了。但是到目前為止,還沒有編輯過c相關的代碼,一切都是ext_skel默認生成的,查看這個擴展myfirstext包含哪些函數呢?如下:

➜ php-5.6.24 ./sapi/cli/php -r 'print_r(get_extension_funcs("myfirstext"));'

OK, 目前為止熟悉了PHP擴展框架的生成,配置,和編譯。接下來就要往擴展myfirstext裡添加一個自己的函數。

 

qrcode_for_gh_61c6224cfae9_258

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved