찾다
php教程php手册开发的第一个PHP扩展

开发的第一个PHP扩展

Jun 06, 2016 pm 07:49 PM
php다운로드개발하다확장하다소스 코드첫 번째

下载php源码php-5.4.23.tar.gz,解压,进入/home/hubo/php-5.4.23/ext/扩展目录 wget http://cn2.php.net/get/php-5.4.23.tar.gz/from/this/mirror tar -xzvf php-5.4.23.tar.gz cd php-5.4.23/ext/ 在ext目录中新建config.m4文件 PHP_ARG_ENABLE(heiyoubo,

下载php源码php-5.4.23.tar.gz,解压,进入/home/hubo/php-5.4.23/ext/扩展目录

wget http://cn2.php.net/get/php-5.4.23.tar.gz/from/this/mirror

tar -xzvf php-5.4.23.tar.gz

cd php-5.4.23/ext/

在ext目录中新建config.m4文件

<span>PHP_ARG_ENABLE(heiyoubo,
    [Whether to enable the </span><span>"</span><span>heiyoubo</span><span>"</span><span> extension],
    [  enable</span>-heiyoubo        Enable <span>"</span><span>heiyoubo</span><span>"</span><span> extension support])

</span><span>if</span> test $PHP_HEIYOUBO != <span>"</span><span>no</span><span>"</span>; <span>then</span><span>
    PHP_SUBST(HEIYOUBO_SHARED_LIBADD)
    PHP_NEW_EXTENSION(heiyoubo, heiyoubo.c, $ext_shared)
</span><span>fi</span>

在ext目录中新建heiyoubo.c文件

<span>#ifdef HAVE_CONFIG_H
#include </span><span>"</span><span>config.h</span><span>"</span>
<span>#endif</span>

<span>//</span><span>加载php头文件</span>
#include <span>"</span><span>php.h</span><span>"</span>


<span>#define</span> phpext_heiyoubo_ptr &heiyoubo_module_entry<span>

ZEND_FUNCTION(heiyoubo_hello)
{
    php_printf(</span><span>"</span><span>Hello World Heiyoubo!\n</span><span>"</span><span>);
}

</span><span>static</span> zend_function_entry heiyoubo_functions[] =<span> { 
    ZEND_FE(heiyoubo_hello,        NULL)
    { NULL, NULL, NULL }
};


</span><span>//</span><span>module entry</span>
zend_module_entry heiyoubo_module_entry =<span> { 
</span><span>#if</span> ZEND_MODULE_API_NO >= 20010901<span>
     STANDARD_MODULE_HEADER,
</span><span>#endif</span>
    <span>"</span><span>heiyoubo</span><span>"</span>, <span>//</span><span>这个地方是扩展名称,往往我们会在这个地方使用一个宏。</span>
    heiyoubo_functions, <span>/*</span><span> Functions </span><span>*/</span><span>
    NULL, </span><span>/*</span><span> MINIT </span><span>*/</span><span>
    NULL, </span><span>/*</span><span> MSHUTDOWN </span><span>*/</span><span>
    NULL, </span><span>/*</span><span> RINIT </span><span>*/</span><span>
    NULL, </span><span>/*</span><span> RSHUTDOWN </span><span>*/</span><span>
    NULL, </span><span>/*</span><span> MINFO </span><span>*/</span>
<span>#if</span> ZEND_MODULE_API_NO >= 20010901
    <span>"</span><span>2.1</span><span>"</span>, <span>//</span><span>这个地方是我们扩展的版本</span>
<span>#endif</span><span>
    STANDARD_MODULE_PROPERTIES
};

#ifdef COMPILE_DL_HEIYOUBO
ZEND_GET_MODULE(heiyoubo)
</span><span>#endif</span>

 

运行phpize,准备 PHP 扩展库的编译环境

[hubo@test15169x ~/php-5.4.23/ext]$ /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525

configure的时候要开启heiyoubo扩展,并且指定php-config的目录,获取所安装的 PHP 配置的信息

[hubo@test15169x ~/php-5.4.23/ext]$ ./configure --enable-heiyoubo --with-php-config=/usr/local/php/bin/php-config

[hubo@test15169x ~/php-5.4.23/ext]$ make

[hubo@test15169x ~/php-5.4.23/ext]$ make test

heiyoubo.so扩展已经生成到module目录

[hubo@test15169x ~/php-5.4.23/ext]$ ll modules/*
-rw-rw-r-- 1 hubo hubo 799 01-09 16:53 modules/heiyoubo.la
-rwxrwxr-x 1 hubo hubo 26K 01-09 16:53 modules/heiyoubo.so

将heiyoubo.so文件拷贝到php的扩展目录

[hubo@test15169x ~/php-5.4.23/ext]$ php -ini | grep extension_dir
extension_dir => /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525 => /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525

[hubo@test15169x ~/php-5.4.23/ext]$ cp  modules/heiyoubo.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

将heiyoubo.so加到php的扩展文件/usr/local/etc/cgi/php.ini中  extension = "heiyoubo.so"

[hubo@test15169x ~/php-5.4.23/ext]$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/cgi
Loaded Configuration File: /usr/local/etc/cgi/php.ini

[hubo@test15169x ~/php-5.4.23/ext]$ php -r 'var_dump(get_loaded_extensions());' | grep heiyoubo
string(8) "heiyoubo"

验证安装成功。执行C扩展中函数heiyoubo_hello();执行成功

[hubo@test15169x ~/php-5.4.23/ext]$ php -r 'heiyoubo_hello();'

Hello World Heiyoubo!

 

参考链接:

http://www.php.net/manual/zh/internals2.buildsys.configunix.php

https://github.com/walu/phpbook/blob/master/5.1.md           《Extending and Embedding PHP》中文版翻译      PHP扩展开发及内核应用

http://www.laruence.com/2009/04/28/719.html

http://www.php-internals.com/

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.