用sftp和php上传文件

用sftp和php上传文件,php,sftp,phpseclib,Php,Sftp,Phpseclib,我正在使用库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 (

我正在使用库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);
Il problemaè: 我如何打开一个对话框,允许用户选择用户PC上的文件并上传到她的个人目录中

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

我得到:
C:\\Users\\**\\Desktop\\test.txt不是有效文件

但是,如果我使用驻留在服务器本地的文件,效果很好,但这没有意义,因为用户无法放置其文件。有好几天我都在尝试,但都没有成功。
下载也不起作用,基本上是为了解决相同的问题。

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

我假设上面有PHP文件的服务器和SFTP服务器是不同的服务器,否则你的整个问题就没有多大意义了

因此,这里需要做的是两步方法:首先,需要使用HTTPPOST请求将文件上传到服务器,服务器以常规方式运行PHP文件。您可以将请求发送到PHP脚本,然后该脚本使用SFTP将文件移动到另一台服务器


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



上传时,你应该考虑使用某种CRON任务或者使用PHP的“代码> Excel())/代码>开始的后台作业,因为如果你上传USPIN PHP,尤其是大型文件,你很可能会碰到max执行超时,或者必须设置它们比你应该高的方法。另一种方法是使用单独的PHP配置(取决于您正在运行的PHP版本,您可以使用.htaccess文件、.user.ini文件或不同的PHP-FPM池)来增加仅上载脚本的执行时间。

PHP正在服务器上运行。因此,它无法访问存储在每个用户计算机上的文件。您需要分两步完成此操作。首先,使用HTTPPOST将文件上传到运行PHP脚本的服务器上。然后使用SFTP将它们复制到文件应该在的服务器上。@JohannesH。你为什么不回答这个问题?@JohannesH。好啊然后尝试应用“两个步骤”。我想下载是一样的@MartinPrikryl,因为我真的认为它不符合标准,所以当它达到完整性时,我没有时间添加额外的信息。不过我可能以后再做。