1

I have a simple script which currently sends an email to 3 persons.

If I go directly to the url, the script works normally ( it sends the emails ).

However, if I set it up as a cron job in cpanel, I get the following notice to my cron email when the cron job fires:

/home/ultranet/public_html/newsletter/blast_script.php: line 1: ?php: No such file or directory
/home/ultranet/public_html/newsletter/blast_script.php: line 2: /*: No such file or directory
/home/ultranet/public_html/newsletter/blast_script.php: line 3: Script: command not found
/home/ultranet/public_html/newsletter/blast_script.php: line 4: January: command not found
/home/ultranet/public_html/newsletter/blast_script.php: line 5: Please: command not found
/home/ultranet/public_html/newsletter/blast_script.php: line 6: ----------------------------------------------------------------------: command not found
/home/ultranet/public_html/newsletter/blast_script.php: line 7: include_once: command not found
/home/ultranet/public_html/newsletter/blast_script.php: line 8: syntax error near unexpected token `('
/home/ultranet/public_html/newsletter/blast_script.php: line 8: `$sql = mysql_query("SELECT * FROM newsletter WHERE received='1' LIMIT 20");'

and the script is:

<?php
/* -------------------------------------------------------------------
Script written by Adam Khoury @ www.developphp.com
                          January 1, 2010
Please retain this credit when displaying this code online 
---------------------------------------------------------------------- */
include_once "connect_to_mysql.php";
$sql = mysql_query("SELECT * FROM newsletter WHERE received='1' LIMIT 20");
$numRows = mysql_num_rows($sql); // Added for "End Campaign Check" at the bottom of this file(not shown on the video)
$mail_body = '';
while($row = mysql_fetch_array($sql)){
    $id = $row["id"];
    $email = $row["email"];
    $name = $row["name"];

    $mail_body = '<html>
<body style="background-color:#CCC; color:#000; font-family: Arial, Helvetica, sans-serif; line-height:1.8em;">
<h3><a href="http://www.developphp.com"><img src="http://www.yoursite.com/images/logo.png" alt="DevelopPHP" width="216" height="36" border="0"></a> Newsletter
</h3>
<p>Hello ' . $name . ',</p>
<p>You can make this out to be just like most any web page or design format you require using HTML and CSS.</p>
<p>~Adam @ DevelopPHP</p>
<hr>
<p>To opt out of receiving this newsletter,  <a href="http://www.developphp.com/Tests/newsletter/optout.php?e=' . $email . '">click here</a> and we will remove you from the listing immediately.</p>
</body>
</html>';
    $subject = "Develop PHP Newsletter";
    $headers  = "From:[email protected]\r\n";
    $headers .= "Content-type: text/html\r\n";
    $to = "$email";

    $mail_result = mail($to, $subject, $mail_body, $headers);

    if ($mail_result) {
        // mysql_query("UPDATE newsletter SET received='1' WHERE email='$email' LIMIT 1");
    } else {
       // this else statement can be used to write into an error log if the mail function fails
       // It can also be removed if you do not need error logging
    }

}

// This section is script I discussed adding to this file on video
// This section is for sending the site owner a message informing them that
// all people in the database have been sent the newsletter for the current campaign
if ($numRows == 0) { // $numRows is set on line 4 using the existing query

     $subj = "Newsletter Campaign Has Ended";
     $body = "The current newsletter campaign has ended. All have been sent the newsletter.";
     $hdr  = "From:[email protected]\r\n";
     $hdr .= "Content-type: text/html\r\n";
     mail("yourEmailAddressHere", $subj, $body, $hdr);

}
// End Check Section
?>

Why does it generate errors, since the script works normally when directly called in the url?

I asked my host but they don't know what the problem is.

2
  • Sounds like the PHP executable can't be found..In a regular crontab you would add PATH=/bin:/usr/bin:/usr/local/bin for example. Commented Feb 10, 2015 at 8:42
  • My host told me to put literally the following: /home/ultranet/public_html/newsletter/blast_script.php Commented Feb 10, 2015 at 9:01

3 Answers 3

3

I guess you just set the cronjob's command to /path/to/your/script.php, But this script is not an executable. You have to prefix this script with the php interpreter, i. e.

php /path/to/your/script.php

in the cronjob's configuration.

Sign up to request clarification or add additional context in comments.

3 Comments

My host told me to put literally the following: /home/ultranet/public_html/newsletter/blast_script.php , so I should do php home/ultranet/public_html/newsletter/blast_script.php? Is it really just "php" at the beginning or something else?
How can I find the path to php without asking the host?
When php can be found in your server's path that should be all. If not check out Danyal Sandeelo's solution. If you don't have shell access on your server you will have to ask your provider for the full path to the php (cli) binary.
1

write down on command line

 which php 

It will return the path of the file, may be something like

 /etc/bin/php

Instead of calling php directly in the cron use it as

/etc/bin/php /path/to/script.php

Php is not set in the environment that is why cron is not able to find php.

4 Comments

where to I write which php? How to find the actual path of php without asking the host?
@OlliccaMindstorm on linux command line ..write down which php, it will tell you the actual path of php
@OlliccaMindstorm let me know if you come across any error
I don't have access to ssh, I will have to deal with my provider.
0

You have to specify the path to php at the begining of each line who execute a php script. For exemple in debian in the crontab (crontab -e):

01 00 * * * /usr/bin/php5 /var/www/Projet/script.php

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.