繁体   English   中英

使用sftp和php上传文件

[英]Upload file with sftp and php

我正在使用库phpseclib0.3.7通过SFTP连接到我的Web服务器。 存在的用户具有以下结构:

/dirhome/FirstUser/FirstUser/
/dirhome/SecondUser/SecondUser/
/dirhome/....../.....

哪里:

   dirhome: 
      own        -> root:root
      permission -> 700
   FirsUser: (is the name of a user (example))
      own        -> root:root
      permission -> 755
   FirsUser: (is the name of a user (example))
      own        -> FirstUser:mygroup
      permission -> 700

第二个用户的结构相同,依此类推。 使用此功能,用户只能在其目录内查看/编辑/创建内容。

我可以使用库轻松连接PHP,并查看文件夹/文件,但是不知道如何从用户本地PC上的文件上传到您个人文件夹中的远程服务器上。

该库提供了以下方法:

   ->put($remotepath, $localpath, NET_SFTP_LOCAL_FILE);

问题:如何打开对话框以允许用户选择用户PC上的文件并上传到其个人目录中?

如果我输入: $localpath = "C:\\\\Users\\\\****\\\\Desktop\\\\test.txt"

我得到: C:\\\\Users\\\\****\\\\Desktop\\\\test.txt is not a valid file

但是,如果我选择一个驻留在服务器本地的文件,则可以正常工作,但这没有任何意义,因为用户无法放置其文件。 我尝试了几天,但没有成功。 同样,对于相同的问题,下载也不起作用。

PHP是服务器端脚本语言。 当您的浏览器请求一个PHP生成的站点时,PHP在服务器上运行,并且您的浏览器只能看到结果。 因此,PHP很显然无法访问客户端文件:它已经在任何东西到达客户端计算机之前就已经运行了。

我假设带有PHP文件的服务器和SFTP服务器是不同的服务器,否则您的整个问题就没有太大意义了。

因此,您需要执行以下两步操作:首先,您需要使用HTTP POST请求将文件上载到以常规方式运行PHP文件的服务器。 您可以将请求发送到PHP脚本,然后使用SFTP将文件移动到其他服务器。


对于下载(如您在注释中所要求的),它的工作原理相似:浏览器请求一个PHP脚本,该脚本从SFTP服务器获取文件,然后将其作为HTTP响应发送给浏览器。 然后,浏览器应显示一个常规文件下载对话框,用户可以选择将其存储在何处。


上载之前,您应该考虑使用某种cron作业或使用PHP的exec()开始的后台作业,因为您很可能会遇到最大执行超时,或者必须将其设置为比使用usign PHP上载时要高的值,尤其是大文件。 替代方法是使用单独的PHP配置(取决于正在运行的PHP版本,可以使用.htaccess文件,.user.ini文件或其他PHP-FPM池)来增加仅上载脚本的执行时间。 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM