PHP XDebug Unexpected termination

PHP
Eclipse

Windows7 64bit環境 PHP Xdebugでデバッグしていると、Unexpected termination of script,

debugging ended” error message. というメッセージが表示されて、デバッグができない

Windows7 64bit
XAMPP

Windows7 64bit環境でEclipseとXDebugを使ってデバッグしていると、

 Unexpected termination of script,debugging ended

と表示されて、デバッグが途中で終わってしまうことがあります。

上記のエラーメッセージで検索すると、ウォッチ式を空にするように、という話がHitしますが、ウォッチ式を空にしても治りません。

それは、64bit用のDLLをダウンロードしていないからかもしれません。

参考:Re: xdebug for PHP 5.3.x VC6 and x64?
http://www.xdebug.org/archives/xdebug-general/1773.html

下記のXDebug公式ページから、最新の64bit用のものをダウンロードして利用しましょう。
http://www.xdebug.org/download.php

*variableを閲覧すると、Unexpected termination of scriptが起きてしまう

これも悩ましい問題です。
variablesビューを開いていると、Unexpected termination of scriptが即座に起こる。
あるいは、デバッグの途中でvariablesビューを開くと止まってしまう。

世界には、この問題で悩んでいる人がいっぱいいるみたいです。
http://www.agilepman.com/2010/08/unexpected-termination-of-script-debugging-ended/

上記のブログで、解決方法が発見?されたようです!
XDebugの設定で、Show super globals in variable view にチェックが入っていたら外してみましょう。

Window->Preferences->PHP->Debug->Installed Debuggers->XDebug
に設定項目があります。

ありがとう!Kevinさん!!本当に助かりました。[smile]

これは検証したわけではなく、私の個人的な環境での話ですが、どうやらApacheをサービスとして走らせていると、こうなってしまうようです。
サービスとしてApacheを走らせるのを止めてみましょう。
しかし、サービスとしてApacheを走らせていないと、Windows7 Xampp Apacheが起動しないにあるようにApacheが立ち上がらなくなるという問題もあるので、悩ましいところです。

PHP Unixタイムスタンプを計算する

PHP

PHP Unixタイムスタンプを計算する

PHPでUnixタイムスタンプを計算するには、

 mktime();

という関数を利用します。

引数は全部整数で、

 mktime (時間, 分 , 秒, 月, 日, 年);

です。

この順番を、間違えやすいんですよね~。
最後は、月・日・年の順番です!
間違えないように~

 例)200年7月1日のタイムスタンプを取得
 mktime(0, 0, 0, 7, 1, 2000));

PHP UUIDをバイナリと文字列の間で相互に変換する

PHP

PHPでUUIDをバイナリと文字列表記で相互に変換する方法です。
UUIDの文字列表記の形式は下記例のようになります。

3c369d68-b161-4b38-9652-a61fc2a057db

 

UUID 文字列からバイナリに変換します

 $binary =  pack("h*", str_replace('-', '', $string));

UUIDバイナリから文字列表記に変換します

 $string = unpack("h*", $binary);
 $string = preg_replace("/([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{12})/", "$1-$2-$3-$4-$5", $stringi[1]);

PHP The magic method __get() must have public visibility and cannot be static

PHP

Warning: The magic method __get() must have public visibility and cannot be static

PHPのOverloadingとして利用している関数は、publicとして設定しないといけません。
http://php.net/manual/en/language.oop5.overloading.php

PHP5.3.1からpublicにしていないと、表題のようなエラーメッセージが表示されるようになりました。

ちなみに、PHPでいうOverloadingは他の言語と意味が違うようですが、動的にプロパティや関数を作れる、ということです。

PHP Sendmailで送信するメールが文字化けしてしまう

PHP

PHP Sendmailで送信するメールが文字化けしてしまう

mb_send_mailを使ってPHPでメールを送る時

 mb_convert_encoding( $subject, "iso-2022-jp", "auto" );

などとmb_convert_encodingを利用しているにも関わらず、メールが文字化けしてしまう場合は、サーバーのPHPの設定も見直した方がよいでしょう。
PHP自体の設定で、mbstringの項目が正しく設定されていないと、メールの文字化けが起こります。
項目の詳細は下記のサイトに詳しいので、下記を見てみてください。

http://www.phpbook.jp/install/phpini/index5.html

最後にApacheを再起動することを忘れずに![smile]