★★★本博客欢迎转载,但请注明版权、原文链接,谢谢。
Memento..
My stories in my way..
posts - 39,comments - 591,trackbacks - 13

在微软MIX09大会上,Windows Azure发布了它的第3个版本——Match 2009 CTP。从这个版本开始,Windows Azure开始支持FastCGI。(详见MIX09-Windows Azure (March 2009 CTP)里振奋人心的新特性一览,by 流牛木马) 支持FastCGI,也就是意味着支持PHP、Ruby、Python等当前流行的"非微软"web应用程序。我们很欣喜地看到Azure Services Platform迈出了“开放平台”的第一步。

PHP也许是当前web开发界最最流行的语言,所以“在Azure中使用PHP”这个问题引起了很多人的关注,流牛木马本人在最近两天也收到了好几个朋友的焦急求助。

也许是微软的那些牛人们最近在忙MIX09的缘故,提及Azure支持"FastCGI”的新闻报道很多,而却几乎没有提及具体怎样在Azure里配置使用PHP。就连在新版的Azure SDK里面,关于FastCGI的sample也不是使用php的。

不用着急,在本篇中,流牛木马将会演示在Azure中使用PHP的最详细流程。

(已部署到云端的Demo: http://ibm.cloudapp.net/php.php

第一步,你必须知道的一些有关PHP&FastCGI的基本知识。

          FastCGI的官方网站:http://www.fastcgi.com/

          PHP的FastCGI模式:http://www.blogme.cn/node/6529

第二步,启用你IIS7中的FastCGI模块。
【注:本地调试环境需要。如果你打算直接部署到Cloud上,则不需要这一步。】
   (下面以Vista Ultimate中文版为例:)

  1. 打开控制面板,进入”打开或关闭Windows 功能”
    image
  2. 启用以下模块(图中红框的部分)
    image
  3. 下载安装最新的FastCGI模块:http://support.microsoft.com/kb/967131

第三步,下载一个"xcopy-deployable”版本的PHP。

    "xcopy-deployable”这个词来自微软的官方文档,但是很遗憾,在php的官方网站http://php.net/中,我们却没有找到这个词. - -P

    根据词义理解一下:可以直接拷贝部署的PHP版本。通俗地说就是不需要安装的。

    来到PHP官方网站的下载中心:http://www.php.net/downloads.php,在Windows Binaries部分找到最新版本号的"zip package“就可以了。比如现在php版本的最新版本是2009年3月10日的5.2.9-1,下载地址: http://cn2.php.net/get/php-5.2.9-1-Win32.zip/from/a/mirror

第四步,新建Web Cloud Service项目。

    image

第五步,配置Service Definition 文件(ServiceDefinition.csdef)。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="CloudService1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
 
<WebRole name="WebRole" enableNativeCodeExecution="true">
   
<InputEndpoints>
     
<InputEndpoint name="HttpIn" protocol="http" port="80" />
   
</InputEndpoints>
 
</WebRole>
</ServiceDefinition>

      注意:需要在WebRole节点下增加enableNativeCodeExecution="true"属性

 

第六步:配置FastCGI和PHP

  1. 将刚刚下载的xcopy-deployable PHP压缩包解压缩到WebRole项目的php子目录下。
    image
  2. 在WebRole项目根目录下增加Web.roleconfig文件,内容如下:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     
    <system.webServer>
       
    <fastCgi>
         
    <application fullPath="%RoleRoot%\php\php-cgi.exe" />
       
    </fastCgi>
     
    </system.webServer>
    </configuration>

    这里我们使用了"%RoleRoot%"变量来获得Web Role的根目录。这也是Match 2009 CTP版本所提供的新特性之一。
  3. 在Web.config文件的system.webServer-handlers节下增加对PHP文件的处理:
      <system.webServer>
             
    <handlers>
           
    <..>
       
    <add name="PHP via FastCGI"  path="*.php"  verb="*"  modules="FastCgiModule"
                 scriptProcessor
    ="%RoleRoot%\php\php-cgi.exe"
                 resourceType
    ="Unspecified" />
         
    </handlers>
        
       
    </system.webServer>

第七步:写一些简单的代码测试一下吧!
     代码:

<?php

$iipp=$_SERVER["REMOTE_ADDR"];
echo "你的IP地址是".$iipp."<br />";

echo "这是用PHP的echo命令输出的文字。<br />";

echo "<h1><font color='Red'><b>Hello PHP on Azure!</b></font></h1><br />";

echo "<a href='http://azure.cnblogs.com/'>流牛木马的Azure博客</a><br />";

echo "<font color='Blue'>以下是当前PHP环境的系统变量:</font><br />";
phpinfo();
?>


     效果图:
     image

posted on 2009-03-20 17:53 流牛木马 阅读(1828) 评论(8) 编辑 收藏

FeedBack:
2009-03-20 18:08 | Windie Chai(笑煞天)      
不错!
 回复 引用 查看   
2009-03-20 18:52 | Q.Lee.lulu      
_ENV["PROCESSOR_IDENTIFIER"] AMD64 Family 16 Model 2 Stepping 3, AuthenticAMD
 回复 引用 查看   
#3楼[楼主]
2009-03-20 18:59 | 流牛木马      
--引用--------------------------------------------------
Q.Lee.lulu: _ENV[&quot;PROCESSOR_IDENTIFIER&quot;] AMD64 Family 16 Model 2 Stepping 3, AuthenticAMD
--------------------------------------------------------
哈哈,Aure平台的CPU还行吧?

 回复 引用 查看   
2009-04-18 15:23 | 小李刀刀      
反复测试的结果,都是只能放一个简单的php页,执行最基本的函数而已。

楼主连php.ini都没有配置。如果用PHP via FastCGI这个name,那么你自定义的php.ini将完全无效。

使用非安全进程的php版本将不能启用虚拟目录支持,也不能使用Zend Optimizer。

楼主试试部署一个wordpress或者php论坛什么的上去看看能不能运行。恐怕是连安装页面都进不了。

 回复 引用 查看   
#5楼[楼主]
2009-04-18 15:31 | 流牛木马      
@小李刀刀
不好意思,我做的只是一个简单的demo。php并不是我的强项,我也并不打算在上面花时间——换句话说,你让我配置什么、让我安装什么,我全然没有兴趣。
不知道你有没有听说过一句成语,叫作 : 抛砖引玉。
现在我已经抛出“砖”了,如果你有兴趣,可以继续研究一下,把你的“玉”亮出来,而不是在我的“砖”上指指点点——它仅仅是“砖”而已。

 回复 引用 查看   
2009-05-24 17:16 | 小李刀刀      
@流牛木马
不好意思,可能是语气不对,我不是在你的“砖”上指指点点,而是在进一步尝试的时候发现只能部署最简单的比如<?phpinfo()?>这样的测试才能正常运行,只要是一个完整点的PHP运用,就无法部署上去。我在反复的调试测试中,尝试了很多的PHP程序,放上去都不能运行。那些并不是涉及PHP开发的工作,依然是Windows Azure对FastCGI支持范围内的工作,也就是说还是如何配置Windows Azure项目的问题。真的希望楼主能研究一下,指点指点。

 回复 引用 查看   
#7楼[楼主]
2009-11-11 20:22 | 流牛木马      
引用小李刀刀:@流牛木马
<br/>不好意思,可能是语气不对,我不是在你的“砖”上指指点点,而是在进一步尝试的时候发现只能部署最简单的比如<?phpinfo()?>这样的测试才能正常运行,只要是一个完整点的PHP运用,就无法部署上去。我在反复的调试测试中,尝试了很多的PHP程序,放上去都不能运行。那些并不是涉及PHP开发的工作,依然是Windows Azure对FastCGI支持范围内的工作,也就是说还是如何配置Windows Azure项目的问题。真的希望楼主能研究一下,指点指点。


这就是Wordpress运行在Azure上的实例。

 回复 引用 查看   
#8楼[楼主]
2009-11-11 20:22 | 流牛木马      
引用小李刀刀:@流牛木马
<br/>不好意思,可能是语气不对,我不是在你的“砖”上指指点点,而是在进一步尝试的时候发现只能部署最简单的比如<?phpinfo()?>这样的测试才能正常运行,只要是一个完整点的PHP运用,就无法部署上去。我在反复的调试测试中,尝试了很多的PHP程序,放上去都不能运行。那些并不是涉及PHP开发的工作,依然是Windows Azure对FastCGI支持范围内的工作,也就是说还是如何配置Windows Azure项目的问题。真的希望楼主能研究一下,指点指点。

http://wordpress.cloudapp.net

 回复 引用 查看