2012年3月6日星期二

如何用VC编写PHP5的扩展 2012/3/5更新

如何用VC2008编写PHP5的扩展


安装IIS7

以Windows 7为例,在光驱中放入和系统匹配的Windows安装光盘,依次打开“控制面板->程序->打开或关闭Windows功能”,选中 “Internet信息服务”。为了让IIS支持PHP,记得勾选中“Internet信息服务->万维网服务->应用程序开发功能 ->CGI”。

测试

打开浏览器输入http://localhosthttp://127.0.0.1

安装PHP5

下载PHP5的同时,一并把源代码取下来,分别解压缩到C:\PHP-5.2.6 和 C:\PHP-5.2.6-src。把C:\PHP-5.2.6\php.ini-dist 并另存为 php.ini。

打开“IIS管理器->处理程序映射->添加模块映射”对话框,依次

  1. 在请求路径中填写*.php;

  2. 从模块的下拉列表中选择FastCgiModule;(1)

  3. 在可执行文件中填写php-cgi.exe文件的完整路径,例如:C:\PHP-5.2.6\php-cgi.exe;

  4. 在名称中随便填写,例如PHPCGI。

测试

添加c:\inetpub\wwwroot\index.php,内容为

打开浏览器输入http://localhost/index.phphttp://127.0.0.1/index.php

安装Cygwin

只要安装sh即可。(2)

生成扩展到源码框架


使用PHP源代码目录下的 ext/ext_skel_win32.php来生成扩展的骨架类。

配置环境变量

需要用到c:\php-5.2.6\php.ini和Cygwin,所以把C:\PHP-5.2.6和C:\Cygwin\bin添加到环境变量PATH中。

生成框架

执行cmd打开一个终端,进入php源代码的ext目录

C:\>cd \php-5.2.6-src\ext

执行php脚本,生产一个名为mytest的扩展到框架

C:\php-5.2.6-src\ext>php ext_skel_win32.php –extname=mytest

编译扩展

用 VC2008打开c:\php-5.2.6-src\ext\mytest\mytest.dsp,确认转换工程,选择编译目标为Release_TS, 这个时候编译会报一个找不到.lib的错误,在C:\PHP-5.2.6\dev中找到php5ts.lib并添加到项目的依赖中即可。重新正确地编译 后,生成的目标库文件会自动保存在c:\php-5.2.6-src\Release_TS\php_mytest.dll。

用命令行编译

VC2008转换.dsp文件后会产生一个解决方案.sln文件。

从开始菜单中打开“Visual Studio 2008 命令提示”,输入“devenv /?”查看帮助。

在本例中,在扩展的源代码项目目录中敲入

devenv mytest.sln /build "Release_TS"

就等同于打开VC2008 IDE进行编译。

devenv mytest.sln /clean “Release_TS”

用于清理项目。

测试

  1. 把php_mytest.dll复制到C:\php-5.2.6\

  2. 修改c:\php-5.2.6\php.ini,找到extension_dir = "./" (3)

添加一行extension=php_mytest.dll

  1. 编辑c:\inetpub\wwwroot\index.php的内容,改成

  2. 重启IIS服务

  3. 打开浏览器输入http://localhost/index.phphttp://127.0.0.1/index.php
    执行正确时会显示一条Congratulations!的话。


此外也可以用php.exe在Windows终端窗口中进行测试。

  1. 同样需要把php_mytest.dll添加到php.ini配置文件,以及把该动态库复制到指定目录。

  2. 执行CMD命令打开一个Windows终端窗口,在终端窗口中敲入
    php -r "echo confirm_mytest_compiled('hello');"


编程参考

函数参数

Types and letter codes used in zend_parse_parameters()

Type

Code

Variable Type

Boolean

b

zend_bool

Long

l

long

Double

d

double

String

s

char*, int

Resource

r

zval*

Array

a

zval*

Object

o

zval*

zval

z

zval*


变量类型

基本变量

