[英]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.