PHP経由でwmvを出力していると、MediaPlayerを直接起動するとうまくいかず、ダウンロードなら正常に処理が実行されるという、なんだかよくわからない現象に遭遇しました。
解決するのに少し手間取ったのでメモ。
MediaPlayerとサーバとの通信をパケットキャプチャでみると、ダウンロードとの違いは、MediaPlayerは複数のコネクションを張るということっぽいです。
ということは、2本目以降のコネクションでPHPが途中で止まっているんではないか?と目星をつけてコードを地道に追いかけて行きました。
すると、どうやらsession_startで止まっているようです。
で、Google先生にお伺いしてみると、『セッションデータは、同時書き込みを防ぐためにロックされるため、あ る時点であるセッションの処理ができるスクリプトは、1つだけです。』 と仰るではないですか!うすうす感づいていたんですが、書いているところが地味すぎます…。
結局、時間がかかる処理(今回はwmvの出力)の前に、session_write_close関数を呼んで、セッションのロックを解放することにしました。
・・・PHPのセッションの保存先をファイルではなくメモリとかにすればロックされないんですかね?
(参考資料)
PHPマニュアル: session_write_close
カテゴリ : PHP | コメント(0)
ゴールデンウィーク中は新しいPC(WindowsXP x64 edition)で、ずっとワード(MS Office 2007)を触っていました。
その中で、原因不明の動作のもたつきやメモリリーク、OSシャットダウン時のエラーなどに悩まされていました。
OSを入れなおしても現象は解決しませんでした。
今日、やっと解決したので、同じ悩みを持っている方のためにメモを残しておきます。
まず、シャットダウン時のエラーについて原因を切り分けました。
エラーは「WMS Idle」というプロセスが停止できないというものです。
インターネットで調べると、昔はバグの可能性があったのですが修正されているとの事で、インストールされているアプリケーションとの相性を疑いました。
(エラーが発生しているもの自体は、MS Officeのプロセスです)
他のアプリケーションとの相性を切り分けるに以下のようにしました。
まず、スタートメニューで「ファイル名を指定して実行」で「msconfig」と入力します。
そうすると「システム構成ユーティリティ」が表示されますので、その「スタートアップ」タブにあるチェックを外すことによって起動時に起動するプロセスを抑制することができます。
チェックを外すとエラーが発生しなくなった場合、そのプロセスが悪さをしていることになります。
僕の場合は「NMBgMonitor.exe」というところのチェックを外すとエラーが出なくなりました。
…何回も再起動する必要がありましたので、骨が折れました(汗)
このプロセスはNeroというライティングソフトに関係あるようです。
ソフトをアンインストールするとシャットダウン時のエラーはおろか、原因不明の動作のもたつきも解消しました!
メモリリークは未確認ですが、解決していたらいいなぁ…。
# 「Googleデスクトップ」や「MSデスクトップ」も同じような現象を起こすことがあるようです。
カテゴリ : 雑記 | コメント(7)