8月 20

エラー 324(net::ERR_EMPTY_RESPONSE)

ハツザキ エラー 324(net::ERR_EMPTY_RESPONSE) はコメントを受け付けていません

この記事をブックマークする : このページをはてなブックマークに追加 このページをLivedoorクリップ! このページをニフティクリップに登録 newsing it! このページをdel.icio.usに登録 このページをBuzzurlにブックマーク

大量のデータをExcelに書き出すphpスクリプトを作っていて、エラー324というのが発生した。

検索して調べてみてもハッキリとした原因がわからなかったのですが、どうやらリクエストに対して、サーバ側からのレスポンスが送られてこないため、ブラウザ側で接続を切ったというようなことみたいです。

今回は大量のデータ処理を行っていたため、処理が終わるまでに時間がかかっていることが原因。

解決するためには、

ob_end_clean
flush
echo

などを利用し、処理の間に定期的にブラウザ側にレスポンスを返してあげる。
そうすれば、ブラウザは勝手に接続を切ることがなくなり、処理が終了するまで、待っててくれます。

8月 18

日付文字列をEXCELのシリアル値に変換

ハツザキ 日付文字列をEXCELのシリアル値に変換 はコメントを受け付けていません

この記事をブックマークする : このページをはてなブックマークに追加 このページをLivedoorクリップ! このページをニフティクリップに登録 newsing it! このページをdel.icio.usに登録 このページをBuzzurlにブックマーク

PHPで取得したデータをEXCEL形式で
出力するプログラムを組んでいるのですが、
日付文字列をシリアル値に変換するところで少し詰まったのでメモ。

PHP5.2以降では、datetime関数を利用することで
日付をシリアル値に変換することができるのですが、
PHP5.1以前の環境では、datetime関数は
実験的な形でしか導入されておらず、簡単に使えません。

そこで今回は、関数を使わずに、
日付をシリアル値に変換する処理を書くことにしました。


シリアル値というのは、EXCELが日付の表示に使っていて、
1900年1月1日を基点として、1日毎にプラス1されます。

現在時刻のシリアル値を求めるには、
1970年1月1日を基点とした秒数であるUNIXタイムを使い、

(/60/60/24)+25569(=70年分のシリアル値)

の式でシリアル値が算出できる。

しかし、これだけだとダメで、
日本の時刻は時差が9時間あるので、
それを加味してやると以下の式になる。

(/60/60/24)+25569+9/24

この式を使うことで日付文字列をシリアル値に変換することができました。
(もちろん日付文字列は、strtotimeなどでUNIXタイムに変換します。)


理解すると簡単な処理だったけど、
理解するまでに少し時間がかかってしまった。。