Timeout a function in PHP
foreach, function, php, timeout
Solution
It depends on your implementation. 99% of the functions in PHP are blocking. Meaning processing will not continue until the current function has completed. However, if the function contains a loop you can add in your own code to interrupt the loop after a certain condition has been met.
Something like this:
foreach ($array as $value) {
perform_task($value);
}
function perform_task($value) {
$start_time = time();
while(true) {
if ((time() - $start_time) > 300) {
return false; // timeout, function took longer than 300 seconds
}
// Other processing
}
}
Another example where interrupting the processing IS NOT possible:
foreach ($array as $value) {
perform_task($value);
}
function perform_task($value) {
// preg_replace is a blocking function
// There's no way to break out of it after a certain amount of time.
return preg_replace('/pattern/', 'replace', $value);
}
Problem
Is there a way to timeout a function? I have 10 minutes to perform a job. The job includes a for loop, here is an example: ``` <?php foreach($arr as $key => $value){ some_function($key, $value); //This function does SSH and SFTP stuff } ?> ``` $arr has 15 elements and some_function() sometimes may take more than 1 minutes. In fact once it got hanged for 5 minutes. Is there a way I can timeout the function call and move on with next element in $arr? Thank you!!