[ PHP 内核与扩展开发系列] PHP 启动与终止那点事:全局变量的定义和使用

这一章节,我们将学习如何在 PHP 扩展中使用全局变量。 在扩展中定义全局变量 首先,我们需要在扩展的头文件中(默认是 php_*.h)中定义所有的全局变量。举个例子,比如我们要定义一个 unsigned long 类型的全局变量,可以这么做: ZEND_BEGIN_MODULE_GLOBALS(sample4) unsigned long counter; ZEND_END_MODUL…

[ PHP 内核与扩展开发系列] PHP 启动与终止那点事:常量的底层实现

在脚本中使用扩展的一个方便之处是,人们可以改变自己定义的常量,你可以通过 define() 函数来定义一个常量。在内核中,我们将会使用 REGISTER_*_CONSTANT() 的家族函数来注册常量。 对于自定义的大多数常量来说,你可能希望在程序初始化的时候便定义这些常量: PHP_MINIT_FUNCTION(sample4) { REGISTER_STRING_CONSTANT(“…

[ PHP 内核与扩展开发系列] PHP 启动与终止那点事:MINFO 与 phpinfo() 函数

如果你并不打算做出一个只有你自己使用的扩展,那么你可能需要告诉用户一些关于你的扩展的信息。比如:其环境和特定版本的可用功能、版本信息、作者信息,以便在发生问题的时候可以寻求帮助,甚至可以加上一个 LOGO 等等。 如果你仔细看过 phpinfo() 或者 php -i 的输出,相信你已经注意到,所有这些信息会组合成一个格式良好的、易于解析输出的数据块。你的扩展可以轻松地通过模块信息函数 …

[ PHP 内核与扩展开发系列] PHP 启动与终止那点事:一次请求的生命周期

在前面的章节里,你已经学会了如何使用 MINIT 函数在 PHP 加载模块的共享库时来执行初始化任务。在第一章,你还了解到扩展里其他三个函数:和 MINIT 函数对应的 MSHUTDOWN 函数,以及在每个页面请求开始和结束时候调用的方法 —— RINIT 函数和 RSHUTDOWN 函数。 除了上面说到的四个函数,还有两个函数只用于处理单个线程的启动和关闭,它们只作用于线程环境。 回顾…

[ PHP 内核与扩展开发系列] 第一个 PHP 扩展:编写函数

前面我们已经生成好了一份扩展框架,但它是没有什么实际作用。一个扩展的作用可大了去了,既可以操作 PHP 中的变量、常量,还可以定义函数、类、方法、资源等。先让我们从函数说起吧! ZEND_FUNCTION()宏函数 ZEND_FUNCTION() 宏函数也可以写成 PHP_FUNCTION(),但 ZEND_FUNCTION() 更前卫、标准一些,但两者是完全相同的。 #define P…

[ PHP 内核与扩展开发系列] 第一个 PHP 扩展:编译扩展

我们已经在上一节准备好了需要编译的源文件,接下来需要的便是把它们编译成目标文件了。 在 *nix 下编译安装 第一步:我们需要根据 config.m4 文件生成 configure 脚本、Makefile 等文件,这一步由 phpize 来帮我们做: $ /usr/local/php54/bin/phpize Configuring for: PHP Api Version: 20100…

[ PHP 内核与扩展开发系列] 第一个 PHP 扩展:扩展的基本结构

每一个 PHP 扩展都至少需要两个文件:一个配置文件和一个源文件。配置文件用来告诉编译器应该编译哪几个文件,以及编译本扩展是否需要的其它库。 配置文件 才开始,我们先用最快的(不是最标准的)的方式来建立一个代码最少的扩展。在 PHP 源码文件夹的 ext 目录下创建一个新的文件夹,这里我取的名字叫做 academy,它往往就是我们扩展的名字。其实这个文件夹可以放在任何一个位置,但是为了我…

[ Laravel 5.4 文档 ] 综合话题 —— 通知

1、简介 除了支持发送邮件之外,Laravel 还支持通过多种传输通道发送通知,这些通道包括邮件、短信(通过 Nexmo)以及 Slack 等。通知可以存储在数据库以便后续在 Web 界面中显示。 通常,通知都是很短的、用于告知用户应用中所发生事件的消息。例如,如果你在开发一个计费应用,则需要通过邮件或短信等渠道给用户发送“账单支付”通知。 2、创建通知 在 Laravel 中,每个通知…

[ Laravel 5.4 文档 ] 综合话题 —— 邮件

1、简介 Laravel 基于 SwiftMailer 库提供了一套干净、清爽的邮件API。Laravel 为 SMTP、Mailgun、SparkPost、Amazon SES、PHP 的 mail 函数,以及sendmail 提供了驱动,从而允许你快速通过本地或云服务发送邮件。 邮件驱动预备知识 基于 API 的驱动如 Mailgun 和 SparkPost 通常比 SMTP 服务器…

[ Laravel 5.4 文档 ] 综合话题 —— 文件系统&云存储

1、简介 Laravel 基于 Frank de Jonge 开发的 PHP 包 Flysystem 提供了强大的文件系统抽象。Laravel 文件系统集成对使用驱动处理本地文件系统进行了简化,这些驱动包括Amazon S3,以及 Rackspace 云存储。此外,在这些存储选项间切换非常简单,因为对不同系统而言,API 是一致的。 2、配置 文件系统配置文件位于 config/file…

123