使用PHP同步大量文本

时间:2009-12-01 05:02:00

标签: php asynchronous transfer

我在现场有几台笔记本电脑需要每天从我们的服务器获取信息。每台笔记本电脑都安装了server2go(基本上是Apache,PHP,MySQL作为可执行文件运行),可以启动本地网页。该网页使用以下代码调用我们服务器上的URL:

$handle = fopen( $downloadURL , "rb");
$contents = stream_get_contents( $handle );
fclose( $handle );

$ downloadURL从我们服务器上的MySQL数据库中获取大量信息,并将结果作为输出返回给设备。我目前正在将结果作为自己的SQL语句返回(即 - 如果我查询数据库“SELECT name FROM names”,我可能会返回设备文本字符串“INSERT INTO names SET names ='JOHN SMITH'”)。这将从在线数据库获取信息并将其以SQL语句的形式返回给设备,以便插入笔记本电脑的数据库。

我遇到的问题是数据量太大。从服务器检索信息时,笔记本电脑网页会保持超时。我已经将PHP超时限制设置得非常高,但仍然遇到问题。谁能想到更好的方法来做到这一点?如果我将数据以较小的块刷新到设备,stream_get_contents是否会保持与服务器的连接?

感谢您的任何意见。

4 个答案:

答案 0 :(得分:1)

如果您只是发送数据并在接收方生成sql怎么办?这将为您节省大量的字节进行传输。

数据更新是否增量?即你可以发送自上次更新以来的更改吗?

如果您必须发送大量数据,您可能需要查看压缩或压缩的方法,然后在另一侧解压缩。 (还没看过如何做到这一点,但我认为这在php中是可以实现的)

答案 1 :(得分:0)

编写一个脚本,编译服务器上数据库中的文本文件,然后下载该文件。

答案 2 :(得分:0)

您可能需要考虑使用第三方文件同步服务(如Windows Live Sync或Dropbox)来获取在所有计算机上同步的最新文件。然后,只要有一个守护程序,只要文件发生变化,该守护程序就会将文件加载到数据库中。这样,您就可以避免完全处理同步件。

答案 3 :(得分:0)

您正在使用stream_get_contents(或者您甚至可以使用file_get_contents而不需要open流的额外行,但如果您的文字数量非常大,就像标题所示,你会填满你的记忆。

我在为内存有限的远程服务器编写脚本时遇到了这个问题,因此无法正常工作。我找到的解决方案是使用stream_copy_to_stream代替并直接将文件复制到磁盘而不是内存中。

以下是该功能的complete code