本文目录一览:
如何用C语言编写PHP扩展的详解
- 预定义
在
home
目录,也可以其他任意目录,写一个文件,例如caleng_module.def
。 内容是你希望定义的函数名以及参数:int a(int x,int y) string b(string str,int n)
- 到PHP源码目录的
ext
目录:
执行命令,生成对应扩展目录:cd /usr/local/php-5.4.0/ext/
./ext_skel --extname=caleng_module --proto=/home/hm/caleng_module.def
- 修改
config.m4
: 去掉dnl
的注释:PHP_ARG_ENABLE(caleng_module, whether to enable caleng_module support, Make sure that the comment is aligned: [ --enable-caleng_module Enable caleng_module support])
- 修改
caleng_module.c
: 代码如下:/* {{{ proto int a(int x, int y) */ PHP_FUNCTION(a) { int argc = ZEND_NUM_ARGS(); int x; int y; int z; if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE) return; z = x + y; RETURN_LONG(z); } /* }}} */ /* {{{ proto string b(string str, int n) */ PHP_FUNCTION(b) { char *str = NULL; int argc = ZEND_NUM_ARGS(); int str_len; long n; char *result; char *ptr; int result_length; if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) return; result_length = str_len * n; result = (char *) emalloc(result_length + 1); ptr = result; while (n--) { memcpy(ptr, str, str_len); ptr += str_len; } *ptr = '\0'; RETURN_STRINGL(result, result_length, 0); } /* }}} */
- 生成扩展库:
cd ./caleng_module /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install
- 到PHP的对应
extensions
目录:
该目录下有生成的cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
caleng_module.so
文件。 - 修改
php.ini
:
在cd /usr/local/php/lib/
php.ini
中增加扩展信息:extension=caleng_module.so
- 重启Apache:
/usr/local/apache2/bin/apachectl restart
- 检查加载:
/usr/local/php/bin/php -m
- PHP调用:
输出echo a(1,2);
3
就说明成功了!
原文内容
Linux下用C开发PHP扩展:
- 首先下载PHP源码包,假设源码包目录为:
/software/php-5.2.13
。cd /software/php-5.2.13/ext
- 假设我们要开发一个名为
caleng_module
的扩展,该扩展包含两个函数:a
:处理两个整型相加b
:处理字符串重复输出
- 首先编写一个函数定义文件,该文件编写函数原型后缀为
.def
,假设为:caleng_module.def
:int a(int x, int y) string b(string str, int n)
- 通过扩展骨架生成器,将在
ext
目录下自动建立扩展目录caleng_module
:./ext_skel --extname=caleng_module --proto=caleng_module.def
- 修改配置文件:
将如下行的注释标签vim /software/php-5.2.13/ext/caleng_module/config.m4
dnl
去掉:PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support, Make sure that the comment is aligned: [ --enable-myfunctions Enable myfunctions support])
- 完善函数
a
和b
的功能:PHP_FUNCTION(a) { int x, y, z; int argc = ZEND_NUM_ARGS(); if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE) return; z = x + y; RETURN_LONG(z); } PHP_FUNCTION(b) { char *str = NULL; int argc = ZEND_NUM_ARGS(); int str_len; long n; char *result; char *ptr; int result_length; if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) return; result_length = str_len * n; result = (char *) emalloc(result_length + 1); ptr = result; while (n--) { memcpy(ptr, str, str_len); ptr += str_len; } *ptr = '\0'; RETURN_STRINGL(result, result_length, 0); }
- 编译安装,假设PHP的安装目录为:
/usr/localhost/webserver/php
:
现在将在cd /software/php-5.2.13/ext/caleng_module /usr/localhost/webserver/php/bin/phpize ./configure --with-php-config=/usr/localhost/webserver/php/bin/php-config make make install
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613
目录下生成caleng_module.so
文件。 在php.ini
配置文件中加入:extension=caleng_module.so
PHP是用什么语言编写的?
PHP是一种语言,其底层主要是用C语言实现的。 PHP混合了C、Java、Perl等语法特点。如果你学过其中任意一个,再来学PHP会更容易上手。 一般推荐先学C语言,再学PHP。在掌握C语言和数据结构的基础上,学习PHP会更简单,只要掌握PHP的语法即可进行初步开发。
怎么编写PHP程序?
首要条件是你必须有一个正在运行的支持PHP的Web服务器。假定你的服务器上所有PHP文件的扩展名为.php3
。
PHP的安装
有关PHP的安装配置,可以查阅相关资源。
语法
PHP语言近似于C语言,语法上借鉴了C语言。你可以混合编写PHP代码和HTML代码,不仅可以将PHP脚本嵌入到HTML文件中,还可以将HTML标签嵌入到PHP脚本中。 以下是几种嵌入PHP代码的方法:
<? ... ?>
<?php ... ?>
<script language="php"> ... </script>
<% ... %>
注意:使用<? ... ?>
时可能会与XML发生冲突,是否支持这种简写形式取决于PHP的设置。
语句与注释
PHP中用分号;
分隔语句。PHP支持C、C++和Unix风格的注释方式:
/* C,C++风格多行注释 */
// C++风格单行注释
# Unix风格单行注释
echo 和 print
PHP中最简单的交互是通过echo
和print
语句实现的。两者功能几乎相同,但有一个重要区别:echo
可以同时输出多个字符串,而print
只能输出一个字符串。
示例:
$a = "hello";
$b = "world";
echo "a", "b";
print "a", "b"; // 这里会报错
一个简单的实例
<HTML>
<HEAD>
<TITLE>
<?php
echo "Hello World!";
?>
</TITLE>
</HEAD>
<BODY>
<H1>First PHP page</H1>
<HR>
<?php
// Single line C++ style comment
/*
printing the message
*/
echo "Hello World!";
# Unix style single line comment
?>
</BODY>
</HTML>
建议找一本PHP书籍,静下心来研究一周,再不断实践!