I have a PHP script that runs once a day, and it takes a good 30 minutes to run (I think). Everything there is a safe & secure operation. I keep getting the 500 error after about 10~15 minutes of it. However I can’t see anything in the logs etc. so I’m a bit confused.
So far the things I set up as “unlimited” are:
- max_execution_time
- max_input_time
- default_socket_timeout
Also set these to obscenely high numbers just for this section (the folder in which the script runs)
- memory_limit
- post_max_size
The nature of this script is a SOAP type API that imports thousands of rows of data from a 3rd party URL, puts them into a local MySQL table, and then downloads images attached with each and every row, so the amount of data is significant.
I’m trying to figure out what other PHP variables etc. I’m missing in order to get this to complete through the whole thing. Other PHP vars I have set:
- display_errors = On
- log_errors = On
- error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING
- error_log = “error_log”
There are three timeouts:
In your case seems like the Apache reached its timeout. In such situation it is better to use PHP CLI. But if you really need to do this operation in real-time. Then you can make use of Gearman through which you will achieve true parallelism in PHP.
If you need simple solution that trigger your script from normal HTTP request (Browser->Apache), you can run your back-end script (CLI script) as shell command from PHP but ‘asynchronously’. More info can be found in Asynchronous shell exec in PHP