我在我的PHP网站的许多部分使用$ajax请求一切正常,直到几天前我所有的$ajax请求开始给出错误500 – 内部服务器错误.
我可以在控制台中看到该错误,并且我还使用错误处理程序来获取有关错误的更多信息.
那是我的Ajax请求
window.setInterval(function(){
$.ajax({
type: "GET",
url: "include-ajax/is_it_midnight.PHP",
dataType: "json",
success: function(data)
{
if(data == 1)
{
//Reload website at midnight
location.reload();
}
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest);
alert(textStatus);
alert(errorThrown);
alert(XMLHttpRequest.responseText);
}
});
}, 10000);
这就是我在浏览器上得到的:
is_it_midnight.PHP:
<?PHP
$current_hour = date('H');
$current_minute = date('i');
$current_second = date('s');
//If the website was open between the 00:00:00 and 00:00:10 it will refresh automatically
//else it will not be open it will open after midnight so it will have aleardy the new day data
if($current_hour == 0 && $current_minute == 0 && ($current_second > 0 && $current_second < 10))
{
$is_it_midnight = 1;//This flag means it is midnight
}
else
{
$is_it_midnight = 2;//This flag means it is not midnight
}
echo json_encode($is_it_midnight);
?>
一些说明:
1.它不会一直给出这个错误,有时它工作正常并正确地给出响应(我在网站上看到响应和标题信息,当我检查chrome控制台中的网络选项卡时).
2.如果类型是GET或POST并不重要,它一直给我同样的问题(我用GET类型显示这个ajax示例,但我在我的网站中也有类型问题的POST类型请求).
3.我添加了ini_set(‘display_errors’,1);“ini_set(‘display_startup_errors’,1);“error_reporting(-1);到is_it_midnight.PHP的开头,但没有显示错误,因为我相信没有语法或任何其他PHP错误(因为有时它工作正常和正确).
4.我还查看服务器错误日志,但根本没有与此文件或任何其他ajax文件相关的内容.
5.我试图检查这是否是超时错误但是我没有从textStatus获得任何超时它只是警告错误.
更新:
我检查了apache日志,我发现这样的事情:[Sat Feb 21 07:35:05 2015] [error] [client 176.40.150.195]脚本标题的提前结束:is_it_midnight.PHP,referer:http://www.example .COM / index.PHP文件
我需要任何有用的帮助或线索来理解为什么我会得到这个错误有什么我没有尝试它来获取有关该错误的更多信息???
解决方法:
首先,您必须确保错误日志机制配置得当.
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/PHP-error.log");
error_log( "PHP Errors!" );
我注意到的另一个问题是你的PHP脚本没有返回100%有效的JSON,我也认为你可以重构代码来返回结果,而无需创建任何变量(更好的性能,更快,更糟糕的代码),避免任何一种内存分配问题.
在某些情况下,非常加载的共享服务器或不可扩展的VPS可以尝试非常低的内存,并且在尝试为变量分配内存时可能会随机生成错误.
我不知道你是否使用某种框架,但在纯PHP中编写脚本的方法不同,可以是这样的:
header('Content-Type: application/json');
return (date('H') == 0 AND date('i') == 0 AND (date('s') > 0 AND date('s') < 10)) ? json_encode(['res' => 1]) : json_encode(['res' => 2]);
此代码将始终返回有效的JSON格式,如{“res”:1}或{“res”:2},您可以轻松地访问此类JS,如此res = data.res;的console.log(RES);你将这样评价:(data.res === 1).
在你的情况下,你正在使用dataType:“json”,这几乎在所有情况下,如果你的PHP没有返回有效的JSON,它就不会很好.也许你考虑删除它,如果你没有被期望只有有效的JSON,那么它在这里并不是很重要.
你可以尝试一下,看看发生了什么.
如果错误仍然存在,您可以在/tmp/PHP-error.log文件中看到它.并与您的托管公司评论.
作为括号,我想补充一点,你的脚本应该返回1或0,真或假而不是1或2.这只是一种更实用的方法.
如果我的回答有帮助,或者如果您无法解决问题,请告诉我,我会尽力帮助您.
再见! Suerte!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。