Int, Long, Double, Boolean, Null, String(char*)

ZVAL

使用下列宏可以取得ZVAL的类型:

返回值
Z_TYPE(zval), Z_TYPE_P(zval*), Z_TYPE_PP(zval**)IS_NULL, IS_BOOL, IS_LONG, IS_DOUBLE, IS_STRING, IS_RESOURCE, IS_ARRAY, IS_OBJECT


使用下列宏可以取得ZVAL的值,也可用于赋予ZVAL新的值:

Z_LVAL(zval), Z_LVAL_P(zval*), Z_LVAL_PP(zval**)

返回LONG值,可当作BOOLEAN

Z_DVAL(zval), Z_DVAL_P(zval*), Z_DVAL_PP(zval**)

返回DOUBLE值

Z_STRVAL(zval),Z_STRVAL_P(zval*), Z_STRVAL_PP(zval**)

返回字符串char*

Z_STRLEN(zval),Z_STRLEN_P(zval*),Z_STRLEN_PP(zval**)

返回字符串长度 int


* Boolean值和LONG共用同一套宏


转换ZVAL的类型:convert_to_string, convert_to_long等

zval *temp;

为zval*申请内存:ALLOC_INIT_ZVAL(temp)

为zval赋值:ZVAL_LONG(temp, 1234);

Array

需要返回一个Array时,首先把return_value初始化,array_init(return_value);

然后下列函数添加item(s);

函数返回

定义

举例

说明

RETURN_LONG(int)

RETURN_LONG(42);


RETURN_DOUBLE(double)

RETURN_DOUBLE(3.142);


RETURN_BOOL(bool)

RETURN_BOOL(1);


RETURN_NULL(void)

RETURN_NULL();


RETURN_TRUE

RETURN_TRUE;

RETURN_FALSE

RETURN_FALSE;

RETURN_STRING(char*, int)

RETURN_STRING(“ABC”,1);

RETURN_STRING(pStr,0);

扩展DLL会被unload,所以返回的字符串指针可能失效。如果第二个参数为1,RETURN_STRING会自动动态分配一个空间保存字符串;如果第二个参数为0,则不会,这时候第一个参数务必指向一个动态分配的内存,参考emalloc,estrdup。



返回RESOURCE,ARRAY,OBJECT



参考文献


备注

  1. 如果下拉列表中没有FastCgiModule,请参考章节 安装IIS7 重新确认已安装了“Internet信息服务->万维网服务->应用程序开发功能->CGI”。

  2. ext_skel_win32.php中说要使用Cygwin,实际上只使用到了sh,所以可以用其它sh替代,入MSYS。

  3. extension_dir = "./" 指定了PHP-5.2.6为扩展存放的路径。

2012年3月4日星期日

如何用VC2008编写PHP5的扩展 update 1

如何用VC2008编写PHP5的扩展


安装IIS7

以Windows 7为例,在光驱中放入和系统匹配的Windows安装光盘,依次打开“控制面板->程序->打开或关闭Windows功能”,选中 “Internet信息服务”。为了让IIS支持PHP,记得勾选中“Internet信息服务->万维网服务->应用程序开发功能 ->CGI”。

测试

打开浏览器输入http://localhosthttp://127.0.0.1

安装PHP5

下载PHP5的同时,一并把源代码取下来,分别解压缩到C:\PHP-5.2.6 和 C:\PHP-5.2.6-src。把C:\PHP-5.2.6\php.ini-dist 并另存为 php.ini。

打开“IIS管理器->处理程序映射->添加模块映射”对话框,依次

  1. 在请求路径中填写*.php;

  2. 从模块的下拉列表中选择FastCgiModule;(1)

  3. 在可执行文件中填写php-cgi.exe文件的完整路径,例如:C:\PHP-5.2.6\php-cgi.exe;

  4. 在名称中随便填写,例如PHPCGI。

测试

添加c:\inetpub\wwwroot\index.php,内容为

