用sftp和php上传文件

时间:2014-09-07 15:53:17

标签: php sftp phpseclib

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

/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);

Ilproblemaè: 如何打开一个对话框以允许用户在用户的PC上选择文件并上传到她的个人目录中?

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

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

但是,如果我在服务器上本地驻留的文件工作正常,但它没有意义,因为用户无法放置其文件。有几天我尝试但没有成功。 此外,下载不起作用,主要针对同样的问题。

1 个答案:

答案 0 :(得分:1)

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

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

所以,你需要做的是一个两步的方法:首先,你需要使用HTTP POST请求将文件上传到以常规方式运行PHP文件的服务器。您可以将请求发送到PHP脚本,然后使用SFTP将文件移动到其他服务器。


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


上传你应该考虑使用某种类型的cron作业或使用PHP exec()开始的后台作业,因为你很可能遇到最大执行超时或者必须设置更高比你应该上传它们使用PHP,特别是对于大文件。另一种方法是使用单独的PHP配置(取决于您运行的PHP版本,您可以使用.htaccess文件,.user.ini文件或不同的PHP-FPM池)来增加仅上载脚本的执行时间