最近两篇专栏博文讲解的都是有关WEB PACS环境的搭建,如果搭建的平台后端不进行DICOM的相关操作,其实跟PACS压根就一点关系也没有,所以最近几篇看似有些跑题,不过大家不要着急,开发环境的搭建本身就是一项巨大而且艰难的工程,等调试好环境后续的PACS相关开发就会如单机版一样得心应手,再忍耐一会,近期马上会开始介绍在平台上进行WEB PACS的研发。
上两篇博文只是对该环境的一个取巧的尝试,第一篇博文直接利用APACHE服务自带的CGI,直接调用C编译后的exe文件,由于CGI技术已经逐渐被FastCGI取代,所以第一篇博文仅作为示范来用,不是运用到后期实际开发中;第二篇博文延续第一篇,试图进行图像的传输,最终也未能找到C语言实现图像数据传输的正确方法,只能偷懒的用PHP和Perl等解释型语言来实现,但是PHP和Perl不能很好与我们前面介绍的DCMTK融合,所以第二篇博文也没有太大的作用。鉴于上述原因,遂决定在已经搭建的FastCGI平台的基础上,添加C/C++语言编写PHP扩展的框架,来实现最终WEB PACS的完整开发环境。
1)PHP源码:下载PHP源码的目的是为了生成最新的、最符合本机的php运行程序,即php.exe(当然也可以直接百度/谷歌最新的PHP安装包,双击安装即可);
2)PHP源码编译:PHP源码是开源的,要求在linux下编译,所以需要在windows下安装一个mini的Linux编译环境,即下载Cygwin或者msys+MinGWin(两者详细的区别可参照此博文http://zengrong.net/post/1723.htm中的介绍);——记得安装完成Cygwin(即Linux编译器)后,修改ext_skel_win32.php中的$cygwin_path = 'c:\cygwin64\bin';语句,改为自己的路径,目的是为了指明sh.exe的位置。
3)PHP SDK:SDK,全称为Software Development Kit,顾名思义就是软件开发过程中常用的小工具(可理解为API)的集合。此处我们只需要使用php-binary-sdk包中的bison.exe和flex.exe,将其拷贝到当前windows目录下——目的是为了我们能够找到(也可将两者的路径添加到环境变量Path中)。
本机电脑安装的是VS2012和VS2010,此处选择VS2012来编译PHP源码。首先进入VS的命令行状态,如下图:
输入:cd c:\PHPDev\php-5.6.2
转换到php源码目录,该目录下有buildconf.bat文件。(此处PHPDev是我自己建立的上一级目录,在实际编译过程中请更换为自己本地的目录)
输入:buildconfig.bat,该批处理命令中启动脚本程序buildconfig.js,搜索目录下所有的.w32文件为windows环境下的编译做准备。如果运行成功会提示“Now run 'configure --help'”,否则提示“Error generating configure script, configure script was not copied”。成功编译后,按照提示可先输入configure --help查看编译选项,随后参照博文中http://demon.tw/software/compile-php-on-windows.html的说明输入:
configure –without-xml –without-wddx --without-simplexml --without-dom --without-libxml --disable-zlib --without-pdo-sqlite –-disable-odbc –-disable-cgi --enable-debug --without-iconv --disable-ipv6
注意此处略不同于博文中的介绍,without前是两个“-”,具体参照configure --help的提示,如下图:
配置完成后就是编译过程了,输入nmake,开始实际编译。
【注】:编译过程中可能会出现错误,例如下图所示,这种情况下利用EditPlus或者NotePad++等编辑工具将文件转存为utf-8编码,重新启动nmake即可。
编译完成后会出现Debug_TS文件夹,该文件夹下就是我们编译源码后生成的php可执行文件,其中会看到php.exe文件,下图是nmake编译成功的结果图。
进入到Debug_TS目录下,输入php.exe “echo ‘Hello World’;"测试可以看到正确的输出,说明在windows平台下编译php源码的工作顺利完成了。
php.exe ext_skel_win32.php --extname=zsgetdcmimage
获得了PHP可执行程序后,就是骨架生成了。进入到php源码中的ext文件夹,可以看到用于骨架生成的两个文件,ext_skel和ext_skel_win32.php。打开ext_skel_win32.php,大致上可以看出如何来构建骨架程序的,其实就是通过Cgywin中提供的sh.exe工具,启动sh.exe ext_skel,随后将原本已经写好的一个基于C/C++动态库的工程通过php脚本的方式自动修改为我们自己命名的工程。可以打开源码ext\skeleton目录,发现其中存在着一个名称为skeleton.dsp的工程,与最终我们获得的骨架工程仅仅是名称不同而已。
基本环境搭建完成了,让我们来进行一次实际测试。
骨架工程中给我们提供了一个与我们工程名称相同的测试函数,例如我的zsgetdcmimage工程中的函数为:
/* Remove the following function when you have successfully modified config.m4 so that your module can be compiled into PHP, it exists only for testing purposes. */ /* Every user-visible function in PHP should document itself in the source */ /* {{{ proto string confirm_zsgetdcmimage_compiled(string arg) Return a string to confirm that the module is compiled in */ PHP_FUNCTION(confirm_zsgetdcmimage_compiled) { char *arg = NULL; int arg_len, len; char *strg; len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "zsgetdcmimage", arg); RETURN_STRINGL(strg, len, 0); }
因为上面我们编译的php源码开启的是调试状态,即参数为--enable-debug,所以在编写骨架程序时刻要对应的用Debug_TS模式编译,同时在添加链接库为php5ts_debug.lib,该文件在php编译后的源码文件夹Debug_TS中。
编译成功后,将生成的zsgetdcmimage.dll拷贝到我们编译出来的php可执行程序的目录Debug_TS中的ext子目录下,然后修改Debug_TS中的php.ini,添加extension=ext/zsgetdcmimage.dll语句。
最后创建一个测试php文档test.php,代码如下:
<?php echo confirm_zsgetdcmimage_compiled("zssure"); ?>
在命令行状态下,转到Debug_TS目录下,输入php.exe test.php,如果配置成功,会得到如下输出:
至此骨架扩展及实例测试已经完成了。
前两篇博文中已经利用wamp搭建了一个基于Apache+PHP+MySQL的Web服务框架,将上述编译完成的zsgetdcmimage.dll扩展放入到c:\wamp\bin\php5.5.12\ext中,启动wampServer后,竟然无法调用出现如下错误提示:
该错误说明利用php5.6.2扩展骨架生成的扩展放在php5.5.12下不匹配。既然如此,要想将PHP扩展骨架添加到前面搭建的WEB PACS平台中只有两种选择:1)重新下载对应版本的php5.5.12的源码,按照上述记录重新生成骨架程序;2)更换wamp安装包中的php。
原本对WampServer的配置就不是很了解,所以想借助此次机会来顺便学习一下。遂决定尝试更换WampServer安装包中的PHP,有原来的php5.5.12替换成php5.6.2。网上搜索了一下,相关的资料不少。基本的操作思路主要参考了这两篇博文的介绍http://www.cnblogs.com/heiing/archive/2011/11/15/2249948.html和http://pcwanli.blog.163.com/blog/static/45315611201441811572810/,上两篇博文的介绍略显简单,且逻辑性不是很好。现在给出我在Win7 32bit+WampServer-64-bits-php-5-5环境下的具体实施步骤。首先将进入到c:\wamp\bin\php目录,将php官网下载的最新的windows下的二进制安装包解压到该目录下,例如php5.6.2的完整路径为c:\wamp\bin\php\php5.6.2,随后修改方法及顺序如下:
至此更换WampServer安装包中的PHP版本的工作顺利完成,经过多次努力,用三篇博文的篇幅我们已经顺利的搭建了WEB PACS开发的基础环境。后续会开始介绍利用PHP的扩展骨架结合DCMTK来实现WEB PACS的各项功能。
利用PHP Skel结合DCMTK开发WEB PACS应用
利用DCMTK搭建WML服务器
利用oracle直接操作DICOM数据
C#的异步编程模式在fo-dicom中的应用
VMWare三种网络连接模式的实际测试
时间:2014-10-31