Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将文件传输到其他服务器的最佳方式是什么?_Php_Scaling - Fatal编程技术网

Php 将文件传输到其他服务器的最佳方式是什么?

Php 将文件传输到其他服务器的最佳方式是什么?,php,scaling,Php,Scaling,我运行的文件主机已经超出了单个服务器的容量,我需要实现文件的多服务器存储。我希望这样做尽可能便宜,所以那些奇特的大容量存储方法是不可能的。我只想将用户上传到“网关”服务器(承载所有http和mysql)的文件移动到其中一个媒体服务器。它可以在用户请求结束时完成,也可以每隔几分钟通过cron完成 在这一点上,我真正熟悉的唯一方法是使用ftp_put php函数,并简单地将文件ftp到另一台服务器,但我过去使用这种方法时遇到过问题,尤其是对于较大的文件,而且许多将要传输的文件将超过100mb 有人能

我运行的文件主机已经超出了单个服务器的容量,我需要实现文件的多服务器存储。我希望这样做尽可能便宜,所以那些奇特的大容量存储方法是不可能的。我只想将用户上传到“网关”服务器(承载所有http和mysql)的文件移动到其中一个媒体服务器。它可以在用户请求结束时完成,也可以每隔几分钟通过cron完成

在这一点上,我真正熟悉的唯一方法是使用ftp_put php函数,并简单地将文件ftp到另一台服务器,但我过去使用这种方法时遇到过问题,尤其是对于较大的文件,而且许多将要传输的文件将超过100mb


有人能提出一个好的解决方案吗?最好我在寻找一个纯粹的软件解决方案。。。希望只不过是一个php/bash脚本

您可以编写在cron中运行的bash脚本

并使用命令行,如scp、sftp或rsync

例如:

[bash]# scp filename alice@galaxy.example.com:/home/alice

将“filename”复制到远程galaxy.example.com服务器上alice的主目录中

一种不需要编程设置且非常安全的方法是从另一台服务器装入一个文件夹,然后像平常一样使用php保存到该目录

您不必使用sshfs,有许多其他方法可以提供相同的解决方案。在这种情况下,我将使用sshfs,因为它可以跨ssh工作,因此是安全的,并且相对容易设置

要实现这一点(使用sshfs):

  • 安装
  • 将ssfs文件装载到php可访问的文件夹中
  • 使用php脚本将文件存储在sshfs装载中,从而存储在另一台服务器上

  • 另一种方法是使用crontab在两者之间设置命令。

    使用cron、bash脚本和rsync

    cron:“cron是类Unix计算机操作系统中基于时间的作业调度器。“cron”是“计时器”的缩写。”

    bash:“bash是为GNU项目编写的自由软件Unix shell。”

    rsync:“rsync是一种用于Unix系统的软件应用程序,它将文件和目录从一个位置同步到另一个位置,同时在适当时使用增量编码最小化数据传输。”

    总之,将rsync命令放在bash脚本中,并让cron定期运行它


    有关一些示例,请参阅:

    文件保存到挂载目录后是否会立即发送到其他服务器?如果同时“同步”多个文件,那么性能方面又如何呢?我使用这种方法从远程服务器(通过隧道式internet连接)装载文件系统,只经历了轻微的延迟。我使用此方法访问和操作本地开发服务器上的大量文件,并且没有经历太多明显的延迟。使用sshfs,文件几乎立即同步,因此感觉像是本地文件系统,性能应该相当好,但如果您有一台大型服务器,则可能需要研究SAN。