使用ignore_abort_user()的PHP后台脚本不起作用

时间:2015-07-05 07:16:55

标签: php mysql

我有一个PHP脚本,它接受输入并将其插入到mysql数据库中。一旦表中的条目完成,该脚本就会使用shell_exec()调用另一个脚本。这是第一个php脚本:

if(isset($_POST['post_arg'])){
    $theme = $_POST['topic_theme'];
    $des = $_POST['detail'];
    $hrs_to_go = 36;
    $t = time();

    $conn = mysql_connect('localhost', 'root', '') or die(mysql_error());
    mysql_select_db('topics');
    $sql_query = "INSERT INTO `topics`.`theme`(heading, description, hrs_to_go, status, time) VALUES ('$theme', '$des', '$hrs_to_go', 'yes', '$t')";
    $ret_val = mysql_query($sql_query, $conn) or die(mysql_error());
    $row = mysql_fetch_assoc(mysql_query("SELECT id FROM `theme` where heading = '$theme'"));
    $themeID = $row['id'];
    shell_exec("php timer_script.php $themeID");
}

我希望我的第二个脚本从我的表中获取时间和hrs_to_go并相应地更新字段hrs_to_go。 但不幸的是,第二个脚本无法正常工作,浏览器继续加载而没有任何重定向。这是第二个脚本:

session_start();
ignore_user_abort(true);
set_time_limit(0);

$interval = 20;
$conn = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('topics');
$sql_query_fectch = "SELECT time, hrs_to_go FROM `theme` WHERE id = '$argv[1]'";
$sql_query_update_status = "UPDATE `theme` SET status = 'no' WHERE id = '$argv[1]'";
$sql_query_update_hours = "UPDATE `theme` SET hrs_to_go = '$h_t_g' WHERE id = '$argv[1]'";
while (1) {

    $row = mysql_fetch_assoc(mysql_query($sql_query_fectch));
    $h_t_g = (time() - $row['time']) / 3600;
    $h_t_g = $row['hrs_to_go'] - $h_t_g;
    if($h_t_g == 0){

        /*set the status to not-active*/
        $result = mysql_query($sql_query_update_status, $conn);
        break;

    } else {
        /*Update the fiel hrs_to_go*/
        $result = mysql_query($sql_query_update_hours, $conn);
    }
    sleep($interval);
    unset($row);
}

mysql_close($conn);

虽然我的变量是hrs_togo但我保持较小的iterval时间以查看更改。

1 个答案:

答案 0 :(得分:0)

你的循环永远不会结束。

这是因为您的更新查询不会自动使用变量$ h_t_g的新值进行更新。它是第一次设置而且就是它。

检查一下,虽然我还没有检查你是否还有其他任何问题。

session_start();
ignore_user_abort(true);
set_time_limit(0);

$interval = 20;
$conn = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('topics');
$sql_query_fectch = "SELECT time, hrs_to_go FROM `theme` WHERE id = '$argv[1]'";
$sql_query_update_status = "UPDATE `theme` SET status = 'no' WHERE id = '$argv[1]'";

while (1) {
    $row = mysql_fetch_assoc(mysql_query($sql_query_fectch));
    $h_t_g = (time() - $row['time']) / 3600;
    $h_t_g = $row['hrs_to_go'] - $h_t_g;
    if($h_t_g == 0){

        /*set the status to not-active*/
        $result = mysql_query($sql_query_update_status, $conn);
        break;

    } else {
        /*Update the fiel hrs_to_go*/
        $result = mysql_query("UPDATE `theme` SET hrs_to_go = '$h_t_g' WHERE id = '$argv[1]'", $conn);
    }
    sleep($interval);
    unset($row);
}

mysql_close($conn);