资讯专栏INFORMATION COLUMN

PHP扩展开发教程2 - 编写第一个扩展 hello world

Berwin / 667人阅读

摘要:二下载第一个扩展第一个扩展的源码已经在上准备好了,直接用命令克隆,或者手工下载都可以。第四步确认扩展已经安装成功使用命令可以查看目前已经安装的所有扩展。

PHP扩展是高级PHP程序员必须了解的技能之一,对于一个初入门的PHP扩展开发者,怎么才能开发一个成熟的扩展,进入PHP开发的高级领域呢?本系列开发教程将手把手带您从入门进入高级阶段。
本教程系列在linux下面开发(推荐使用centos),php版本用的是5.6,并假设您有一定的linux、git操作经验和c/c++基础。
有问题需要沟通的朋友请加QQ技术交流群32550793和我沟通。

我们使用容易上手的PHP-CPP框架来开发PHP扩展,如果您有一定的linux操作经验和c++基础,按照下面的步骤,相信用不了10分钟就能做出属于你自己的第一个扩展出来。
以下示范的操作都是在linux centos系统上完成的,并且已经事先安装了php5.6系列。

一、下载并安装 PHP-CPP

要想使用PHP-CPP编译属于您自己的php扩展,需要先下载PHP-CPP的源码并编译安装。
PHP-CPP有两个框架源码,分别叫 PHP-CPP(新版) 和 PHP-CPP-LEGACY。
PHP-CPP(新版)适合开发PHP-7的扩展,PHP-CPP-LEGACY则适合开发5.X系列的扩展,两套框架的接口一样,学会了其中一个就很容易做出兼容的PHP各版本的扩展出来。
下面我们的操作都以PHP-CPP-LEGACY为例。

如果你会git命令,可以直接在终端命令行敲入以下git命令即可。

# git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP-LEGACY.git

如果不会git也没关系,可以直接用浏览器打开该源码的github仓库网址,下载源码压缩包并解压即可,仓库网址是
https://github.com/CopernicaM...。

下载完成后,进入PHP-CPP-LEGACY的源码目录,敲入make命令编译源码,编译完成后会生成开发扩展所需要的相关类库。

# make

接着运行make install命令,把生成的类库和相关开发的头文件安装到linux系统里面去,一会儿编译扩展的时候就可以不用配置头文件和类库目录也能自动连接上了。

# sudo make install
二、下载第一个扩展 helloworld

第一个扩展 helloworld 的源码已经在github上准备好了,直接用git命令克隆,或者手工下载都可以。

# git clone https://github.com/elvisszhang/phpcpp_helloworld.git

进入helloworld源码目录,打开main.cpp,可以看到如下代码结构,已经都给加了中文注释。
其中最重要的就是 get_module 函数,它是扩展的入口函数。

#include 
#include 

//这是PHP里面可以调用的接口函数
void say_hello()
{
    //输出一段欢迎
    Php::out << "hello world from my first extension" << std::endl;
}

/**
 *  告诉编译器get_module是个纯C函数
 */
extern "C" {
    
    /**
     *  本函数在PHP进程一打开就会被访问,并返回一个描述扩展信息的PHP结构指针
     */
    PHPCPP_EXPORT void *get_module() 
    {
        // 必须是static类型,因为扩展对象需要在PHP进程内常驻内存
        static Php::Extension extension("helloworld", "1.0.0");
        
        //这里可以添加你要暴露给PHP调用的函数
        extension.add("say_hello");
        
        // 返回扩展对象指针
        return extension;
    }
}

test.php则是扩展测试用的一段php代码。


三、编译第一个扩展 helloworld

编译这个扩展很简单,在终端命令行下输入make命令即可。

# make
g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp
g++ -shared -o helloworld.so main.o -lphpcpp

不出意料的话,就会在源码目录下看到 helloworld.so 这个扩展文件了,可以发现这个文件很小,才14K而已。
不过现在如果你敲一下命令 php -m ,发现php的模块中并没有 helloworld 这个扩展,因为我们还没有把它安装到php的运行环境里。

四、安装第一个扩展 helloworld

我们这里暂时介绍手工安装扩展的方式。

