php网站的独立文件服务器
我有两个服务器的网站。一个服务器将有php代码和数据库,另一个速度较慢的服务器只存储文件。我需要实现的方式,通过网站上传的文件必须存储在另一个服务器,然后也可以从那里下载 有人能给我建议实现这一目标的最佳方法吗。我知道文件可以通过网站上传后通过php的FTP功能传输到另一台服务器,但这似乎不是一种正确的方式 或两台服务器只能用于静态媒体内容,如图像php网站的独立文件服务器,php,apache,fileserver,Php,Apache,Fileserver,我有两个服务器的网站。一个服务器将有php代码和数据库,另一个速度较慢的服务器只存储文件。我需要实现的方式,通过网站上传的文件必须存储在另一个服务器,然后也可以从那里下载 有人能给我建议实现这一目标的最佳方法吗。我知道文件可以通过网站上传后通过php的FTP功能传输到另一台服务器,但这似乎不是一种正确的方式 或两台服务器只能用于静态媒体内容,如图像 谢谢您可以将上载目录装载到web服务器。 检查不知道这是否是最好的方法,但为什么不简单地让文件服务器有一个单独的子域呢?这样,它可以处理所有文件下载
谢谢您可以将上载目录装载到web服务器。
检查不知道这是否是最好的方法,但为什么不简单地让文件服务器有一个单独的子域呢?这样,它可以处理所有文件下载细节,您可以通过FTP或SFTP从主服务器连接到它 基本上,您可以使用以下流程:
最好的办法是将所有文件(包括网站文件)都放在“存储服务器”上。基本上你所做的是挂载“共享文件夹”,这意味着网站文件和其他文件,你将需要。(大多数情况下,存储服务器上只有一个/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 ...
}
}