forked from netkiller/netkiller.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathext.html
More file actions
executable file
·166 lines (126 loc) · 10.7 KB
/
Copy pathext.html
File metadata and controls
executable file
·166 lines (126 loc) · 10.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>第 9 章 PHP Extension 扩展开发</title><link rel="stylesheet" type="text/css" href="/docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><meta name="keywords" content="php, pear, pecl, phar" /><link rel="home" href="index.html" title="Netkiller PHP 手札" /><link rel="up" href="index.html" title="Netkiller PHP 手札" /><link rel="prev" href="frameworks/doctrine.html" title="8.7. Doctrine" /><link rel="next" href="PHP_FUNCTION.html" title="9.2. PHP_FUNCTION" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">第 9 章 PHP Extension 扩展开发</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="frameworks/doctrine.html">上一页</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="PHP_FUNCTION.html">下一页</a></td></tr></table><hr /></div><table xmlns="" width="100%" border="0"><tr><td align="left"><a href="http://netkiller.github.io/">Home</a> |
<a href="http://netkiller.sourceforge.net/">Mirror</a> |
<a href="/search.html">Search</a></td><td><a href="http://netkiller-github-com.iteye.com/">ITEYE 博客</a> |
<a href="http://my.oschina.net/neochen/">OSChina 博客</a> |
<a href="http://rline.blog.51cto.com/">51CTO 博客</a></td><td><form id="searchbox_008589143145807374698:f5uprauilyy" action="/search.html"><input type="hidden" name="cx" value="008589143145807374698:f5uprauilyy" /><input type="hidden" name="cof" value="FORID:11" /><input name="q" type="text" size="25" style="border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(126, 157, 185); border-right-color: rgb(126, 157, 185); border-bottom-color: rgb(126, 157, 185); border-left-color: rgb(126, 157, 185); padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; background-image: url(http://www.google.com/cse/intl/en/images/google_custom_search_watermark.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: 0% 50%; background-repeat: no-repeat no-repeat; " /><input type="submit" name="sa" value="Search" /><input name="siteurl" type="hidden" value="http://netkiller.sourceforge.net/" /></form><script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_008589143145807374698%3Af5uprauilyy"></script></td></tr></table><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="ext"></a>第 9 章 PHP Extension 扩展开发</h1></div></div></div><div class="toc"><p><strong>目录</strong></p><dl class="toc"><dt><span class="section"><a href="ext.html#extension.exampe">9.1. Extension Example</a></span></dt><dt><span class="section"><a href="PHP_FUNCTION.html">9.2. PHP_FUNCTION</a></span></dt><dt><span class="section"><a href="PHP_INI.html">9.3. PHP_INI</a></span></dt><dt><span class="section"><a href="PHP_MINFO_FUNCTION.html">9.4. PHP_MINFO_FUNCTION</a></span></dt></dl></div>
<p>创建一个扩展只需要下面几个步骤</p>
<pre class="screen">
# cd php-5.4.14/ext/
# ./ext_skel --extname=netkiller
# cd netkiller
# /srv/php-5.4.8/bin/phpize
# ./configure --enable-netkiller --with-php-config=/srv/php-5.4.8/bin/php-config
# make
# make install
</pre>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="extension.exampe"></a>9.1. Extension Example</h2></div></div></div>
<p>下面我们开始分部讲解,首先创建一个扩展。</p>
<pre class="screen">
./ext_skel --extname=netkiller
Creating directory netkiller
Creating basic files: config.m4 config.w32 .cvsignore netkiller.c php_netkiller.h CREDITS EXPERIMENTAL tests/001.phpt netkiller.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/netkiller/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-netkiller
5. $ make
6. $ ./php -f ext/netkiller/netkiller.php
7. $ vi ext/netkiller/netkiller.c
8. $ make
Repeat steps 3-6 until you are satisfied with ext/netkiller/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.
</pre>
<p>编辑config.m4 </p>
<pre class="screen">
# vim netkiller/config.m4
PHP_ARG_ENABLE(netkiller, whether to enable netkiller support,
Make sure that the comment is aligned:
[ --enable-netkiller Enable netkiller support])
</pre>
<p>去掉上面三行前的dnl, dnl 表示注释</p>
<pre class="screen">
# cat config.m4 | grep -v 'dnl'
PHP_ARG_ENABLE(netkiller, whether to enable netkiller support,
Make sure that the comment is aligned:
[ --enable-netkiller Enable netkiller support])
if test "$PHP_netkiller" != "no"; then
PHP_NEW_EXTENSION(netkiller, netkiller.c, $ext_shared)
fi
</pre>
<p>执行 phpize</p>
<pre class="screen">
# cd netkiller
# /srv/php-5.4.8/bin/phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
# ./configure --enable-netkiller --with-php-config=/srv/php-5.4.8/bin/php-config
# make
# make install
# ls modules/
netkiller.la netkiller.so
</pre>
<p>创建 ini 文件</p>
<pre class="screen">
cat >> /srv/php/etc/conf.d/netkiller.ini <<PHP
extension=netkiller.so
PHP
</pre>
<p>确认扩展看装成功</p>
<pre class="screen">
# /srv/php/bin/php -f netkiller.php
Functions available in the test extension:
confirm_netkiller_compiled
Congratulations! You have successfully modified ext/netkiller/config.m4. Module netkiller is now compiled into PHP.
# /srv/php-5.4.8/bin/php -m | grep netkiller
netkiller
</pre>
<p>创建 php 测试程序 </p>
<pre class="screen">
vim test.php
<?php
echo confirm_netkiller_compiled('netkiller');
phpinfo();
</pre>
<p>输出结果</p>
<pre class="screen">
Congratulations! You have successfully modified ext/netkiller/config.m4. Module netkiller is now compiled into PHP.
netkiller
---------------------------
netkiller support enabled
</pre>
</div>
</div><div xmlns="" id="bdshare" class="bdshare_t bds_tools_32 get-codes-bdshare"><a class="bds_fbook"></a><a class="bds_twi"></a><a class="bds_ms"></a><a class="bds_msn"></a><a class="bds_buzz"></a><a class="bds_linkedin"></a><a class="bds_deli"></a><a class="bds_qzone"></a><a class="bds_qq"></a><a class="bds_tqq"></a><a class="bds_tqf"></a><a class="bds_tsina"></a><a class="bds_baidu"></a><a class="bds_renren"></a><a class="bds_t163"></a><a class="bds_tfh"></a><a class="bds_douban"></a><a class="bds_hi"></a><a class="bds_tieba"></a><a class="bds_tsohu"></a><span class="bds_more"></span><a class="shareCount"></a></div><script xmlns="" type="text/javascript" id="bdshare_js" data="type=tools"></script><script xmlns="" type="text/javascript" id="bdshell_js"></script><script xmlns="" type="text/javascript">
document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + new Date().getHours();
</script><div xmlns="" id="disqus_thread"></div><script xmlns="" type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
//if(document.domain == 'netkiller.github.com'){
var disqus_shortname = 'netkiller'; // required: replace example with your forum shortname
//}else{
//var disqus_shortname = 'neochan';
//}
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script><noscript xmlns="">Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript><a xmlns="" href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a><br xmlns="" /><div xmlns="" id="clustrmaps-widget"></div><script xmlns="" type="text/javascript">var _clustrmaps = {'url' : 'http://netkiller.github.io', 'user' : 1107643, 'server' : '2', 'id' : 'clustrmaps-widget', 'version' : 1, 'date' : '2013-08-14', 'lang' : 'en', 'corners' : 'square' };(function (){ var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'http://www2.clustrmaps.com/counter/map.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x);})();</script><noscript xmlns=""><a href="http://www2.clustrmaps.com/user/87410e6bb"><img src="http://www2.clustrmaps.com/stats/maps-no_clusters/netkiller.github.io-thumb.jpg" alt="Locations of visitors to this page" /></a></noscript><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="frameworks/doctrine.html">上一页</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="PHP_FUNCTION.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">8.7. Doctrine </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 9.2. PHP_FUNCTION</td></tr></table></div><script xmlns="" type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-11694057-1']);
_gaq.push(['_setDomainName', 'netkiller.github.io']);
_gaq.push(['_setAllowLinker', true]);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script><script xmlns="" type="text/javascript">
var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3F997cd4a7320a82d72cb74d179118f697' type='text/javascript'%3E%3C/script%3E"));
</script></body></html>