【问题标题】:Upload file with sftp and php使用 sftp 和 php 上传文件
【发布时间】:2014-09-07 15:53:16
【问题描述】:

我正在使用库 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);

Il questiona è: 如何打开一个对话框让用户选择用户PC上的文件并上传到她的个人目录?

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

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

但是如果我将一个驻留在服务器本地的文件工作正常,但这没有意义,因为用户不能放置它的文件。我尝试了几天但没有成功。 下载也不起作用,本质上是同样的问题。

【问题讨论】:

  • PHP 正在服务器上运行。因此,它无法访问存储在每个用户计算机上的文件。您需要分两步执行此操作。首先,使用 HTTP Post 将文件上传到运行 PHP 脚本的服务器。然后使用 SFTP 将它们复制到文件应位于的服务器上。
  • @JohannesH。你为什么不把这个作为答案?
  • @JohannesH。好的!然后尝试应用“两个步骤”。我想下载是一样的!
  • @MartinPrikryl 因为老实说,我认为它在完整性方面不符合 SO 的标准,而且我没有时间向它添加其他信息。不过我可能会稍后再做。

标签: php sftp phpseclib


【解决方案1】:

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

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

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


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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2019-03-23
    • 1970-01-01
    • 2011-08-14
    • 2013-05-07
    • 2016-02-18
    相关资源
    最近更新 更多