私は ajax を介して (辞書用に) php ファイルを呼び出していますが、開発マシンのすべての単語 (およびその ID) に対して完全に機能します。ただし、ライブマシンでは、いくつかの単語については、xmlhttp.status 500 (内部サーバーエラー) が発生します。
js コード:
xmlhttp.open("GET","displaySense_GET.php?SenseParameters="+strParams,true);
xmlhttp.send();
そのため、稼働中のマシンには、「115744@909@0@115744@115744@specific_word」などの特定の strParams があり、.php ファイルが内部サーバー エラーでクラッシュします。(ただし、ほとんどの単語ではうまく機能します)。
それで、ブラウザで .php ファイルにアクセスして、何が起こるか見てみましょう。
http://livemachine.com/displaySense_GET.php?SenseParameters=115744@909@0@115744@115744@specific_word
私のブラウザではクラッシュせず、代わりに正しい結果が返されます! つまり、AJAX を介して取得した場合にのみクラッシュ (コード 500 ) し、「115744@909@0@115744@115744@specific_word」などのパラメーター「SenseParameters」の特定の組み合わせに対してのみクラッシュします。繰り返しますが、これはライブ マシンに有効であり、開発マシンでは決してクラッシュしません。
多分それは役に立ちます... displaySense_GET.phpは次のようになります:
<?php
require_once('dirpath.php');
if ( isset($_GET['SenseParameters']) ) {
$senseparams = trim($_GET['SenseParameters']);
$strRes = "";
$output="";
if (strlen($senseparams) > 1) {
try {
$senseparams = str_replace("@", "#", $senseparams);
$obj = new COM("dllname.ExtFunctions") or die("Unable to instantiate dllname");
$output = $obj->fnInitialize("lang", $APPLICATIONDIRECTORY . "\\lex", $APPLICATIONDIRECTORY . "\\dll", "utf8");
$output = $obj->fnBringSense($senseparams);
$strRes = $output;
echo $strRes;
}
catch (Exception $e) {
echo "Fatal error: " . $e->getMessage() . " :internal error";
}
}
} else {
echo "error:displaySense";
}
?>
なぜこれが起こるのか誰でも助けることができますか?おそらく、URLを直接ヒットしてもクラッシュしないという事実ですが、javascriptを介して呼び出すと、ステータス500が返され、何かがわかりますか?
(単語はutf8です-英語ではありませんが、それは問題ではないはずです。もしそうなら、すべての単語でクラッシュします)。
ps さらに驚くべきことは、
$obj->fnBringSense($senseparams);
パラメータを使用し、辞書で実際の検索を行う行は、
$obj->fnInitialize("lang", $APPLICATIONDIRECTORY . "\\lex", $APPLICATIONDIRECTORY . "\\dll", "utf8");
この行は、パラメーターを使用せず、一般的な初期化のみを行います。
編集:
エラーは例外でキャッチされないため、有効な status=200 が返されます。代わりに、ajax 呼び出しでステータス 500 が返されます。