I use $ajax
requests in many parts of my PHP website everything was working perfectly until few days ago all my $ajax
requests start giving e
I don't know if this would help you, but i had the same issue a while ago, the only action i did was removing this from my jquery ajax functions
dataType: "json"
Here is some functions i made ("mostrar_alert_ui" is a modal alert windows function, same as "MostrarVentanaBoton" wich is a confirm alert function)
//Función ajax con alert
function Funciones_Ajax_conAlert(urlx, datax, callback, phpencode) {
var TodoBien = false;
$.ajax({
type: "POST",
url: urlx,
data: datax,
async: true,
success: function (data) {
if (phpencode == true) {
data = $.parseJSON(data);
}
console.log(data) //Solo para propositos de debug
if (data.success) {
MostrarVentanaBoton(data.titulo, data.mensaje, data.boton, callback);
} else {
mostrar_alert_ui(data.titulo, data.mensaje)
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Failed " + urlx);
alert(xhr.responseText);
alert(thrownError);
}
});
}
And just in case, double check the directions
It is very possible that your host has done a recent update on their servers which causes the problem.
You should advice them to look at the memory consumption, and maybe try to increase Apache memory limit parameter: "RLimitMEM" to upper value, which is a common factor for this kind of error.
If it's not happening every time the script runs, then my guess is:
Well, the "Premature end of script headers" is pretty common, and there's few possibilities. It indicate that PHP script has been stopped for some reason before sending any output. It's nothing to do with AJAX itself.
Possibilities:
1. Apache misconfiguration
Upgrading or downgrading to a different version of PHP can leave residual options in the httpd.conf. Check the current version of PHP using php -v on the command line and search for any lines mentioning another version in the httpd.conf. If you find them, comment them out, distill the httpd.conf and restart apache.
Check your Apache configuration for any changes and revise PHP's module list (try to disable them one by one).
2. Resource limit
The RLimitCPU and RLimitMEM directives in the httpd.conf may also be responsible for the error if a script was killed due to a resource limit.
3. Third party extension
A configuration problem in suEXEC, mod_perl, or another third party module can often interfere with the execution of scripts and cause the error. If these are the cause, additional information relating to specifics will be found in the apache error_log.
4. SuPHP crashing
If suphp’s log reaches 2GB in size or larger you may see the premature end of scripts headers error. See what the log contains and either gzip it or null it. Restart apache and then deal with any issues that the suphp log brought to light. The suphp log is located at: /usr/local/apache/logs/suphp_log
5. File permissions
The script’s permissions may also cause this error. CGI scripts can only access resources allowed for the User and Group specified in the httpd.conf. In this case, the error may simply be pointing out that an unauthorized user is attempting to access a script.
As you can see, there's few possibilities. You mentioned that it crashes only sometimes, so it may be something with resources or configuration. For example - if your server is under heavy load, Apache can reject your request and throw this generic "Premature end of script headers" error.
What have you tried already?
First of all you must be sure that the error log mechanism it's well configured.
To do that add the following code or similar:
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Php Errors!" );
An other issue that I notice it's that your php script it's not returning 100% valid JSON and I also think that you can refactor the code to return the result without the necessity to create any variable (better performance, faster, lees code) avoiding any kind of memory allocations problems.
In some cases very loaded shared servers or unscalable VPS can experiment very low memory and can randomly generate errors when try to allocate memory for variables.
I don't know if you use some kind of Framework or not but a different way to write your script in pure php can be something like this:
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]);
This code will always return valid JSON format like {"res":1}
or {"res":2}
and you can easily access this trough JS like this res = data.res; console.log(res);
and you'll evaluate this like this: (data.res === 1)
.
In your case, you are using dataType: "json"
and this in almost all cases it's not woking well if your php it's not returning valid JSON. Maybe you consider to remove it, it's not very important here if you are not enferced to expect only valid JSON.
You can give it a try and see what is happening.
If the error persist you can see it inside the /tmp/php-error.log
file. and comment it with your hosting company.
As a parentheses, I would like to add that your script should return 1 or 0, true or false instead of 1 or 2. It's just a more pragmatic way to doit.
Let me know if my answer was helpful or if you can't fix the problem and I will try to help you.
Bye Bye! Suerte!
My guess is that the PHP process is killed by the server due to some (mis)configuration on your host (I suspect that mod_fastcgi/mod_fcgid is used; you can check this with phpinfo()
). Also, you execute the call on each 10 seconds which could hit some limit. What I would do in your case:
mod_fastcgi
/mod_fcgid
(Server API
field in phpinfo()
).access_log
and see if a pattern exists for 500
status code for script is_it_midnight.php
.setInterval
refresh time to 15s, 20s, 25s, 30s and etc. to see if there is any improvement.error_log (memory_get_usage());
before echo json_encode($is_it_midnight);
to see what is the memory usage allocated to the script (although it is very unlikely that the memory usage is a problem given the small script).