第一步: 先用php-config命令确定一下扩展存放的位置

# php-config --extension-dir
/usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226

上面显示的是我服务器上扩展安装的位置,各人的服务器可能配置不一样。

第二步:然后把 helloworld.so 拷贝到扩展存放目录下。

# cp helloworld.so /usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226/

第三步:修改 php.ini 文件,启用 helloworld 扩展

打开 php.ini文件,加上以下配置项,在php.ini的任意地方新加一行即可。

extension = helloworld.so

第四步:确认 helloworld扩展已经安装成功

使用php -m命令可以查看php目前已经安装的所有扩展。

# php -m | grep helloworld
helloworld

从上面命令行的响应看,helloworld扩展已经安装成功了。

第五步:运行 test.php 确认注册函数能使用

还是在扩展的源码目录,运行以下命令

# php test.php
hello world from my first extension

从上面命令行的响应看,我们通过扩展向php注册的say_hello函数已经成功运行了,是不是感觉很简单,但现在的扩展只会打个招呼,还干不了什么正儿八经的事,我们后面给他完善一下,让他能做更多的事情。

参考文献

PHP-CPP安装以及hello world
PHP-CPP官网教程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28524.html

相关文章

  • PHP扩展开发教程1 - 相关开发技术对比及介绍

    摘要:四使用语言开发是我重点推荐的扩展开发框架,简明易懂,功能强大,开发效率高,代码易维护,执行速度快。优点三支持,的扩展开发有两套扩展开发框架,分别支持,,虽然框架代码有两个,但是接口却是一样的。 PHP扩展是高级PHP程序员必须了解的技能之一,对于一个初入门的PHP扩展开发者,怎么才能开发一个成熟的扩展,进入PHP开发的高级领域呢?本系列开发教程将手把手带您从入门进入高级阶段。本教程系列...

    alaege 评论0 收藏0
  • Zephir--最简单的php扩展开发工具

    摘要:更多关于的技术文章的扩展是用语言编写,是语言引擎,内核。见提供了一种类似的高级语言语法的方式,来自动生成扩展的语言代码,使编写扩展变得非常的简单。直接修改该文件的代码,使用原扩展的编辑方法也是可以滴。 更多关于PHP的技术文章http://www.codefrom.com/ php的扩展是用c语言编写,Zend是语言引擎,PHP内核。在实际编写php扩展的时候,需要使用大量的...

    dinfer 评论0 收藏0
  • 5分钟PHP扩展开发快速入门

    摘要:简单点,先来实现一个扩展的。接下来我们将使用它来生成我们的扩展的基本骨架。注意不要添加任何分号。有兴趣的同学可以自行研究一下静态编译是什么鬼在扩展目录中执行命令。一定要在扩展的目录执行才有效,否则将得到一个错误提示。 简单点,先来实现一个PHP扩展的hello world。注意,以下所有操作都是基于linux系统(推荐centos和ubuntu, Mac系统应该类似 ),PHP5.5以...

    RobinTang 评论0 收藏0
  • Zephir入门 —— Hello world

    摘要:概述是一个开源的用于简化扩展的创建和维护的语言。它使得不擅长的开发人员也能写出扩展。是缩写,读音为。然后我们在里调用方法正常的话会输出。至此我们也完成了我们的第一个扩展。 概述 Zephir是一个开源的用于简化PHP扩展的创建和维护的语言。它使得不擅长C/C++的PHP开发人员也能写出PHP扩展。Zephir是Zend Engine/PHP/Intermediate缩写,读音为zep...

    Vicky 评论0 收藏0
  • PHP7扩展开发入门

    摘要:下载源代码要开发扩展,需要先下载的源代码,一方面是因为我们的扩展一般会用到自身定义的函数和宏,另一方面我们可以利用官方提供的工具减少工作量。重点关注,,即可,最简单的场景下这三个文件就是一个扩展的全部组成部分了。 下载PHP源代码 要开发PHP扩展,需要先下载PHP的源代码,一方面是因为我们的扩展一般会用到PHP自身定义的函数和宏,另一方面我们可以利用官方提供的工具减少工作量。我下载了...

    ytwman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<