打开浏览器输入http://localhost/index.phphttp://127.0.0.1/index.php

安装Cygwin

只要安装sh即可。(2)

生成扩展到源码框架


使用PHP源代码目录下的 ext/ext_skel_win32.php来生成扩展的骨架类。

配置环境变量

需要用到c:\php-5.2.6\php.ini和Cygwin,所以把C:\PHP-5.2.6和C:\Cygwin\bin添加到环境变量PATH中。

生成框架

执行cmd打开一个终端,进入php源代码的ext目录

C:\>cd \php-5.2.6-src\ext

执行php脚本,生产一个名为mytest的扩展到框架

C:\php-5.2.6-src\ext>php ext_skel_win32.php –extname=mytest

编译扩展

用 VC2008打开c:\php-5.2.6-src\ext\mytest\mytest.dsp,确认转换工程,选择编译目标为Release_TS, 这个时候编译会报一个找不到.lib的错误,在C:\PHP-5.2.6\dev中找到php5ts.lib并添加到项目的依赖中即可。重新正确地编译 后,生成的目标库文件会自动保存在c:\php-5.2.6-src\Release_TS\php_mytest.dll。

用命令行编译

VC2008转换.dsp文件后会产生一个解决方案.sln文件。

从开始菜单中打开“Visual Studio 2008 命令提示”,输入“devenv /?”查看帮助。

在本例中,在扩展的源代码项目目录中敲入

devenv mytest.sln /build "Release_TS"

就等同于打开VC2008 IDE进行编译。

devenv mytest.sln /clean “Release_TS”

用于清理项目。

测试

  1. 把php_mytest.dll复制到C:\php-5.2.6\

  2. 修改c:\php-5.2.6\php.ini,找到extension_dir = "./" (3)

添加一行extension=php_mytest.dll

  1. 编辑c:\inetpub\wwwroot\index.php的内容,改成

  2. 重启IIS服务

  3. 打开浏览器输入http://localhost/index.phphttp://127.0.0.1/index.php
    执行正确时会显示一条Congratulations!的话。


此外也可以用php.exe在Windows终端窗口中进行测试。

  1. 同样需要把php_mytest.dll添加到php.ini配置文件,以及把该动态库复制到指定目录。

  2. 执行CMD命令打开一个Windows终端窗口,在终端窗口中敲入
    php -r "echo confirm_mytest_compiled('hello');"


编程参考

函数返回

定义

举例

说明

RETURN_LONG(int)

RETURN_LONG(42);


RETURN_DOUBLE(double)

RETURN_DOUBLE(3.142);


RETURN_BOOL(bool)

RETURN_BOOL(1);


RETURN_NULL(void)

RETURN_NULL();


RETURN_TRUE

RETURN_TRUE;

RETURN_FALSE

RETURN_FALSE;

RETURN_STRING(char*, int)

RETURN_STRING(“ABC”,1);

RETURN_STRING(pStr,0);

扩展DLL会被unload,所以返回的字符串指针可能失效。如果第二个参数为1,RETURN_STRING会自动动态分配一个空间保存字符串;如果第二个参数为0,则不会,这时候第一个参数务必指向一个动态分配的内存,参考emalloc,estrdup。



返回RESOURCE,ARRAY,OBJECT



参考文献



备注

  1. 如果下拉列表中没有FastCgiModule,请参考章节 安装IIS7 重新确认已安装了“Internet信息服务->万维网服务->应用程序开发功能->CGI”。

  2. ext_skel_win32.php中说要使用Cygwin,实际上只使用到了sh,所以可以用其它sh替代,入MSYS。

  3. extension_dir = "./" 指定了PHP-5.2.6为扩展存放的路径。

如何用VC2008编写PHP5的扩展


