Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get a PHP function to continue after return?

I have a problem where I call a PHP function on page load - the function checks to see if a file exists it returns the filename, if it doesn't exist it runs a script which is fairly resourceful and takes time - converting a waveform image from an audio file. The problem is the audio files are large so creating the file can take some time, so if the audio file doesn't have this image file associated with it the page load takes as long as the process does.

What I'm after is for this function to return a placeholder image if one doesn't exist, but carry on with the process after the page is loaded - or in the background. So in theory when the page is reloaded at a later date the correct image will be there.

I can get the return of the placeholder image currently but then the process stops and the image doesn't get generated. Here's what I have so far:

function example($file_path, $file_name) {if ($file_path) {

if (file_exists("/path/to/folder/{$file_name}.png")) {
  return "/path/to/folder/{$file_name}.png";
}
if (!file_exists("/path/to/folder/{$audio_file_name}.png")) {

  return "/path/to/folder/processing.png";      

Some stuff in here

 return $new image

} return FALSE

As you can see this just stops when the file doesn't exist but I want the stuff in here to continue in background. Is it possible or do I need a different approach? Like a cron job or something? Any help appreciated.

like image 287
Ben Sonley Avatar asked Feb 14 '13 23:02

Ben Sonley


1 Answers

You might try a queuing system like resque https://github.com/chrisboulton/php-resque

You then can generate a job, that processes the information and quite fast return with the "processing" image. With this approach you won't know when it is finished though.

In my experience this is still easier than arguing with the operations guys to compile php with multi threading support.

like image 191
scones Avatar answered Sep 26 '22 23:09

scones