1

我有一个脚本,可将产品从 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 一起使用吗?

4

1 回答 1

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";
    }
}
于 2013-10-06T09:23:16.237 回答