使用通过shell调用的PHP(POST)通过http进行大型文件传输的最佳方法

时间:2010-08-16 13:13:30

标签: php ajax http post

我想通过PHP设置一个自动备份,使用http / s我可以将一个zip文件请求“POST”到另一个服务器并通过一个大的.zip文件发送,基本上,我想要备份整个站点(和它的数据库)并有一个cron peridocally通过http / s传输文件。一些喜欢

的人
wget http://www.thissite.com/cron_backup.php?dest=www.othersite.com&file=backup.zip

可以在词语之后添加适当的身份验证安全性....

我更喜欢http / s,因为这个其他网站对ftp的使用有限,并且在Windows机顶盒上。因此,我认为与它通信的可靠方式是通过http / s ..另一端将有一个对应的PHP脚本,将存储该文件。

这个过程需要完全是程序化的(即Flash上​​传器不起作用,因为这需要浏览器才能工作,这个脚本将从shell会话运行)//

是否有任何通用的PHP库或函数可以帮助解决这类问题?我知道PHP脚本超时问题,但我通常可以改变php.ini来最小化这个问题。

2 个答案:

答案 0 :(得分:0)

我个人不会使用wget,而是直接从shell运行。

您的php脚本将从cron中调用,如下所示: 如果你想要/ usr / local / bin / php /your/script/location.php args

这样你就不必担心另一个程序来处理事情(wget)如果你的设置在每次运行时是相同的,那么只需将它们放在配置文件中或直接放入PHP脚本中。

超时可以由此处理,使PHP脚本运行无限的时间。

set_time_limit(0);

不确定您正在使用哪些库,但查看CRUL以进行POST,应该可以正常工作。

我认为最大的问题是更多的服务器相关性和更少的PHP /脚本相关,即确保你获得带宽,并且你的PHP脚本可以连接到外部服务器。

答案 1 :(得分:0)

如果可能的话,我会远离通过HTTP进行大量传输。 FTP远非理想 - 但原因各不相同。

是的,可以通过ftp,http和https使用curl来实现这一点 - 但这并不能解决任何问题。 HTTP在相对较短的时间内发送相对较小的文件进行了优化 - 当你偏离它时,你最终会破坏应用于web服务器的大量优化(例如,如果你有一个maxrequestsperchild的设置,你可以人为地延长应该停止的进程的生命周期,并且LimitRequest *设置和max_file_size之间存在交互,更不用说Apache中的各种超时和其他 limit 设置。

更明智的解决方案是在ssh上使用rsync进行内容/代码备份,并使用适用于您正在使用的DBMS的数据库复制方法 - 例如mysql复制。