天天看點

使用phpize建立php擴充 Cannot find config.m4

下面我來講講如何作一個php的擴充

  首先要有一個搭建好的php環境

  我把php的安裝在了/usr/local/php當然也通過

  php的一個配置php.ini的路徑但是要注意了

  用這種方法安裝的php擴充不能實作

  我們在php安裝以後的/usr/local/php/bin目錄

  找到這個檔案phpize稍後我們将用到他

  他就是個shell腳本你可以用vi phpize來檢視他的内容

  但是你要注意了這個腳本不是在哪裡都可以應用的

  [root@ns root]# phpize

  Cannot find config.m4.

  Make sure that you run /usr/local/bin/phpize in the top level source directory of the module

  你會看到這兩種結果實際上你檢視了這個腳本

  很輕松的就會發現是怎麼來處理的

  你的模擴充的時候最好

  放在/usr/local/php/php-5.3.28/ext下

  來執行他你在這裡也可以這樣/usr/local/php/bin/phpize來執行也可以

  phpize來執行

  我們在/usr/local/php/php-5.3.28/ext下找到這個工具

  來建立一個php擴充的一個架構

  [root@ns ext]#cd /usr/local/php/php-5.3.28/ext/

  [root@ns ext]# ./ext_skel --extname=sdomain

  Creating directory sdomain

  Creating basic files: config.m4 .cvsignore sdomain.c php_sdomain.h CREDITS EXPERIMENTAL tests/001.phpt sdomain.php [done].

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

  1. $ cd ..

  2. $ vi ext/sdomain/config.m4

  3. $ ./buildconf

  4. $ ./configure --[with|enable]-sdomain

  5. $ make

  6. $ ./php -f ext/sdomain/sdomain.php

  7. $ vi ext/sdomain/sdomain.c

  8. $ make

  Repeat steps 3-6 until you are satisfied with ext/sdomain/config.m4 and

  step 6 confirms that your module is compiled into PHP. Then, start writing

  code and repeat the last two steps as often as necessary.

    執行了這個步驟以後你會看到這樣的結果

  這樣以後我們會在這個目錄下生成一個目錄叫sdomain

  進入這裡面我們看看

  [root@ns ext]# cd sdomain/

  [root@ns sdomain]# ls

  config.m4 EXPERIMENTAL     sdomain.php  tests

  CREDITS  sdomain.c php_sdomain.h

  然後我們要修改檔案順序是

  configue.m4

  sdomain.c

  php_sdomain.h

  使用文本編輯器打開config.m4檔案,檔案内容大緻如下:

  dnl $Id$d

  dnl config.m4 for extension my_module

  dnl dont forget to call PHP_EXTENSION(my_module)

  dnl Comments in this file start with the string dnl.

  dnl Remove where necessary. This file will not work

  dnl without editing.

dnl If your extension references something external, use with:

  dnl PHP_ARG_WITH(my_module, for my_module support,

  dnl Make sure that the comment is aligned:

  dnl [ --with-my_module       Include my_module support])

  dnl Otherwise use enable:

  dnl PHP_ARG_ENABLE(my_module, whether to enable my_module support,

  dnl [ --enable-my_module      Enable my_module support])

  if test $PHP_MY_MODULE != no; then

  dnl If you will not be testing anything external, like existence of

  dnl headers, libraries or functions in them, just uncomment the

  dnl following line and you are ready to go.

  dnl Write more examples of tests here...

  PHP_EXTENSION(my_module, $ext_shared)

  Fi

  根據你自己的選擇将

  修改成

  PHP_ARG_WITH(my_module, for my_module support,

  [ --with-my_module       Include my_module support])

  或者将

修改成

  PHP_ARG_ENABLE(my_module, whether to enable my_module support,

  [ --enable-my_module      Enable my_module support])

        (其實就是将這部分的dnl去掉,在這個檔案裡dnl就是注釋的意思,相當于我們PHP裡面的#或// 另外把他中間的一句描術也去掉)

  我這裡用了後者

  然後儲存退出

  然後在編輯

  Vi my_module.c

  将檔案其中的下列代碼進行修改

/* Every user visible function must have an entry in my_module_functions[].

*/

function_entry my_module_functions[] = {

PHP_FE(say_hello,    NULL) /* ?添加着一行代碼 */

PHP_FE(confirm_my_module_compiled,   NULL) /* For testing, remove later. */

{NULL, NULL, NULL}   /* Must be the last line in my_module_functions[] */

};

  在檔案的最後添加下列代碼

PHP_FUNCTION(say_hello)

{

zend_printf("hello sdomain!");

}

再修改:php_sdomain.h

vi php_sdomain.h

在PHP_FUNCTION(confirm_my_module_compiled ); /* For testing, remove later. */ 這行的下面添加一行:

PHP_FUNCTION(say_hello); /* For testing, remove later. */

  儲存檔案退出

  然後我們就可以在這個目錄下使用上面的指令了

  /usr/local/php/bin/phpize

  執行以後會看到下面的

  [root@ns sdomain]# /usr/local/php/bin/phpize

  Configuring for:

  PHP Api Version:     20020918

  Zend Module Api No:   20020429

  Zend Extension Api No:  20050606

  [root@ns sdomain]#

  然後執行./configure --with-php-config=/usr/local/php/bin/php-config

  然後執行make

     make install

        然後他會把對應的so檔案生成放到PHP安裝目錄下面的一個檔案夾,并提示在在什麼地方,然後再把裡面的SO檔案拷到你存放SO檔案的地方

  即你在php.ini裡面的extension_dir所指定的位置

  最後一步是你在php.ini檔案中打開這個擴充

  extension=sdomain.so

  然後

  重新起動apache

  用phpinfo來察看一下ok了

本文轉自奔跑在路上部落格51CTO部落格,原文連結http://blog.51cto.com/qiangsh/1551038如需轉載請自行聯系原作者

qianghong000