0

我需要将大型 Excel 表解析到我的数据库中。我正在使用 PHPExcel。这些文件太大而无法一次导入,我必须处理最大执行时间和内存限制。

所以现在系统是这样工作的:操作员在浏览器中上传文件,然后导入脚本运行多次,直到整个文件被解析。PHP 脚本仅导入部分 excel 文件,并返回一个值。如果仍有一些未解析的行 - AJAX 再次运行脚本。

现在我想把这个任务移动到cron,但是我不知道怎么做,因为我不知道脚本需要执行多少次才能完成工作。

有没有办法一次又一次地执行脚本直到它完成,但没有在浏览器中处理它(通过 AJAX、重新加载等)

4

3 回答 3

0

exec() 不会做你想要的。您可以通过一项设置克服内存和生命周期限制

memory_limit = -1
max_execution_time = 0

但无论如何,CLI PHP 的执行时间是无限的——如前所述。

我会将您上传的所有文件放入某个工作目录中,并且每分钟都会出现一个 cron 脚本并处理未处理的文件(一次,或 Ntime,但不应该需要那个......)。Cron PHP 脚本可以在文件完成时(如果您有多个进程,当它开始处理文件时)接触文件,因此它知道哪些文件已完成(或被另一个进程使用)。AJAX 端点可以测试该标志文件或类似文件的存在以通知客户端。

于 2013-02-11T11:18:27.667 回答
0

使脚本在后台运行。使用执行功能。参考下面的手册

http://php.net/manual/en/function.exec.php

于 2013-02-11T10:37:11.523 回答
0

为什么不让工作每 x 分钟连续运行一次,用这种东西:

Check if there are any files neededing parsed
If NO
    exit
else 
    Parse X number of rows from where we left off, 
    keeping track of where we are upto.

该脚本将愉快地在后台运行,检查是否有任何事情要做,如果没有,它就会退出。

于 2013-02-11T11:57:38.647 回答