安装IIS7
以Windows 7为例,在光驱中放入和系统匹配的Windows安装光盘,依次打开“控制面板->程序->打开或关闭Windows功能”,选中“Internet信息服务”。为了让IIS支持PHP,记得勾选中“Internet信息服务->万维网服务->应用程序开发功能->CGI”。
测试
打开浏览器输入http://localhost或http://127.0.0.1。

安装PHP5
下载PHP5的同时,一并把源代码取下来,分别解压缩到C:\PHP-5.2.6 和 C:\PHP-5.2.6-src。把C:\PHP-5.2.6\php.ini-dist 并另存为 php.ini。
打开“IIS管理器->处理程序映射->添加模块映射”对话框,依次
a) 在请求路径中填写*.php;
b) 从模块的下拉列表中选择FastCgiModule;(1)
c) 在可执行文件中填写php-cgi.exe文件的完整路径,例如:C:\PHP-5.2.6\php-cgi.exe;
d) 在名称中随便填写,例如PHPCGI。
测试
添加c:\inetpub\wwwroot\index.php,内容为
打开浏览器输入http://localhost/index.php或http://127.0.0.1/index.php。

安装Cygwin
只要安装sh即可。(2)

生成扩展到源码框架
使用PHP源代码目录下的 ext/ext_skel_win32.php来生成扩展的骨架类。
配置环境变量
需要用到c:\php-5.2.6\php.ini和Cygwin,所以把C:\PHP-5.2.6和C:\Cygwin\bin添加到环境变量PATH中。
生成框架
执行cmd打开一个终端,进入php源代码的ext目录
C:\>cd \php-5.2.6-src\ext
执行php脚本,生产一个名为mytest的扩展到框架
C:\php-5.2.6-src\ext>php ext_skel_win32.php –extname=mytest
编译扩展
用VC2008打开c:\php-5.2.6-src\ext\mytest\mytest.dsp,确认转换工程,选择编译目标为Release_TS,这个时候编译会报一个找不到.lib的错误,在C:\PHP-5.2.6\dev中找到php5ts.lib并添加到项目的依赖中即可。重新正确地编译后,生成的目标库文件会自动保存在c:\php-5.2.6-src\Release_TS\php_mytest.dll。
测试
1) 把php_mytest.dll复制到C:\php-5.2.6\
2) 修改c:\php-5.2.6\php.ini,找到extension_dir = "./" (3)
添加一行extension=php_mytest.dll
3) 编辑c:\inetpub\wwwroot\index.php的内容,改成
4) 重启IIS服务
5) 打开浏览器输入http://localhost/index.php或http://127.0.0.1/index.php。
执行正确时会显示一条Congratulations!的话。

