【问题标题】:While loop not working in php Script run in Crontab虽然循环在 php 中不起作用 脚本在 Crontab 中运行
【发布时间】:2020-05-07 18:34:28
【问题描述】:

我有一个 php 脚本作为 crontab 作业运行。

当我在浏览器中运行文件时,循环执行完美,但在 crontab 中运行时仅执行第一次迭代,没有输出错误。

任何想法为什么?我完全被难住了!!!。

crontab 条目:/usr/bin/php /home/XXX/public_html/directory/cron/cron.php 2>&1 >> /home/XXX/public_html/directory/cron/script_output.log | mail -s "Cronjob PSTART Daily" me@XXX.com

PHP:

<?php
$members = new WA_MySQLi_RS("members", $alpha, 0);
$members->setQuery("SELECT

        registration.*,

        child_base_smqf.child_base_smqf_id,
        child_base_smqf.child_base_smqf_uid,
        child_base_smqf.child_base_smqf_open_timestamp,
        child_base_smqf.child_base_smqf_close_timestamp,

        parent_base_smqf.parent_base_smqf_id,
        parent_base_smqf.parent_base_smqf_uid,
        parent_base_smqf.parent_base_smqf_open_timestamp,
        parent_base_smqf.parent_base_smqf_close_timestamp

        FROM registration
        LEFT JOIN child_base_smqf ON registration.rego_parent_uid = child_base_smqf.child_base_smqf_uid
        LEFT JOIN parent_base_smqf ON registration.rego_parent_uid = parent_base_smqf.parent_base_smqf_uid

        WHERE
        registration.rego_parent_acc_status != 0 AND # NOT OPTED OUT
        child_base_smqf.child_base_smqf_close_timestamp IS NOT NULL AND # CHILD BASELINE SURVEY HAS BEEN COMPLETED
        parent_base_smqf.parent_base_smqf_close_timestamp IS NULL # PARENT BASELINE SURVEY HAS NOT BEEN COMPLETED

        GROUP BY `rego_parent_uid`
        ORDER BY `rego_id` ASC");

$members->execute();

while (!$members->atEnd()) {

// !DEFINE VARIABLES
    require('cronVariables.php');

    echo $members->getColumnVal("rego_parent_uid") . ' - ' .$members->getColumnVal("rego_parent_fname") . " STAMP - " . $members->getColumnVal("child_base_smqf_close_timestamp") . " baseline email reminders - " . $parent_base_surveyReminderTrigger . "<br>";

    require('parentBaseReminderEmails.php');

    $members->moveNext();
?>

【问题讨论】:

  • 如果你在循环中触发它,首先使用 requiere_once() 而不是 require ! 2.)确保您的包含/包含路径是正确的 3)查看您的日志以获取更多信息

标签: php mysql crontab


【解决方案1】:

从来没有解决这个问题,而是通过 curl 运行 url 而不是直接从 php 运行 php 脚本来修复它:

/usr/bin/curl -u unname:password --silent --compressed http://www.domain.net/dir/cron/cron.php

【讨论】:

    【解决方案2】:

    在循环中使用“require”而不是“require_once”会导致致命错误,在再次满足要求时终止下一次迭代。

    “致命错误:无法重新声明 xyz”;

    但这是在不知道那些“需要”位包含的情况下的猜测。

    为了让您免于沮丧,第 1 步是确保您获得所有日志记录输出。

    快速插入第 1 行,完成调试后删除,或者更确切地说,完成后将 display_errors 设置为 0。

    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-21
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多