我有一个脚本,可以将产品从CSV文件导入网上商店。有~20.000个项目要导入,因此整个过程可能需要30-60分钟或更长时间。脚本可以由用户使用网络浏览器手动启动,也可以由CRON作业启动。在这两种情况下,我都想使用相同的脚本版本。新项目(或更新的当前项目)的导入将每周完成。
我的问题是服务器在工作~5分钟后杀死脚本。
我设置:
ini_set('max_execution_time' ,0);
ini_set('set_memory_limit', -1)
我意识到我只需要在一次运行中导入一堆项目,例如 500 个项目。在每次运行结束时,我将保存导入到数据库的状态 - 例如。项目 0-500 已导入,因此下次脚本应导入 500-1000。
我不知道我应该怎么做。导入一堆项目后我必须做什么?也许我应该在 GET 中使用状态参数进行重定向,例如:
header('Location: http://www.example.com/importer/import.php?package=4');
exit;
这是实现这一目标的好方法吗?这样的东西会适用于 cron 吗?
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";
}
}