CodeIgniter Forums

Full Version: Impossible to use AJAX on PHP 5.6
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
So I have a PHP version that is affected to the bug of "always_populate_raw_post_data"...

In few words if i set headers after I display content, my app just return an error and stop working.

I need to get some data from ajax, but the problem is that the controller where ajax suppose to work, extend CI_Controller that set some headers, This return me an error:

Code:
<b>Deprecated</b>:  Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in
a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini
and use the php://input stream instead. in <b>Unknown</b> on line <b>0</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent in <b>Unknown</b> on line <b>0</b><br />


How can I solve it? I should find a way to prevent this header to be set...

Thanks in advantage..
Upgrade CodeIgniter.
(12-21-2016, 07:00 PM)ivantcholakov Wrote: [ -> ]Upgrade CodeIgniter.

Hi! Thanks for your reply, I'm actually using the last version of CodeIgniter (3.1.2).

Problem is on PHP but I can't update it.

Is it possible that in CodeIgniter there is no way to use AJAX without passing for a CI_Controller?

Or without setting headers by default from the controller, eventually..
Hm. Switch temporarily CodeIgniter to 'production' mode to test whether this message disappears. Then turn back to 'development' to see this message again. Looks like there is a wrong PHP configuration setting, always_populate_raw_post_data - check what is its value. See how the following information might help:

https://github.com/bcit-ci/CodeIgniter/issues/3254
https://github.com/piwik/piwik/issues/6465
(12-22-2016, 10:46 AM)ivantcholakov Wrote: [ -> ]Hm. Switch temporarily CodeIgniter to 'production' mode to test whether this message disappears. Then turn back to 'development' to see this message again. Looks like there is a wrong PHP configuration setting, always_populate_raw_post_data - check what is its value. See how the following information might help:

https://github.com/bcit-ci/CodeIgniter/issues/3254
https://github.com/piwik/piwik/issues/6465

Thanks! I checked them and I know the problem is on the PHP configuration. Problem here is again that I can't modify it, the admin is very "conservative" and doesn't want to modify the global setup of environment since other applications are working fine.

As explained here
http://stackoverflow.com/questions/28278...m-backbone
"Some claim it happens when calling 
Code:
header()
 after some text has already been outputted."
And actually when i create my controller, extends from CI_Controller, there are new headers set automatically.

I wish then try to find a solution to avoid this header to be sent..
.htaccess file try adding this:

Code:
<IfModule mod_php5.c>
  php_value always_populate_raw_post_data -1
</IfModule>
(12-23-2016, 05:40 AM)InsiteFX Wrote: [ -> ].htaccess file try adding this:

Code:
<IfModule mod_php5.c>
  php_value always_populate_raw_post_data -1
</IfModule>

The server use Fastcgi, and I don't even have override permission set on my webdir. Sadly.

Anyway, the solution that could work for me is: prevent the controller to add this header or remove them, if it's possibile.

Other's AJAX applications are working but mine, built with CodeIgniter, doesn't.

I tried to find where this headers are set on the system/ directory to remove them, trying to find a way to let CodeIgniter understand that I don't want headers if the controller has name "Ajax" but I couldn't find anything.
Ok I found my solution, for everyone interested I just change my AJAX request from POST to GET.. Cause actually I didn't even send any data.. My error, I suppose Smile

Anyway, with GET it works anyway, without need to change settings on apache config.

Thanks everybody for the help Smile
Then you need to watch about browser caching for AJAX GET, disable caching for certain requests when the logic requires.

Code:
$.ajax({
    cache: false,
    ...
});