0

我有几台笔记本电脑需要每天从我们的服务器获取信息。每台笔记本电脑都有一个 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

4 回答 4

1

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

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

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

于 2009-12-01T06:05:16.867 回答
0

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

于 2009-12-01T05:08:11.850 回答
0

您可能需要考虑使用第三方文件同步服务,例如 Windows Live Sync 或 Dropbox,以便在所有计算机上同步最新文件。然后,只要有一个守护进程,只要文件更改,它就会将文件加载到数据库中。这样,您就不必完全处理同步部分。

于 2009-12-01T07:00:14.450 回答
0

你正在使用stream_get_contents(或者你甚至可以使用file_get_contents而不需要额外的行来open流式传输)但是如果你的文本量真的像标题所说的那样大,你会填满你的记忆。

我在为内存有限的远程服务器编写脚本时遇到了这个问题,所以这不起作用。我找到的解决方案是stream_copy_to_stream改用并将文件直接复制到磁盘上,而不是复制到内存中。

这是该功能的完整代码

于 2013-09-17T18:00:28.617 回答