2012年3月8日星期四

How to increase the VMWare boot screen delay
If you’ve wanted to try out a bootable CD or USB flash drive in a virtual machine environment, you’ve probably noticed that VMWare’s offerings make it difficult to change the boot device. We’ll show you how to change these options.

Find the .vmx file that contains the settings for your virtual machine. You chose a location for this when you created the virtual machine – in Windows, the default location is a folder called My Virtual Machines in your My Documents folder.

In VMWare Workstation, the location of the .vmx file is listed on the virtual machine’s tab.

Open the .vmx file with any text editor.

Somewhere in this file, enter in the following line… save the file, then close out of the text editor:
bios.bootdelay = 20000

Original page: http://www.howtogeek.com/howto/16876/how-to-increase-the-vmware-boot-screen-delay/


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为扩展存放的路径。