参考文献
在Win32下用VS2008编译PHP扩展 (http://jz123.cn/text/3033828.html)
Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程(http://www.leapsoul.cn/?p=753)

备注
(1) 如果下拉列表中没有FastCgiModule,请参考章节 安装IIS7 重新确认已安装了“Internet信息服务->万维网服务->应用程序开发功能->CGI”。
(2) ext_skel_win32.php中说要使用Cygwin,实际上只使用到了sh,所以可以用其它sh替代,入MSYS。
(3) extension_dir = "./" 指定了PHP-5.2.6为扩展存放的路径。

2012年1月16日星期一

美女记者那愤怒小鸟般的尖叫则被网友们竟相模仿

 
 

Sent to you by Luss Joy via Google Reader:

 
 

via 我烧网-热文 by 一剑 on 1/13/12

一名女记者在采访台北圆山饭店时,亲自示范地下通道内的滑梯,谁知滑梯又长又陡,吓得女记者尖叫连连!该视频登陆YouTube一日就有超过60万的播放率!而她那愤怒小鸟般的尖叫则被网友们竟相模仿!


 
 

Things you can do from here:

 
 

2011年4月15日星期五

特殊符号de代码

網站: CopyPasteCharacter.com

這個站裡面就把一些常用符號都列出來, 只要點選後, 會自動複製起來(Flash copy), 就可以貼上了.

網站裡面的符號, 還可以做切換, 直接切成 HTML, 也可以直接使用, 下述把常用的先紀錄起來.

  • ← ←
  • → →
  • ↑ ↑
  • ↓ ↓
  • ✔ ✔
  • √ √
  • ★ ★
  • ☆ ☆
  • ☺ ☺
  • ♀ ♀
  • ♂ ♂
  • ✎ ✎
  • « «
  • » »
  • ⌘ ⌘
  • ✿ ✿
  • ♥ ♥
  • ⌥ ⌥
  •  
  • ⌃ ⌃
  • ⇧ ⇧
  • ÷ ÷
  • × ×
  • ™ ™

2011年1月29日星期六

BestFreeVPN无需注册无需下载免费美国VPN

BestFreeVPN是一个2010年新成立的VPN代理网站,该网站提供真正免费VPN代理服务,不需要注册,也不需要下载和安装任何客户端,你只需要每过12小时或者24小时登录官方网站获取新的密码就可以继续使用了。

BestFreeVPN网址:http://www.bestfreevpn.com/

BestFreeVPN在国内已经有很多人在推荐和使用,大家去百度搜索可以看到一堆信息。

BestFreeVPN提供的服务器和用户名都不会变,但是它会每隔12或24小时更改密码。官方介绍说BestFreeVPN提供上至 800Kbit/s下载和512Kbit/s上传带宽免费使用,实际上网速并没有那么快,打开视频网站比较卡。不过,作为 一个免费的VPN服务,它还是很稳定的。

BestFreeVPN提供的是PPTP的连接类型,大家可以自己创建VPN连接来连接这个VPN,他们的免费VPN服务器是:bestfreevpn.com。

如果不会创建VPN连接的,可以我们网站上面的教程

XP用户可以查看《windows xp 设置pptpd vpn上网步骤》

Windows7用户可以查看《Windows7 VPN连接设置详细图文教程》

使用iPhone的用户可以查看《iPhone的VPN如何设置和使用》

BestFreeVPN的VPN下载速度是242kbps,上传速度173kbps。的确很牵强,但是我测试上了一些网站,速度还是可以忍受的。

BestFreeVPN总结:

BestFreeVPN虽然把免费VPN的速度限制得很严了,总体来说速度不快,但是也没到忍受不了的地步。而且,因为有强制的速度限制,BestFreeVPN的稳定性还是很不错的,有需求的人值得一用。

BestFreeVPN网址:http://www.bestfreevpn.com/

GreenVPN - real green

官方网址:http://www.greenvpn.net/index.php

Windows Vista和Windows 7的客户端下载是一个纯文本文件,后缀是.pbk,Google了一下没找到相关资料。anyway,在Windows 7底下这个文件是有个网络连接的图标的,双击后打开了一个类似拨号的程序,应该是操作系统内置支持的一种拨号方式吧。

用法很简单,去官方网站注册一个帐号,填写帐号名,密码和一个邮箱地址,去邮箱收确认信,点一下信里面的确认链接,注册就算完成了。

双击打开.pbk,填上刚注册的帐号名和密码,点一下连接按钮,稍等几秒钟就登进VPN了。

下文转载自:http://www.free-vpn.net/
其实一直有网友向我推荐GreenVPN,不过一直忙,也没得空写日志。后来测试了两次,不知道什么原因也没得连接上,所以没有来真正推荐。今天试用了一下,感觉很不错,所以特地上来写推荐文章。
GreenVPN的免费帐号每个月有200M的流量,对于一般看网页来说,是足够了。
GreenVPN使用说明
1.GreenVPN帐号注册
GreenVPN注册地址:http://www.greenvpn.net/
输入用户名、邮箱、密码,点击“注册”。
2.GreenVPN帐号激活
登录刚才填写的邮箱,点击激活链接激活帐号,然后帐号就可以使用了。
3.GreenVPN的使用
测试出来的速度还很不错,下载速度974kbps,上传速度是185kbps。