2013-02-12 116 views
0

我一直在寻找PHP批处理教程,但目前为止还没有。PHP批处理与进度条

我已经从MS Excel导入数据。对于每个excel数据,将由PHP处理来创建mysql行。

由于1 excel数据的复杂性,我想构建一个批处理系统,其中PHP一次处理1行,显示一些进度条。然后防止超时(设置为60秒)。

这个任何指导方针/示例/等? 谢谢

+0

您是否确实在讨论MS Excel文件(BIFF .xls或OfficeOPenXML .xlsx)文件或CSV文件? – 2013-02-12 20:28:07

+0

抱歉,长时间回复,文件为.excel。但也许csv也很好 – 2013-03-01 03:11:51

回答

0

为防止超时您必须将set_time_limit(0);如果你想要浏览器没有超时你一定要回显一些数据并刷新浏览器

+0

抱歉,长时间回复,任何技术细节? – 2013-03-01 03:14:30

+0

你可以通过cron作业调用脚本来完成这项工作。你可以完全处理excel数据。如果你有多个excel文件,你必须在数据库上列出它们,并按照请求处理其中的一个,并签名为已完成,以便下一个请求处理另一个excel文件。请参阅http://www.ibm.com/developerworks/cn/。 opensource/library/os-php-batch/ – 2013-03-01 06:26:04

0

通常为CSV我会使用fgetcsv - http://php.net/manual/es/function.fgetcsv.php - 这将让你一次做一行。

对于进度条,您可以更新每个处理行的JSON文件和AJAX来自浏览器的读取该文件的请求,并使用javascript在前端显示客户端的进度条。

0

如果你想浏览器没有超时,我不完全确定你想要什么,但我会给它一个镜头。从我的理解你想要一个批处理文件来激发进度条,而你的PHP程序thingy正在运行。那么,首先你需要知道你需要做多少个单元格来完成你想要做的任何事情。只要这是可能的(并且它可以将该数字导出到文本文件),那么它应该是可能的。

当运行包含需要处理的单元格数量时,以下方法将需要.txt文件(如果不能,则应该跳过此整个答案)。然后,它将扫描包含已处理单元数量的不同文本文件(最好这是文件中的唯一内容,否则可能会变得毛茸茸的)。

在思考生活方式之前了解我和我的谈话,这个答案可能永远不会被提交,因为我是一个白痴,并估计我能做些什么。

所以,事不宜迟...

@echo off & setlocal enabledelayedexpansion 
for /f %%i in (file1) do set num1=%%i 
set /a num1*=100 
:update 
if not exist file2 goto update 
for /f %%i in (file2) do (
    if %%i equ %prog% goto update 
    set prog=%%i 
) 
set /a prog*=100 
set /a stat=%prog%/%num1% 
cls 
echo %stat% % done. 
goto update 

嗯,制定出比我预期的要好。这个答案可能刚刚发布。我应该注意的一件事是,您需要用相应文件的文件路径替换file1file2(其中有两处)。 file1应该包含你需要做的事情的细胞数量。 file2应该有一个更新的数量的你已经处理的单元格。

不幸的是我没有测试这个,我确信会有一个错误或者可以做出某种改进。它被作为一个模板,激发了一些其他的想法,而不是一个硬拷贝。

+0

我不认为这值得编辑,所以我想我应该提到,当我说单元格或框时,我的意思是行。 – 2013-02-12 07:41:30