Php CRON不是';行不通

Php CRON不是';行不通,php,cron,Php,Cron,我将以下php代码设置为作为CRON作业运行。它每天运行一次,从不返回错误,所以我认为它运行正常。问题是,这些行没有从我的数据库中删除 我已经测试了php和变量。我已经测试了我的查询,这也有效,所以我不知所措 <?php $isCLI = ( php_sapi_name() == 'cgi-fcgi' ); if (!$isCLI) die("cannot run! sapi_name is ".php_sapi_name()); exit; //Connect to DB m

我将以下php代码设置为作为CRON作业运行。它每天运行一次,从不返回错误,所以我认为它运行正常。问题是,这些行没有从我的数据库中删除

我已经测试了php和变量。我已经测试了我的查询,这也有效,所以我不知所措

<?php
$isCLI = ( php_sapi_name() == 'cgi-fcgi' );

if (!$isCLI)
    die("cannot run! sapi_name is ".php_sapi_name());
exit;

//Connect to DB
mysql_connect("xxxxxx.com", "xxxxxxxxxx", "xxxxxxxxxxxx") or die(mysql_error());
mysql_select_db("xxxxxxxxxxx") or die(mysql_error());

//Get today's date
$todayis = date("Y-m-d");
$todayis = strtotime(date("Y-m-d", strtotime($todayis)) . " -4 hours");
$todayis = date('Y-m-d', $todayis);

//Delete rows in userContests where reminder is less than or equal to today's date
mysql_query("DELETE FROM userContests WHERE reminder <= '$todayis';") or die(mysql_error());
?>

如果这就是整个脚本,我会说您忘记连接数据库了

编辑:这似乎就是问题所在:

if (!$isCLI)
    die("cannot run! sapi_name is ".php_sapi_name());
exit;
这意味着:

if (!$isCLI) 
{
    die("cannot run! sapi_name is ".php_sapi_name());
}

exit;

因此,基本上您总是在第6行停止脚本,之后将不会执行任何操作。

如果是CRON作业,则应使用
PHP-CLI
而不是
PHP-CGI
。您可以将其添加到文件的顶部以进行正确的检查

<?php if(PHP_SAPI != 'cli') throw new Exception('Not in CLI mode!');

...

crontab-l
对这份工作有何评论?为什么不使用MySQL?@ccKep我不知道你在引用什么。我的主机不允许我访问cron的任何类型的管理。我只能告诉它使用什么文件,没有别的。@eggyal我不知道什么是事件调度器,也不知道如何使用它。@Jonathan:真的吗?哇<代码>按计划创建事件foo每1天开始CURDATE()从用户竞赛中删除我没有提醒的内容。显然,我不会在这里粘贴此类信息。@Jonathan发布整个脚本以帮助我们解决问题,用户名和密码类似于
xxx
。无论如何,看看我的编辑。我已经发布了整个脚本。也就是说,当它死亡时,它输出短语“无法运行”。事实上,这样的输出不会被传递,因为它不会消亡,这意味着脚本正在执行。让我知道你发现了什么@Jonathan
die
exit
是相同的,所以只需删除
exit
语句,因为现在有两条
die
语句,一条在
if
条件中,一条在它之后。@Jonathan,任何CLI任务(包括CRON)都应该使用PHP-CLI。通过使用
$php scriptname.php
直接从命令行调用脚本进行测试我没有命令行界面。我只能选择一个与cron一起使用的文件。我没有选项,没有命令行,没有设置。@Jonathan,啊,那么你一定是在使用某种管理面板,充当虚拟CRON。解释您遇到的所有问题。