【使用bash定位PHP扩展文件夹】教程文章相关的互联网学习教程文章

[翻译][php扩展开发和嵌入式]第14章-php中流的访问

访问流PHP用户空间中所有的文件I/O处理都是通过php 4.3引入的php流包装层处理的. 在内部, 扩展代码可以选择使用stdio或posix文件处理和本地文件系统或伯克利域套接字进行通信, 或者也可以调用和用户空间流I/O相同的API.流的概览通常, 直接的文件描述符相比调用流包装层消耗更少的CPU和内存; 然而, 这样会将实现某个特定协议的所有工作都堆积到作为扩展开发者的你身上. 通过挂钩到流包装层, 你的扩展代码可以透明的使用各种内建的流...

[翻译][php扩展开发和嵌入式]第7章-接受参数【图】

权利声明此译本在不获利的情况下, 可以无限制自由传播.除了几个"预览"的例外, 你迄今处理的扩展函数都很简单, 只有返回. 然而, 多数函数并非只有一个目的. 你通常会传递一些参数, 并希望接收到基于值和其他附加处理的有用的响应.zend_parse_parameters()的自动类型转换和上一章你看到的返回值一样, 参数的值也是围绕着对zval引用的间访展开的. 获取这些zval*的值最简单的方法就是使用zend_parse_parameters()函数.调用zend_parse_p...

[翻译][php扩展开发和嵌入式]第15章-php中流的实现

实现流php的流最强力的特性之一是它可以访问众多数据源: 普通文件, 压缩文件, 网络透明通道, 加密网络, 命名管道以及域套接字, 它们对于用户空间以及内部都是统一的API.php流的表象之下对于给定的流实例, 比如文件流和网络流, 它们的不同在于上一章你使用的流创建函数返回的php_stream结构体中的ops成员.typedef struct _php_stream {...php_stream_ops *ops;... } php_stream;php_stream_ops结构体定义的是一个函数指针集合以及一...

[翻译][php扩展开发和嵌入式]第16章-有趣的流

有趣的流php常被提起的一个特性是流上下文. 这个可选的参数甚至在用户空间大多数流创建相关的函数中都可用, 它作为一个泛化的框架用于向给定包装器或流实现传入/传出额外的信息.上下文每个流的上下文包含两种内部消息类型. 首先最常用的是上下文选项. 这些值被安排在上下文中一个二维数组中, 通常用于改变流包装器的初始化行为. 还有一种则是上下文参数, 它对于包装器是未知的, 当前提供了一种方式用于在流包装层内部的事件通知.ph...

[翻译][php扩展开发和嵌入式]第8章-在数组和哈希表上工作

在数组和哈希表上工作在C语言中, 有两种不同的基础方法用来在一个结构体中存储任意数量的独立数据元素. 两种方法都有赞成者和反对者.向量 Vs. 链表应用的编写通常基于特定类型数据的特性的选择, 需要存储多少数据, 以及需要多快速度的检索. 为了能够有对等的认知, 我们先来看看简单的看看这些存储机制.向量向量是一块连续的内存空间, 它们包含的数据有规律的间隔. 向量最常见的例子就是字符串变量(char *或char []), 它包含了一个接...

[翻译][php扩展开发和嵌入式]第17章-php源代码的配置和链接

配置和链接所有前面示例中的代码, 都是你曾经在php用户空间编写过代码的C语言的独立版本. 如果你做的项目需要和php扩展进行粘合, 那么你就至少需要链接一个外部库.autoconf在一个简单的应用中, 你可能已经在你的Makefile中增加了下面这样的CFLAGS和LDFLAGS.CFLAGS = ${CFLAGS} -I/usr/local/foobar/include LDFLAGS = ${LDFLAGS} -lfoobar -L/usr/local/foobar/lib想要构建你的应用却没有libfoobar的人, 或将libfoobar安装到其他位...

[翻译][php扩展开发和嵌入式]第18章-php的扩展自动生成

扩展生成毫无疑问你已经注意到, 每个php扩展都包含一些非常公共的并且非常单调的结构和文件. 当开始一个新扩展开发的时候, 如果这些公共的结构已经存在, 我们只用考虑填充功能代码是很有意义的. 为此, 在php中包含了一个简单但是很有用的shell脚本.ext_skel切换到你的php源代码树下ext/目录中, 执行下面的命令:jdoe@devbox:/home/jdoe/cvs/php-src/ext/$ ./ext_skel extname=sample7稍等便可, 输出一些文本, 你将看到下面的这些输出...

[翻译][php扩展开发和嵌入式]第19章-设置宿主环境

