我有一个用php编写的大脚本,它应该在prestashop安装中导入很多信息,使用webservices,这个脚本写在“部分”中我的意思是,有一个函数可以导入类别,另一个是导入产品,然后是制造商等,主脚本中有大约7-10个函数调用。基本上我假设这个脚本必须运行大约一个小时,从一个函数传递到下一个函数,依此类推,因为它到达最后一个函数,然后返回一些值并停止到第二个晚上。
我想了解它是否会更好:
1)每次进入新功能时都会施加30分钟的时间限制(这样可以防止超时)
2)制作一个页面链,每个页面都有一个函数调用(当然还有时间限制)
或任何其他想法...我想: 知道是否已调用函数(可能使用全局变量?) 确保服务器按顺序执行该功能(所以页链)...
我希望明白,否则我会更新问题。
编辑: 该脚本由另一台将调用页面的服务器执行,另一台服务器从我这里“未知”,所以我只知道该页面被调用(他们也可以通过页面调用该函数),但无论如何我有没有控制权。
答案 0 :(得分:1)
对于任何长时间运行的脚本,我会通过命令行运行它,可能还有一个cronjob来启动它。如果它是从外部触发的,我会创建一个作业队列(例如在数据库中),在该队列中插入一个新行以表示它应该运行,以及任何变量输入参数。然后后台作业将运行 - 比方说 - 每5分钟运行一次,检查队列中是否有新作业。如果没有,请退出。如果有,请标记它已开始工作并开始处理。完成后,标记它已完成。
然而,1小时的工作是一个不错的时间。你没有办法优化它?答案 1 :(得分:0)
您可以使用以下命令增加脚本执行的时间限制:
set_time_limit(seconds);
对于长时间运行的脚本,您需要更多内存。您可以使用以下方法增加内存限制:
ini_set('memory_limit','20M');
另外还要确保您在专用服务器上运行脚本,因为如果您使用共享服务器,服务器将自动终止长时间运行的脚本。