2016-03-30 16 views
0

私は2台のサーバー、Windows 7を実行するテストサーバー、およびWindows Server 2008を実行するサーバーを持っています。(うん、残念ですがWindowsのPHP7にアップグレードされました:php_soap.dllがクラッシュする/頻繁に500のエラーが発生する

今月は、5.4.1.4で動作していました。

私はそれらをPHP 7にアップグレードすることに決めました。すべてはテストボックスで完全にうまくいった。しかし、もちろん、それは多くのトラフィックを取得しません。

[prod/Windows Server 2008]ボックスでは、Webアプリケーションが1〜2分実行されてから「500エラー」と表示されるようです。私はリフレッシュすることができ、時々彼らは再び働くだろう、時々それは数分かかるだろう。

新しいPHPエラーログには何も書き込まれませんでした(IISのPHPマネージャセクションでは正しいINIと正しいログファイルが指摘されていましたが)。

Webサーバーの失敗した要求ログは、FastCGIが500個のエラーが多すぎるために失敗したことを単純に示しました。

イベントビューアを確認したところ、アプリケーションのクラッシュが発生し、php_soap.dllを指摘していました。

今、そのファイルはそこにあり、それは私がnon-prodで持っているのと同じサイズです。

まだ、私のスクリプトは正当な理由で500個のエラーが発生していた可能性があると考えました。そこで私はそれらの1つを調べた。それがテストボックス上の作業用のものと完全に一致していることを確認しました。それをリフレッシュし...それは正常に働いた。もう少し、500のエラーをリフレッシュしました。

最後に、IISマネージャー - > PHPマネージャーに入り、SOAP拡張機能を無効にしました。

私は、失敗した要求の膨大な数を見るのを止めて、私はSOAP呼び出しを行う1つのスクリプトを除いて、すべて500エラーを見逃しました。

私はテストボックスからprodボックスにdllをコピーしようとしました。 PHPで拡張機能を再び有効にしました。問題は返されました。ですから、私は5.4.1.4の設定に戻ってきました。

どのように私はこのDLLが問題を引き起こしているか、そして/またはそれを修正する方法を考え出すことができますか?

ありがとうございます!

- =

+0

は最高のアイデアではないかもしれません。また、PHP 7用に再コンパイルし、PHP 5で使用したのと同じものを使用する必要はありません(既に使用していない場合)。これが問題ではない場合は、互換性の問題としてPHPの人々と一緒にこれを上げることができると思います。 – apokryfos

+0

テストサーバとプロードサーバの両方... PHPアップグレードインストールを行ったときに... Webプラットフォームインストーラを使用し、どちらもx64 PHP 7インストールを使用しました。だから、私がDLLをコピーしていると言ったら、まったく同じファイルであったはずだと思っています。 – DaveyBoy

+0

通常は動作しますが、特定のシステム用の不正なDLLの可能性を完全に排除したい場合は、特定のPHPディストリビューションとアーキテクチャをターゲットにしてコンパイルする必要があります。 – apokryfos

答えて

0

私は修正を考え出しました。なぜ私はプロダクトサーバーでこれを行う必要があるのか​​分かりません。SOAP呼び出しを行うスクリプトがあるディレクトリは、匿名認証とWindows認証の両方を許可するように設定されていました。私がブラウザで手動でテストしていたとき、私はそれを受け入れ、スクリプトをAnonymousとして実行します。

私は突然理論を実現しました。私の間違いのスクリプトは、リモートデスクトップガジェットによって呼び出されていました...だから、おそらく匿名で実行するのはおそらくデフォルトしていました。しかし、私はスケジュールされたタスク(特定のユーザーとして)によって実行されるSOAPを持つ別のスクリプトを持っています。私はそのエラーを見たことがなかった!

私はテストしていたディレクトリで匿名認証を無効にし、ブラウザからスクリプトを再読み込みしました。確かに、私はログインしなければならなかったが、それはその後働いた!同じディレクトリのSOAPスクリプトを呼び出すデスクトップガジェットの私のバージョンをチェックしました...そして、今もうまくいきました!

私がテストマシンでこれを見なかった主な理由は、そこにあるプロキシSOAPスクリプトを指すデスクトップガジェットが実際にはないということです。それと、私は、スケジュールされたタスクで実行されるスクリプトが、プロダクトマシンで失敗していると思っていました。私は初めてPHP7を起動した後、最初の数分で500のエラーを投げかけていました。タスク/スクリプトは、テストボックスで実行されます。

ありがとうございます!

+0

スケジュールされたタスクによって実行される私のscripotも失敗していることが判明しました...私はそれから生成された失敗した要求ログファイルの束を見ていませんでした。私はこれを修正する方法を理解できませんでした。これは、実際にDOSバッチファイル/ PHP CLIによってトリガーされたSOAP呼び出しスクリプトです。 (それは、FASTCGIがFASTCGIをログに記録していない理由を説明しています.FASTCGIを使用していませんでした) SOAPモジュールの代わりにCURLを使用するようにスクリプトを書き直しました。 – DaveyBoy

+0

私の根本的な推測は:SOAPとその認可要件に関する何かがPHPバージョン5.4.14と7の間で変更されていなければなりません。なぜ何らかの認可エラーに関するログが表示されないのは分かりませんがどこでも。 – DaveyBoy

1

私はこれが古いと知っていますが、同様の問題があり、キャッシュされたWDSLファイルはPHPのバージョン間でバイナリ互換ではありません。

デフォルトでは、php.iniではSOAPモジュールがキャッシュを有効にしています。クラッシュを避けるには、現在のWDSLキャッシュを消去するか、新しいPHPインストールのキャッシュ場所を変更する必要があります。それは一つのシステム用にコンパイルされますが、他では失敗することができるので、異なる環境からDLLを超えるコピー

役立ちます

希望...

関連する問題