2012-06-28 17 views
0

我正在做一个在线数据库转储工具。PHP:如何通过curl发布3千兆字节的长字符串或将其输出到浏览器中?

但是,当我输出数据时,PHP将等待,直到它可以计算它需要转储的长度,这可能会让用户误解API是否工作。

如何发送大块响应?

我尝试添加:

header('Transfer-Encoding:chunked'); 

但Chrome浏览器无法打开页。

我需要做什么?

谢谢!


答:应该在发送数据之前编码数据。

function chunk_encoding($chunk) { 
    printf("%x\r\n%s\r\n", strlen($chunk), $chunk); 
    flush(); 
    ob_flush(); 
} 
+0

在后台工作繁忙,并显示预加载器或更动态的浏览器。这是我心中的第一件事。 – Leri

+1

有趣的经历这个用户将有一个3 GB的字符串加载到浏览器窗口中......实际显示这些数据有什么意义?使其可用于下载 –

+1

你必须输出一些东西,然后使用函数FLUSH() – Liutas

回答

3

这不是智能手机的方式,洪泛用户与3GB的数据。假设这个用户有DSL连接(假设6MBit),他必须等待69分钟,直到所有数据都可以使用(例如复制)。此外,他不允许关闭载入该数据的标签,否则数据将丢失。最后,如果他被迫显示这些数据量,任何浏览器都会变成一个耗费内存的怪物。

更好的解决方案是在服务器上生成一个文件,让用户通过向他显示链接来下载该文件。这样用户可以在后台下载文件(可以与任何下载管理器一起)并且可以在本地检索数据。

+1

也浏览器可能(很可能:*将*)在尝试显示此数据时崩溃。在内存中加载3 GB并不是很便宜(也可以考虑另外100个可能打开的标签和程序)。 –

+0

'内容处理:附件;文件名=“db.sql”' 我会在发布版本 在调试模式下添加附件头数据大小不会大于100M 但我仍然有问题 –

相关问题