Search code examples
phpcronfwrite

Fwrite Fails w/ PHP Cron


I have this issue where cron runs a php script every 5 minutes to update a list.

However, the list fails to update 5% of the time, and the list ends up blank. I don't believe it's related to cron, because I think I failed to manually generate the list twice out of like 100 tries.

What I believe it's related to is when the site has like 50+ people on it, it will fail to generate, perhaps being related to the server being busy. I added a check to make sure it's not MySQL not returning rows (which seems impossible) but it still does it leads me to believe fwrite is failing.

<?      
$fileHandle = fopen("latest.html", 'w');
    $links = array();   

$query1 = $db_conn -> query("SELECT * FROM `views` ORDER BY `date` DESC LIMIT 0,20");
while ($result1 = $db_conn -> fetch_row($query1))
{
    $result2 = $db_conn -> fetch_query("SELECT * FROM `title` WHERE `id` = '" . $result1['id'] . "'");

    array_push($links, "<a href='/title/" . $result2['title'] . "'>" . $result2['title'] . "</a>");
}

if (count($links) > 0)
    fwrite($fileHandle, implode(" • ", $links));
else
    echo "Didn't work!";    

fclose($fileHandle);
?>

Could there be a slight chance the file is in use so it ends up not working and writing a blank list?


Solution

  • $fileHandle = "latest.html", 'w');

    I'm going to assume you mean

    $fileHandle = fopen("latest.html", 'w');

    the 'w' here opens the file, places the cursor at the start and truncates the file to zero length.

    If you check count($links) before doing this you wont truncate the file when there is nothing to be written to it.

    <?php
    $links = "QUERY HERE AND HANDLE THE RESULTS (REMOVED)";  
    if (count($links) > 0)
    {  
        $fileHandle = fopen("latest.html", 'w');  
        fwrite($fileHandle, implode(" • ", $links));
        fclose($fileHandle);
    }
    else
    {
        echo "Didn't work!";
    }
    ?>