Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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
Javascript 用户图像上传_Javascript_Php_File Upload_Ftp_Web Hosting - Fatal编程技术网

Javascript 用户图像上传

Javascript 用户图像上传,javascript,php,file-upload,ftp,web-hosting,Javascript,Php,File Upload,Ftp,Web Hosting,我目前正在开发一个web应用程序。在一些地方,我允许用户出于各种原因上传图像。现在这个网站是在线的(托管在GoDaddy上),我似乎无法找到放置上传图像的最佳位置。我确实有一个运行我的数据库的外部服务器,但它不是为FTP设置的,所以我不能轻松地使用我的PHP后端上传和检索它们。对我来说,将它们直接存储在GoDaddy上似乎也不是一个好主意 我应该创建一个FTP服务器来执行此操作吗?或者有更好的选择。如果您想在远程系统上存储图像,那么您确实需要某种方式来传输它们。具体来说,这意味着您需要设置和操作

我目前正在开发一个web应用程序。在一些地方,我允许用户出于各种原因上传图像。现在这个网站是在线的(托管在GoDaddy上),我似乎无法找到放置上传图像的最佳位置。我确实有一个运行我的数据库的外部服务器,但它不是为FTP设置的,所以我不能轻松地使用我的PHP后端上传和检索它们。对我来说,将它们直接存储在GoDaddy上似乎也不是一个好主意


我应该创建一个FTP服务器来执行此操作吗?或者有更好的选择。

如果您想在远程系统上存储图像,那么您确实需要某种方式来传输它们。具体来说,这意味着您需要设置和操作服务器,并且需要使用客户端来触发实际传输。这就限制了您对托管平台上可用的客户端实现的可能选择

FTP
就是这样一种协议,要使用它,您显然需要
FTP
服务器。然而,FTP的问题在于它是一只远古时代的恐龙。这是1970年代留下的。完全过时了。它是为一种网络拓扑而设计的,这种网络拓扑面临着与当今互联网完全不同的挑战。事实上,它确实制造了很多问题。首先,它不加密传输的数据。显然,这是一个巨大的隐私问题。现在确实有提供加密的版本。然而,该协议变体称为
FTPS
,仅对通信信道进行加密,而所有其他信道(所有用于传输实际文件的信道)均未加密。该协议的第二个大问题是,防火墙设置需要相当多的努力。它为每次传输打开一个单独的网络连接,这是低效的。预计将向互联网开放单独的端口。防火墙管理员的噩梦。甚至可能在某些情况下无法使用该协议,例如,几乎不可能将
FTP
端口转发
方案结合使用。这就是为什么
FTP
在我看来并不是一个很好的选择。尽管现在它仍然被广泛使用

一个直接的替代方案是“现代替换”,即
SFTP
协议。虽然它被称为类似的协议,并且实际上服务于完全相同的目的,但从技术角度来看,它是一个完全独立的协议。它基于安全外壳协议(
SSH
)运行,服务器也广泛使用并经过验证。它提供了强大的加密功能,为手头任务所需的所有活动提供了手段,并且更易于通过网络设置进行配置。所有流量,因此控制和有效负载流量通过单个网络连接发送。大多数实现都是作为开源项目开发的,在安全性和对出现的潜在问题的快速反应方面都有好处。另一个优点:它允许基于非对称密钥对而不是密码的身份验证,这进一步提高了安全性。这个协议是我个人的选择。还因为您无论如何都需要操作ssh服务器来管理您的系统。这使足迹保持较小;-)

还有其他选择,例如
WEBDAVS
。但它们不太知名,也不太容易安装。这就是为什么我会反对这样的实验,除非有非常具体的原因


最后一个选项是网络共享。这使得我们可以像处理本地文件操作一样处理系统间的文件传输,这显然是一个巨大的优势。这样的连接可以加密,但并不是真正为长途通信而设计的。所以这取决于你的具体情况。这里的典型选择是
NFS
SMB
/
CIFS
Samba
)。也许还可以使用一些较新的“分布式文件系统”。但由于缺乏个人经验,我不能说太多;-)我看到的这个选项的最大问题是,它需要对客户端系统(因此是您的web托管平台)进行特权访问,因为您必须将共享装载到本地文件系统中,无论是在系统级还是在用户级。这在廉价的web托管场景中通常是不可能的

由于问题在于阻止直接访问,因此最好的解决方案是将图像移出公用文件夹,以防止apache/nginx提供文件服务


然后,您将读取PHP请求的文件并将内容流到用户。

取决于每个页面加载了多少图像,我会考虑CDN。您真正关心的是什么,您还没有真正提到。如果您对风险没有准确的了解,那么不将它们保存在Web服务器上可能是明智的,但是关于如何存储图像的任何决定主要取决于您何时以及如何检索和使用内容。你的问题中没有提到这一点。你仍然不知道问题出在哪里?如果您想阻止直接访问它们,您可以将它们移出目录,让php读取文件并提供服务。如果你不想超载GoDoD服务器,而不是考虑CDN.M.Alnasmii,现在把它放在GoDoad服务器上似乎是一个可行的选择。它现在应该过载了,我可以通过PHP使用FTP访问它们。Thanks@urnotsam那么,您关心的是直接访问吗?谢谢您深思熟虑的回答。我将使用SFTP,因为它不需要在现有服务器上进行额外设置,而且更安全。