3

I'm running a PHP loop that 'scans' a directory, every 60 seconds, until a file with a given name is found:

<?php
do {
    if (file_exists("../path/file.txt)) {
        //Do Stuff
        $status = "File Found";
        echo $status;
    } else {
        $status = "File Not Found";
        sleep(60);
    }
} while ($status == "File Not Found");
?>

In this example, would removing sleep() require more server resources?

Thank you,

user1661677
  • 1,252
  • 5
  • 17
  • 32
  • You will have to wait a long time as you have not run clearstatcache [http://php.net/manual/en/function.clearstatcache.php] so it's not actually checking the file exists after the first call, but just checking if the memory of the file exists, which if course it won't, yet. – Martin Feb 02 '16 at 18:51
  • @Martin, I tried adding that into the `else` part of the function. It didn't seem to cut down on the ~15-30 second delay once a file has been added (I'm running a `sleep(5)` on my actual script). – user1661677 Feb 02 '16 at 18:54
  • 1
    actually sorry ignore my comment, as `clearstatcache()` function says: *You should also note that PHP doesn't cache information about non-existent files. So, if you call file_exists() on a file that doesn't exist, it will return FALSE until you create the file. If you create the file, it will return TRUE even if you then delete the file. However unlink() clears the cache automatically.* – Martin Feb 02 '16 at 18:58
  • 1
    so no, no need for `clearstatcache()`.:-) – Martin Feb 02 '16 at 18:59

2 Answers2

3

In a nutshell, yes, but don't worry about it.

While sleep is executing, CPU processing of your script virtually stops. So yes, it will alleviate processing resources. (The script is still in memory, so those resources are still used, but that shouldn't be a problem on a modern machine.)

If your goal is to do this every 60 seconds, the best practice would be make your PHP a cron script, and run it at low priority.


Configure Cron for a low priority PHP script:

nano crontab -e

Add the following:

* * * * *   /usr/bin/nice -n 12 php -q /path/file.php

And replace the /path/file.php with the full path to your PHP script.


Ensure your PHP script is ready

Edit your script's file permissions to allow execution.

chmod ug+rwx /path/file.php

(Again replacing /path/file.php with your actual PHP script's full path.)

Lastly, it's a good idea to make these the very first 2 lines in your PHP script, if you intend to run it this way:

#!/usr/bin/php5
<?php
gavanon
  • 1,293
  • 14
  • 15
2

Yep, every instruction run costs resources whether it be register space, memory, or disk IO.

In this case DO NOT REMOVE your sleep() -- polling constantly without rest is a great way to needlessly crush your resources.

In this case, until the file shows up you'll be looping like mad wasting processor cycles and possibly some disk IO on the conditional check file_exists("../path/file.txt).

By waiting a minute between loop that's tremendously less costly that constant as-fast-as-you-can conditional checks.

Ray
  • 40,256
  • 21
  • 101
  • 138