通过脚本运行持久的任务。如何避免错误没有500?

时间:2013-10-06 05:44:26

标签: php cron

我有一个脚本,可以将产品从CSV文件导入到网上商店。导入约有20,000个项目,因此整个过程可能需要30-60分钟。或更多时间。脚本可以由用户使用webbrowser或CRON作业手动启动。在这两种情况下,我都想使用相同版本的脚本。每周都会导入新项目(或更新的当前项目)。

我的问题是服务器在约5分钟后杀死脚本。工作

我设置:

ini_set('max_execution_time' ,0);       
ini_set('set_memory_limit', -1)

我意识到我必须在一次运行中只导入一堆物品,例如500件物品。在每次运行结束时,我将保存导入到数据库的状态 - 例如。项目0-500已导入,因此下次脚本应导入500-1000。

我不知道该怎么做。导入一堆物品后我要做什么?也许我应该在GET中使用status参数重定向,如:

header('Location: http://www.example.com/importer/import.php?package=4');
exit;

这是实现这一目标的好方法吗?类似的东西会与cron一起使用吗?

1 个答案:

答案 0 :(得分:1)

session_start();

// This function should take care of importing
// If $limit is null it should import whole csv file
function importProcess($offset, $limit = null) {
    // some magic here
}

echo "Importing process in progress...";

// Script is called from command line
if (php_sapi_name() === 'cli') {
    importProcess(0, null);
} else {
    $num = 500;
    $offset = isset($_SESSION['offset']) ? (int) $_SESSION['offset'] : 0;

    if (importProcess($offset, $num)) {
        $_SESSION['offset'] = $offset+$num;
        header('Location: http://www.example.com/importer/import.php');
    } else {
        echo "Done";
    }
}