WindowsでコマンドプロンプトからPHPを実行すると期待通りに動作しない。

Windows環境下でコマンドプロンプトからPHPスクリプトを起動しているが、うまく動作しない。 PHPスクリプト内で利用している socket_create を実行すると、終了してしまうようだ。 php.iniでデバッグ表示をONにしても、何にも表示されない。 原因がわからず、ずいぶん困っていたが判明した。 phpを実行するときに

php xxx.php 

を実行すると動作しないが、

c:\php\php.exe xxx.php 

とすると、期待通りに動作した。ちゃんと環境変数PATHに通しているはずなのになぜ?とSETコマンドで確認してみる。 すると、PATHに

知らないPHPが登録されている!

Path=C:\Program Files\Common Files\Microsoft Shared\Windows Live
C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
C:\Program Files (x86)\iis express\PHP\v5.3
C:\Program Files (x86)\Intel\iCLS Client\
C:\Program Files\Intel\iCLS Client\
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\Program Files\Intel\Intel(R) Management Engine Components\DAL
C:\Program Files\Intel\Intel(R) Management Engine Components\IPT
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT
C:\Program Files (x86)\Intel\OpenCL SDK\1.5\bin\x86
C:\Program Files (x86)\Intel\OpenCL SDK\1.5\bin\x64
C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin
C:\Program Files\Microsoft Network Monitor 3\
c:\php\
C:\php\pear

C:\Program Files (x86)\iis express\PHP\v5.3 IIS Express?なんだろう?このフォルダを確認してみると確かにphp.exe が存在する。

C:\Program Files (x86)\iis express\PHP\v5.3
dev
ext
extras
glib-2.dll
gmodule-2.dll
icudt49.dll
icuin49.dll
icuio49.dll
icule49.dll
iculx49.dll
icutest49.dll
icutu49.dll
icuuc49.dll
install.txt
libeay32.dll
libenchant.dll
libenchant_ispell.dll
libenchant_myspell.dll
libpq.dll
libsasl.dll
license.txt
news.txt
phar.phar.bat
pharcommand.phar
php.exe
php.gif
php.ini
php.ini-development
php.ini-production
php5.dll
php5embed.lib
php-cgi.exe
php-win.exe
pws-php5cgi.reg
pws-php5isapi.reg
readme-redist-bins.txt
runphp.cmd
snapshot.txt
ssleay32.dll

コマンドプロンプトで単に「php」と打つとIIS ExpressのPHPが動作していたのか。。。 そりゃ、php.iniの設定変えても効かないはずだ。。使っているsocket_createのextensionも当然OFF. IIS Expressのphp.iniを見てみると使っているsocket_createのextensionも当然無い。・




[WebPIChanges]
error_log=C:\Windows\temp\php53_errors.log
upload_tmp_dir=C:\Windows\temp
session.save_path=C:\Windows\temp
cgi.force_redirect=0
cgi.fix_pathinfo=1
fastcgi.impersonate=1
fastcgi.logging=0
max_execution_time=300
date.timezone=Asia/Seoul
extension_dir="C:\Program Files (x86)\iis express\PHP\v5.3\ext\"

[ExtensionList]
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_curl.dll
extension=php_exif.dll
extension=php_xmlrpc.dll
extension=php_openssl.dll
extension=php_soap.dll
extension=php_pdo_mysql.dll
extension=php_pdo_sqlite.dll
extension=php_imap.dll
extension=php_tidy.dll

error_log=C:\Windows\temp\php53_errors.logとなっているので、確認してみると該当のエラーが出てる。。。

[01-Dec-2013 14:59:12 Asia/Seoul] PHP Fatal error:  Call to undefined function socket_create() in C:\Test\sample.php on line 12
[01-Dec-2013 14:59:12 Asia/Seoul] PHP Fatal error:  Call to undefined function socket_create() in C:\Test\sample.php on line 12
[01-Dec-2013 14:59:13 Asia/Seoul] PHP Fatal error:  Call to undefined function socket_create() in C:\Test\sample.php on line 12
[01-Dec-2013 14:59:13 Asia/Seoul] PHP Fatal error:  Call to undefined function socket_create() in C:\Test\sample.php on line 12

どうやら、VisualStudio 2013をインストールした時にインストールされ、PATHにも登録されたようだ。 次からPHPをコンソールで動作させるときに不可解な動作をしたら、どのphpが動作しているか確認してみよう.. でもなんでタイムゾーンデフォルトがdate.timezone=Asia/Seoul なんだろう?