【问题标题】:best method for large File transfer via http(s) using PHP (POST) invoked via shell使用通过 shell 调用的 PHP (POST) 通过 http(s) 传输大型文件的最佳方法
【发布时间】:2010-08-16 13:13:30
【问题描述】:

我想通过 PHP 设置自动备份,使用 http/s 我可以将 zip 文件请求“发布”到另一台服务器并发送一个大的 .zip 文件,基本上,我想备份整个站点(以及它的数据库)并有一个 cron 通过 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 以将其最小化。

【问题讨论】:

    标签: php ajax http post


    【解决方案1】:

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

    你的 php 脚本会像这样从 cron 调用: /usr/local/bin/php /your/script/location.php 参数在这里如果你想

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

    可以通过这个处理超时,使PHP脚本运行无限时间。

    set_time_limit(0);
    

    不确定您使用的是什么库,但请查看 CRUL 进行 POST,应该可以正常工作。

    我认为最大的问题会更多地与服务器相关,而与 PHP/脚本相关的更少,即确保您有足够的带宽,并且您的 PHP 脚本可以连接到外部服务器。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我很怀疑,虽然我同意,但是当您可以控制环境的两端时,避免使用 http 传输大文件的问题。由于 Windows 机器接收文件,因此不适用通过 ssh 使用 rsync。配置方面,我对内部 Windows 公司服务器的控制有限,但仍然需要在那里获取一个 30MB 的大文件。IIS 连接限制很可能会发挥作用,但我也在其他网站上看到了这一点,以及快速连接通常还不错。
      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2011-08-26
      • 2017-12-24
      相关资源
      最近更新 更多