即使你可能认为它,这不是一个重复的帖子,至少我还没能找到另一个处理这个特定问题的线程。
这是问题所在。
我们正在开发一个客户网站,我们使用这个基本的JS ajax调用来从PHP文件中获取数据:
jQuery.ajax({
url: '/pathtofile/my-ajax-handler.php',
type: 'POST',
data: { field1: "value" },
success: function (response) {
jQuery("div.mycontainer").attr("data-update", response);
},
error: function () {
//your error code
}
});
目标PHP文件是一个简单的脚本,它执行curl并从header响应中返回一个值。它不使用ajax调用中提供的POST参数,因此我只需在浏览器中直接输入PHP文件的URL即可获取数据,这可以在没有任何PHP或Apache服务器错误的情况下工作。
PHP文件如下所示:
<?php
function getheaderdatafromcurl($string, $start, $finish) {
$string = " ".$string;
$position = strpos($string, $start);
if ($position == 0) return "";
$position += strlen($start);
$length = strpos($string, $finish, $position) - $position;
return substr($string, $position, $length);
}
$apiURL= 'https://path-to.api.com/apipath/api?limit=1&start=0';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$response = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
$totalcount = trim(getheaderdatafromcurl($header, "Total-Results:", "Link:"));
if($totalcount > 0) {
echo $totalcount;
}
?>
正如我所提到的,当我直接从浏览器执行文件时,PHP脚本会返回没有任何错误的值。 但是当ajax调用尝试获取值时,它会在Chrome开发人员面板中显示“500(内部服务器错误)”。
此外,我们已经尝试将整个网站复制到我们自己的测试服务器上,一切都正常运行,没有任何错误,包括ajax调用。 我们还确保两个Web服务器上的根.htaccess是相同的。
显然,问题似乎是由我们客户的托管服务上的某些有问题/不兼容的服务器配置引起的,但我之前从未遇到过这个特殊问题。
我客户的基本网络服务器信息: 系统:Linux 建造日期:2017年1月20日03:18:35 服务器API:CGI / FastCGI
我希望有人可以帮助我解决这个问题。
更新<!/强>
作为一种临时(可能是永久性的)解决方案,我们决定将网站转移到另一家托管服务提供商,在那里没有任何问题。
与此同时,我们仍然想知道在原始网络服务器上发生此错误的可能原因是什么。
如上所述,问题不在PHP文件本身,例如使用不受支持的功能等 在浏览器中直接打开时,PHP脚本执行时没有错误。 问题是在执行ajax调用时,特别是在原始Web服务器上。
我们无法在其他网络服务器上重新创建问题。