php网站的独立文件服务器

php网站的独立文件服务器,php,apache,fileserver,Php,Apache,Fileserver,我有两个服务器的网站。一个服务器将有php代码和数据库,另一个速度较慢的服务器只存储文件。我需要实现的方式,通过网站上传的文件必须存储在另一个服务器,然后也可以从那里下载 有人能给我建议实现这一目标的最佳方法吗。我知道文件可以通过网站上传后通过php的FTP功能传输到另一台服务器,但这似乎不是一种正确的方式 或两台服务器只能用于静态媒体内容,如图像 谢谢您可以将上载目录装载到web服务器。 检查不知道这是否是最好的方法,但为什么不简单地让文件服务器有一个单独的子域呢?这样,它可以处理所有文件下载

我有两个服务器的网站。一个服务器将有php代码和数据库,另一个速度较慢的服务器只存储文件。我需要实现的方式,通过网站上传的文件必须存储在另一个服务器,然后也可以从那里下载

有人能给我建议实现这一目标的最佳方法吗。我知道文件可以通过网站上传后通过php的FTP功能传输到另一台服务器,但这似乎不是一种正确的方式

或两台服务器只能用于静态媒体内容,如图像


谢谢

您可以将上载目录装载到web服务器。
检查

不知道这是否是最好的方法,但为什么不简单地让文件服务器有一个单独的子域呢?这样,它可以处理所有文件下载细节,您可以通过FTP或SFTP从主服务器连接到它

基本上,您可以使用以下流程:

  • 将您的子域指向辅助服务器。我找到了一些关于这个的信息
  • 在主服务器上有一个上载表单,用于处理和验证文件
  • 当文件被认为可以接受时,通过FTP或SFTP将其发送到其他服务器。如果您不能让PHP工具为此工作,可能会有所帮助。您可能希望将此步骤设置为多线程

  • 最好的办法是将所有文件(包括网站文件)都放在“存储服务器”上。基本上你所做的是挂载“共享文件夹”,这意味着网站文件和其他文件,你将需要。(大多数情况下,存储服务器上只有一个/var/www local/文件夹,您可以将其装入Web服务器上的/var/www/中)

    通过将其添加到Web服务器上的/etc/fstab文件中,确保使用NFS装载它。 ()


    这种想法的优点是,当您想要扩展时,可以通过放置一个软件负载平衡器(如HAProxy)轻松实现,添加任意多的Web服务器,这样您就可以同步数据。

    如果您的应用程序需要对文件服务器进行密集读/写,那么我认为将其分离是个坏主意。也许您可以将NFS镜像到主web服务器以减少延迟


    使用nginx处理对静态文件的所有请求(例如:css、图像、javascript)

    我使用了一种称为nginx的东西,它允许这样做。我使用它的情况更多的是为了负载平衡,而不是备用内容分发

    此外,像Stack Overflow这样的站点使用服务获取其站点上的某些信息。像这样的解决方案实际上可能比购买/设置/维护一台全新的服务器更具成本效益。

    通过使用,如果ftp服务器接受此连接类型,则可以使用默认设置。或者,您可以使用PHP将文件上传到服务器

    对于内容交付,您需要有一个数据库或其他方法来获取内容分发服务器上的原始url,并将url放入html参数中:

    <img src="http://cdn1.example.com/images/68263483.png" />
    <a href="http://cdn2.example.com/files/9872345.pdf">Download PDF</a>
    
    
    
    处理上传文件的示例代码如下

    <?php
    // ...
    $uploads_dir = 'images';
    foreach ($_FILES["pictures"]["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
            $name = $_FILES["pictures"]["name"][$key];
            move_uploaded_file($tmp_name, 
                "ftp://user:pass@cdn1.example.com/$uploads_dir/$name");
    
            // save url in your database for later retrieval ...
        }
    }
    
    
    
  • 在文件服务器上创建要下载和上载文件的目录的共享。如果您计划将tyem保存在单独的文件夹中,请共享两个

  • 使用PHP代码库映射web服务器上的文件夹。确保使用登录名连接到具有读写访问权限的共享

  • 映射共享后,在网站上创建一个虚拟目录到共享文件夹(这一切取决于您的web服务器)

  • 检查PHP如何处理访问网站中共享驱动器上的文件,这取决于您的Web服务器。它可能与您通常处理文件的方式不同


  • 我喜欢这种方法,因为服务器操作系统处理文件与文件服务器之间的传输。PHP只是告诉它需要哪些文件

    辅助服务器上存储了什么类型的文件?需要更多信息。服务器运行的是什么类型的操作系统,你有管理员权限吗?谢谢你的评论,文件将由应用程序用户上传。它可以是pdf、文档和图像。服务器必须是基于Linux的。我必须有管理员权限,因为没有管理员权限,任何人都不可能回答我的问题。其迫切性是,由于通过应用程序上载的所有文件都将通过FTP传输到其他服务器,因此主服务器上的文件将过载。最终用户也将面临额外的延迟,因为文件将首先由他上传到主服务器(他将进行数据库输入),然后通过FTP传输到文件服务器。这意味着将有两个服务器。第二台服务器将安装到主服务器中,这样应用程序就不需要考虑其他服务器。它将被视为一个系统,而不是第二个服务器的其他URL。这只回答了部分问题,因为您将无法像专用内容分发网络那样使用外部空间。
    <?php
    // ...
    $ftpCon = ftp_connect('cdn1.example.com') 
        or die('Could not connect to ftp server');
    $uploads_dir = 'images';
    foreach ($_FILES["pictures"]["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
            $name = $_FILES["pictures"]["name"][$key];
            ftp_put($ftpCon, "$uploads_dir/$name", $tmp_name)
                or die("could not upload $name to ftp server");
            // save url in your database for later retrieval ...
        }
    }