Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8145301
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 6, 20262026-06-06T13:37:17+00:00 2026-06-06T13:37:17+00:00

I’m looking for a PHP script that can be run as a cron job

  • 0

I’m looking for a PHP script that can be run as a cron job on my web host. It needs to run through a list of websites and check to make sure that each returns the Http response 200 OK. If a site doesn’t return that response, or isn’t available, it needs to send off an email to the website admin.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-06T13:37:19+00:00Added an answer on June 6, 2026 at 1:37 pm

    I’ve since refined this script to check to see if your website/webserver is still up and running. I’ve improved the error handling slightly and added a comfort email to let you know that the script is running successfully.

    The comfort email relies on another file called healthcheck.txt to store some values until the script is run the next time. If it doesn’t get automatically created, just create a 0 bytes text file, upload it and set the correct file permissions on it (read/write).

    <?php
    // set email server parameters
    ini_set('sendmail_from', 'server.status@host.example.com' );
    ini_set('SMTP', '127.0.0.1' );
    ini_set('smtp_port', '25' );
    
    ini_set('allow_url_fopen', true); //enable fopen
    
    // define list of webservers to check
    $webservers = array('www.example.com', 'www.example2.com');
    
    function sendemail($subject,$message) // email function using standard php mail
    {
    $wrapmessage = wordwrap($message,70,"\n",true); // mail function can't support a message more than 70 characters per line
    $to = 'you@example.com'; // who to send the emails to
    // Headers ensure a properly formatted email
    $headers = 'From: server.status@host.example.com' . "\r\n" .
        'Reply-To: server.status@host.example.com' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
    
    return mail($to, $subject, $wrapmessage, $headers); //send the email
    }
    
    function getresponse($url) //queries a url and provides the header returned and header response
    {
    $ch = curl_init(); // create cURL handle (ch)
    if (!$ch) { // send an email if curl can't initialise
        $subject = "Web Server Checking Script Error";
        $message = "The web server checking script issued an error when it tried to process ".$url.". Curl did not initialise correctly and issued the error - ".curl_error($ch)." The script has died and not completed any more tasks.";
        sendemail($subject,$message);
        die();
    }
    // set some cURL options
    $ret = curl_setopt($ch, CURLOPT_URL, "http://".$url."/");
    $ret = curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);   
    $ret = curl_setopt($ch, CURLOPT_HEADER, true);
    $ret = curl_setopt($ch, CURLOPT_NOBODY, true);
    $ret = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
    $ret = curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    
    // execute
    $ret = curl_exec($ch);
    
    if (empty($ret)) {
        // some kind of an error happened
        $subject = "Web Server Checking Script Error";
        $message = "The web server checking script issued an error when it tried to process ".$url.". Curl was trying to execute and issued the error - ".curl_error($ch)." Further URLs will be tried.";
        sendemail($subject,$message);
        curl_close($ch); // close cURL handler
        } else {
            $info = curl_getinfo($ch); //get header info - output is an array
            curl_close($ch); // close cURL handler
    
            if (empty($info['http_code'])) {
                    $subject = "Web Server Checking Script Error";
                    $message = "The web server checking script issued an error when it tried to process ".$url."\r\nNo HTTP code was returned";
                    sendemail($subject,$message);
            } else {
                // load the HTTP code descriptions
                $http_codes = parse_ini_file("/server/path/to/http-response-codes.ini");
    
                // results - code number and description
                $result = $info['http_code'] . " " . $http_codes[$info['http_code']];
            return $result; // $result contained a code, so return it
            }
        return None; //$info was empty so return nothing
        }
    return None; // $ret was empty so return nothing
    }
    
    // this bit of code initiates the checking of the web server
    foreach ($webservers as $webserver) { //loop through the array of webservers
        $status = getresponse($webserver); //get the status of the webserver
            if (empty($status)) {
            // nothing happens here because if $status is empty, the function returned nothing and an email was already sent.
            } else {
                if (strstr($status, "200")) { //search for the error code that means everything is ok
                // If found, don't do anything, just process the next one
                } else {
                    $timestamp = date("m/d/Y H:i:s a", time()); //get the current date and time
                    $error = $webserver." - ".$status." status error detected"; //set error message with server and response code
                    $message = "At - ".$timestamp." - a http response error was detected on ".$webserver.".\r\nInstead of a 200 OK response, the server returned ".$status."\r\nThis requires immediate attention!"; //At what time was an error detected on which server and what was the error message
                    sendemail($error,$message); //trigger the sendemail function
                }
            }
    }
    
    // Health Check. Comfort email twice a day to show script is actually running.
    $healthfile = "/server/path/to/healthcheck.txt"; // path with the name of the file to store array data
    $hfsize = filesize($healthfile); // filesize of healthcheck file
    $notify = "16:00"; // specify the earliest time in the day to send the email - cron job settings dictate how close you'll get to this
    $datenow = date("d-m-Y"); //what is current date as of now
    
    if (file_exists($healthfile) && $hfsize !== 0) { //read contents of array from file if it exists and has data, otherwise create array with some defaults
        $valuestor = unserialize(file_get_contents($healthfile));
        } else { // file doesn't exist so we'll create an array with some defaults
        $valuestor = array("email_sent"=>0, "sent_date"=>$datenow, "iterations"=>0);
    }
    $i = $valuestor['iterations']; //get the iterations number from the valuestor array
    $curdate = strtotime($datenow); //convert current date to seconds for comparison
    $stordate = strtotime($valuestor['sent_date']); //convert stored date to seconds
    if ($valuestor['email_sent'] == 1) { // has the email already been sent today
        if ($curdate == $stordate) { // if it has, is the current date equal to the stored date
            $i++; // yes it is, just increment the iterations
        } else { // it's a new day, reset the array
            $timestamp = date("m/d/Y H:i:s a", time()); //get the current date and time
            $subject = "Web Server Checking Script Health Status"; //set email subject line
            $message = "Message created: ".$timestamp."\r\nThe Web Server Checking script ran successfully for ".$i." time(s) on the ".$valuestor['sent_date']; //email message
            sendemail($subject,$message); //trigger the sendemail function
            $valuestor['email_sent'] = 0; // set email sent to false
            $valuestor['sent_date'] = $datenow; // set email send date to today
            $i = 1; // this is the first time the script has run today, so reset i to 1. It gets written to the array later.
            // echo $message;
        }
    } else { // email has not been sent today
        $checktime = strtotime($notify); //convert $notify time (for current date) into seconds since the epoch
        if (time() >= $checktime) { // are we at or have we gone past checktime
            $i++; // increase the number of script iterations by 1
            $timestamp = date("m/d/Y H:i:s a", time()); //get the current date and time
            $subject = "Web Server Checking Script Health Status"; //set email subject line
            $message = "Message created: ".$timestamp."\r\nThe Web Server Checking script has successfully run and completed ".$i." time(s) today."; //email message
            sendemail($subject,$message); //trigger the sendemail function
            $valuestor['email_sent'] = 1; // set array to show that email has gone
            // echo $message;
        } else { // we haven't reached the check time yet
        $i++; // just increment the iterations
        }
    }
    $valuestor['iterations'] = $i; // update the array with the iterations number
    
    // save the array to the file again
    $fp = fopen($healthfile, 'w+'); // open or create the file, clear its contents and write to it
    if (!$fp) { // handle the error with an email if the file won't open
    $subject = "Web Server Checking Script Error";
    $message = "The web server checking script issued an error when trying to open or create the file ".$healthfile." The script was ended without any new information being stored.";
    sendemail($subject,$message);
    } else {
    fwrite($fp, serialize($valuestor)); // write to the file and serialise the array valuestor
    fclose($fp); // close the file connection
    } 
    die(); // make sure that script dies and cron job terminates
    ?>
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a jquery bug and I've been looking for hours now, I can't
That's pretty much it. I'm using Nokogiri to scrape a web page what has
I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
I'm parsing an RSS feed that has an &#8217; in it. SimpleXML turns this
I'm trying to create an if statement in PHP that prevents a single post
I would like to count the length of a string with PHP. The string
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I have just tried to save a simple *.rtf file with some websites and
I want to count how many characters a certain string has in PHP, but
this is what i have right now Drawing an RSS feed into the php,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.