2015-02-10 60 views
1

我有一个简单的脚本,目前发送电子邮件给3人。cron作业不会触发工作的PHP脚本,生成错误

如果我直接转到url,脚本正常工作(它发送电子邮件)。

但是,如果我把它作为的cPanel cron作业,我得到如下通知我的cron电子邮件时cron作业火灾:

/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");' 

和脚本是:

<?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 
?> 

它为什么会产生错误,因为直接在url中调用脚本时脚本正常工作?

我问我的主人,但他们不知道问题是什么。

+0

听起来像PHP可执行文件无法找到..在常规的crontab中,例如,您会添加PATH =/bin:/ usr/bin:/ usr/local/bin。 – Oli 2015-02-10 08:42:45

+0

查看我的解决方案 – 2015-02-10 08:51:18

+0

我的主持人告诉我要从字面上加上以下内容:/home/ultranet/public_html/newsletter/blast_script.php – 2015-02-10 09:01:47

回答

3

我想你只是将cronjob的命令设置为/path/to/your/script.php,但是这个脚本不是可执行文件。你必须在php脚本中添加前缀。即

php /path/to/your/script.php

中的cronjob的配置。

+0

我的主持人告诉我要从字面上加入以下内容:/home/ultranet/public_html/newsletter/blast_script.php ,所以我应该做的PHP主页/ ultranet/public_html /时事通讯/ blast_script.php?它开头还是其他的只是“php”? – 2015-02-10 09:02:41

+0

如何在不询问主机的情况下找到php的路径? – 2015-02-10 09:09:40

+0

当php可以在您的服务器的路径中找到应该是所有的。如果不检查Danyal Sandeelo的解决方案。如果您的服务器上没有shell访问权限,则必须向您的提供者询问php(cli)二进制文件的完整路径。 – 2015-02-10 09:11:54

0

你必须在执行php脚本的每一行的开头指定php的路径。 对于为例Debian中在crontab(crontab -e命令):

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

写在命令行

which php 

它将返回文件的路径, 可能类似于

/etc/bin/php 

不是直接在cron中调用php,而是使用它作为

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

Php未在环境中设置,因此cron无法找到php。

+0

哪里可以写哪个php?如何在不询问主机的情况下找到php的实际路径? – 2015-02-10 09:08:25

+0

@lliccaMindstorm在linux命令行中写下哪个php,它会告诉你php的实际路径 – 2015-02-10 09:15:50

+0

@OlliccaMindstorm让我知道你是否遇到过任何错误 – 2015-02-10 09:19:35