【发布时间】:2021-05-03 10:43:08
【问题描述】:
这些天我主要在客户端编写代码,所以我的 PHP 生锈了,在这种特殊情况下我更喜欢纯 PHP 设计。
我不需要任何客户端代码。我想读取大量文本文件,提取一些数据并将其插入 MySql 数据库。
- 这可能需要相当长的时间,所以
- 我想
echo()一些进展的迹象。另外, - 我担心它可能需要比默认的 30 秒更长的时间,但我不喜欢打破这个限制,以防我的脚本挂起。
为了执行#2,我通常会使用header('Refresh:1');,但是如果刷新发生在 MySql INSERT 操作的中间怎么办?
我想在INSERT 之前和页面重新加载时,我可以只用COUNT MySql 表条目来确定从哪里开始处理下一个文本文件。
在完成INSERT 之后,我可以在循环的几次迭代中重新加载页面,但是如何,因为我无法使用header('Location:X');,因为我已经echo()ed 进度。也许我可以以某种方式伪造表单提交?但是,这感觉很老套。
这似乎是一种通用的设计模式,我相信很久以前就有比我更聪明的人想出一个优雅的解决方案。有人能告诉我那个解决方案是什么吗?最好是纯PHP。我已经搜索过,但找不到任何东西。
目前,我正在使用 JS 解决方案:echo '<script language="javascript">window.location.href ="sciprt.php"</script>';,但更喜欢纯 PHP
【问题讨论】:
-
这是一次性的,还是需要反复做? A PHP CLI (command line) script has no execution time limit,这是一个选项吗? PHP 处于阻塞状态,因此重新加载/重定向不会中断其他发生的事情(除非它是超时)。移动/删除您已经处理过的文件是一个选项吗?
-
这是用户相当有规律地(每天、每周、每月)做的事情。我还想向非技术用户显示进度,这意味着浏览器中的某些内容。我不可能是唯一的。只是想知道什么是“最佳实践”(叹气!还记得我们什么时候有一个“最佳实践”标签吗?)
标签: php