Windows Azure上でPHPを動かしてみています。SDKからそのまま作ったプロジェクトの場合、PHPのバージョンは5.3.4になっており、これをアップデートする方法を調べたのでメモ。

Windows Azure PHPの正体

Windows Azure PHPプロジェクトとしてプロジェクトを作った場合、プロジェクト内のphpというディレクトリの配下にWindows版のPHPのバイナリとおぼしきファイル群が自動的にコピーされる。このPHPはAzure SDKに同梱されていると思われるPHPかシステムにインストール済みのPHPのいずれかから選択してコピーする。またビルド日時から見て、通常配布されているWindows版PHPと同一とみなしてよさそうだ。
プロジェクトに同梱されたPHPはそのままデプロイ用のcspkg形式のパッケージに同梱されてAzure環境上にデプロイされる。

このPHPの導入は単純なコピーだけではなく、Azure Storageなどへのアクセスを実現するためのphp_azure.dll の導入も合わせて行っている。これに伴って php/php.ini には下記の記述が挿入されている。

extension="php_azure.dll"

phpinfo()の出力内容をみるとこのPHPはWindows版の非スレッドセーフ版PHPをVC9でビルドしたものであることが分かる。xDebugのようなExtensionなどを導入する際にはこれを前提として取り扱えばよさそうだ。

PHP Version 5.3.4
Build Date  Dec 9 2010 22:17:30  
Compiler  MSVC9 (Visual C++ 2008)  
Architecture  x86  
Configure Command  cscript /nologo configure.js "--enable-snapshot-build" "--enable-debug-pack" "--disable-zts" "--disable-isapi" "--disable-nsapi" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=D:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8=D:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8-11g=D:\php-sdk\oracle\instantclient11\sdk,shared" "--with-enchant=shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet" "--with-mcrypt=static"  
Server API  CGI/FastCGI  
Virtual Directory Support  disabled  
Configuration File (php.ini) Path  C:\Windows  
Scan this dir for additional .ini files  (none)  
Additional .ini files parsed  (none)  
PHP API  20090626  
PHP Extension  20090626  
Zend Extension  220090626  
Zend Extension Build  API220090626,NTS,VC9  
PHP Extension Build  API20090626,NTS,VC9  
Debug Build  no  
Thread Safety  disabled  
Zend Memory Manager  enabled  
Zend Multibyte Support  disabled  
IPv6 Support  enabled  
Registered PHP Streams  php, file, glob, data, http, ftp, zip, compress.zlib, phar  
Registered Stream Socket Transports  tcp, udp  
Registered Stream Filters  convert.iconv.*, mcrypt.*, mdecrypt.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, zlib.*  

プロジェクトに同梱されたPHPのアップデート

PHPのバージョンを上げる場合、該当のバイナリファイルを上書きする事でアップデートを行える。まずは利用したいバージョンの非スレッドセーフ版Windows版PHPをダウンロードしてくる。ダウンロードする際はインストーラー版ではなくZIPアーカイブをダウンロードしてファイルを展開する。次に展開したファイルをプロジェクト内のphpディレクトリに上書きしていく。この際にphpディレクトリごと上書きしてしまうとphp.iniが書き変わってしまう為、下記のファイルを個別に差し替える。

php/php-cgi.exe
php/php5.dll
php/php.exe (ユニットテストなどで使っているなら)
ext/ (APIの互換が保たれているバージョンであれば更新しなくても大丈夫)

開発ファブリックで動作確認してみたところ、最新のPHPが動作している事が確認できた。同様の手順でパッチを当ててビルドしたPHPのバイナリを動作させることもできるかもしれない。

※Windows版PHPにあまり詳しくないので正しい知識をお持ちの方がいればお知らせください。