0

我正在通过 ajax 调用一个 php 文件(对于字典),它对我的​​开发机器中的所有单词(及其 ids)都有效。但是在现场机器中,对于某些话,我得到一个 xmlhttp.status 500 (内部服务器错误)。

js代码:

    xmlhttp.open("GET","displaySense_GET.php?SenseParameters="+strParams,true);
    xmlhttp.send();

所以在现场机器中,有一些特殊的 strParams 例如“ 115744@909@0@115744@115744@specific_word ” .php 文件因内部服务器错误而崩溃。(尽管对于大多数单词来说效果很好)。

所以我想,嘿,让我们在我的浏览器中点击 .php 文件看看会发生什么

http://livemachine.com/displaySense_GET.php?SenseParameters=115744@909@0@115744@115744@specific_word

在我的浏览器中它不会崩溃,而是返回正确的结果!换句话说,它仅在通过 AJAX 检索时崩溃(代码 500),并且仅针对参数“SenseParameters”的某些特定组合,例如“115744@909@0@115744@115744@specific_word”。同样,这对现场机器有效,在开发机器中,它永远不会崩溃。

也许它有帮助...... 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");

行,它不使用参数,只进行一般初始化。

编辑:

错误不会在异常中被捕获,因此返回一个有效的状态=200,它会在 ajax 调用中返回一个状态 500

4

0 回答 0