设置宿主环境现在你已经了解了PHPAPI的世界, 并可以使用zval以及语言内部扩展机制执行很多工作了, 是时候转移目标用它做它最擅长的事情了: 解释脚本代码.嵌入式SAPI回顾介绍中, php构建了一个层级系统. 最高层是提供用户空间函数和类库的所有扩展. 同时, 其下是服务API(SAPI)层, 它扮演了webserver(比如apache, iis以及命令行接口cli)的接口.在这许多sapi实现中有一个特殊的sapi就是嵌入式sapi. 当这个sapi实现被构建时, 将会创建一...

[翻译][php扩展开发和嵌入式]第1章-php的生命周期【图】

php的生命周期在常见的webserver环境中, 你不能直接启动php解释器; 一般是启动apache或其他webserver, 由它们加载php处理需要处理的脚本(请求的.php文档).一切都从sapi开始尽管看起来有所不同, 但实际上CLI的行为和web方式一致. 在命令行中键入php命令将启动"命令行sapi", 它实际上就像一个设计用于服务单请求的迷你版webserver. 当脚本运行完成后, 这个迷你的php-webserver终止并返回控制给shell.启动和终止这里的启动和终止过程分...

[翻译][php扩展开发和嵌入式]第20章-php的高级嵌入式

高级嵌入式php的嵌入式能够提供的可不仅仅是同步的加载和执行脚本. 通过理解php的执行模块各个部分是怎样组合的, 甚至给出一个脚本还可以回调到你的宿主应用中. 本章将涉及SAPI层提供的I/O钩子带来的好处, 展开你已经从前面的主题中获取到信息的执行模块进行学习.回调到php中除了加载外部的脚本, 和你在上一章看到的类似, 你的php嵌入式应用, 下面将实现一个类似于用户空间eval()的命令.int zend_eval_string(char *str, zval *ret...

[翻译][php扩展开发和嵌入式]第2章-变量的里里外外

变量的里里外外每种编程语言共有的一个特性是存储和取回信息; php也不例外. 虽然许多语言要求所有的变量都要在使用之前被定义, 并且它们的类型信息是固定的, 然而php允许程序员在使用的时候创建变量, 并且可以存储任意类型语言能够表达的信息. 并且还可以在需要的时候自动的转换变量类型.因为你已经使用过用户空间的php, 因此你应该知道这个概念是"弱类型". 本章, 你将看到这些信息在php的父语言----c(C的类型是严格的)中是怎样编码...

[翻译][php扩展开发和嵌入式]第3章-内存管理【图】

内存管理php和c最重要的区别就是是否控制内存指针.内存在php中, 设置一个字符串变量很简单: <?php $str = hello world; ?>, 字符串可以自由的修改, 拷贝, 移动. 在C中, 则是另外一种方式, 虽然你可以简单的用静态字符串初始化: char *str = "hello world"; 但是这个字符串不能被修改, 因为它存在于代码段. 要创建一个可维护的字符串, 你需要分配一块内存, 并使用一个strdup()这样的函数将内容拷贝到其中.{ char *str; str = strd...

[php扩展开发和嵌入式]第4章-安装构建环境

安装构建环境现在你可能至少已经有一个已安装的php, 并且已经使用它做基于web的应用开发了. 你可能已经从php.Net下载了win32构建并运行在iis或windows版的apache上, 或者使用你的*nix(Linux, bsd, 或其他遵循POSIX的发行)发行版的包管理系统安装了第三方创建的二进制.构建php除非你是下载源码包自己编译, 否则你肯定会错过一些知识点.*nix工具C开发者工具集中必不可少的第一个工具是C的编译器. 你的发行版中可能会默认包含一个, 如...

[翻译][php扩展开发和嵌入式]第5章-您的第一个扩展

你的第一个扩展每一个php扩展的构建至少需要两个文件: 一个configuration文件, 它告诉编译期要构建哪些文件以及需要什么外部的库, 还需要至少一个源文件, 它执行实际的工作.剖析扩展实际上, 通常会有第二个或第三个配置文件, 以及一个或多个头文件. 对于你的第一个扩展, 你需要添加每种类型的一个文件并使用它们工作.配置文件要开始了, 首先在你的php源代码目录树的ext/目录下创建名为sample的目录. 实际上这个新的目录可以放在任何...

[翻译][php扩展开发和嵌入式]第6章-返回值【图】

返回值用户空间函数利用return关键字向它的调用空间回传信息, 这一点和C语言的语法相同.例如:function sample_long() { return 42; } $bar = sample_long();当sample_long()被调用时, 返回42并设置到$bar变量中. 在C语言中的等价代码如下:int sample_long(void) { return 42; } void main(void) { int bar = sample_long(); }当然, 在C语言中你总是知道被调用的函数是什么, 并且基于函数原型返回, 因此相应的你要定义...