Windows Azure + PHPな環境で動いているバイナリは普通のと同じ
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にあまり詳しくないので正しい知識をお持ちの方がいればお知らせください。