我正在尝试使用我的1and1托管设置一个cron作业。如果我写一个简单的PHP代码,cron运行正常。但是当包含数据库连接并运行代码时,它就不会运行。
代码很糟糕:
<?php mail('email@gmail.com','At4U test cron','testing cron'); ?>
<?php
define('__ROOT__', dirname(dirname(__FILE__)));
require_once(__ROOT__.'/AT4U/extensions/phpmailer/class.phpmailer.php');
include(__ROOT__.'/AT4U/core/functions/general.php');
function db_connect() {
$db_name = '***************';
$db_user = '***************';
$host = '***************';
$password = '***************';
// Define connection as a static variable, to avoid connecting more than once
static $connection;
// Try and connect to the database, if a connection has not been established yet
if(!isset($connection)) {
$connection = mysqli_connect($host,$db_user,$password,$db_name);
}
// If connection was not successful, handle the error
if($connection === false) {
// Handle error - notify administrator, log to a file, show an error screen, etc.
return mysqli_connect_error();
}
return $connection;
}
$con = db_connect();
$sql = "SELECT * FROM blog WHERE active = 1 ORDER BY id DESC LIMIT 1";
$result = $con->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$latest_blog = $row['title'];
}
}
email('email@gmail.com','Latest Blog',$latest_blog);
?>
如您所见,在页面顶部,我插入了一个简单的电子邮件功能,以测试cron是否有效。我每分钟收到一封电子邮件。但是在这个简单的代码下面,我编写了数据库查询并尝试使用数据库中的信息发送电子邮件,但它不起作用。
有谁知道为什么?
答案 0 :(得分:0)
(我假设程序在常规环境中运行?)
cron作业在与Web作业不同的环境中运行。 一些可能的原因:
也许数据库的东西工作正常,但是电子邮件声明无效。开头的mail(..)语句与末尾的email(..)语句不同。尝试在最后使用相同的mail(..)语句。
尝试邮寄__ROOT__
常量。这是你所期望的吗?
工作目的不同。我总是在CLI和cron作业的开头使用以下行(您可能希望根据您的具体情况删除..部分。):
chdir(realpath(__DIR__ . '/..'));
例如,在CLI / cron作业的情况下,在我的服务器上,以下环境变量为空:DOCUMENT_ROOT,HTTP_HOST,SERVER_SOFTWARE(也许是其他人)
您所包含的文件是否与在CLI / cron环境中运行兼容?
它甚至可能使用其他php.ini。
我希望这会有所帮助。