Php 通过脚本运行持久任务。如何避免500号错误?
我有一个脚本,将产品从CSV文件导入到网上商店。大约有20000件物品需要进口,因此整个过程可能需要30-60分钟或更长时间。脚本可以由用户使用webbrowser或CRON作业手动启动。在这两种情况下,我都希望使用相同版本的脚本。每周导入新项目(或更新的当前项目) 我的问题是服务器在大约5分钟的工作后终止了脚本 我设定:Php 通过脚本运行持久任务。如何避免500号错误?,php,cron,Php,Cron,我有一个脚本,将产品从CSV文件导入到网上商店。大约有20000件物品需要进口,因此整个过程可能需要30-60分钟或更长时间。脚本可以由用户使用webbrowser或CRON作业手动启动。在这两种情况下,我都希望使用相同版本的脚本。每周导入新项目(或更新的当前项目) 我的问题是服务器在大约5分钟的工作后终止了脚本 我设定: ini_set('max_execution_time' ,0); ini_set('set_memory_limit', -1) 我意识到我必须在一次运行中
ini_set('max_execution_time' ,0);
ini_set('set_memory_limit', -1)
我意识到我必须在一次运行中只导入一组项目,例如500个项目。在每次运行结束时,我将保存导入数据库的状态-例如,项目0-500已导入,所以下次脚本应导入500-1000
我不知道该怎么做。导入一堆项目后我要做什么?也许我应该在GET-like中使用status参数进行重定向:
header('Location: http://www.example.com/importer/import.php?package=4');
exit;
这是实现这一目标的好方法吗?类似的东西对cron有用吗?session_start();
//此函数应负责导入
//如果$limit为null,则应导入整个csv文件
函数importProcess($offset,$limit=null){
//这里有些魔力
}
回显“正在导入过程…”;
//从命令行调用脚本
如果(php_sapi_name()=='cli'){
importProcess(0,空);
}否则{
$num=500;
$offset=isset($_会话['offset'])?(int)$_会话['offset']:0;
if(导入过程($offset,$num)){
$\会话['offset']=$offset+$num;
标题('位置:http://www.example.com/importer/import.php');
}否则{
回应“完成”;
}
}
会话启动();
//此函数应负责导入
//如果$limit为null,则应导入整个csv文件
函数importProcess($offset,$limit=null){
//这里有些魔力
}
回显“正在导入过程…”;
//从命令行调用脚本
如果(php_sapi_name()=='cli'){
importProcess(0,空);
}否则{
$num=500;
$offset=isset($_会话['offset'])?(int)$_会话['offset']:0;
if(导入过程($offset,$num)){
$\会话['offset']=$offset+$num;
标题('位置:http://www.example.com/importer/import.php');
}否则{
回应“完成”;
}
}
您的意思是,当CRON调用脚本时,长时间运行没有问题吗?是的,如果从CLI调用脚本,长时间运行应该不会有问题。这很愚蠢。我实现了这一点,得到了504超时错误。你的意思是当CRON调用脚本时,长时间运行没有问题吗?是的,如果从CLI调用脚本,长时间运行应该不会有问题。这很愚蠢。我实现了这个,得到了504超时错误。