如何使用 phpseclib 通过 SFTP 检查上传的文件是不是存在
Posted
技术标签:
【中文标题】如何使用 phpseclib 通过 SFTP 检查上传的文件是不是存在【英文标题】:How to check uploaded file is exists with SFTP using phpseclib如何使用 phpseclib 通过 SFTP 检查上传的文件是否存在 【发布时间】:2015-12-14 05:46:01 【问题描述】:我正在使用 phpseclib 将文件上传到远程服务器。以前,我的脚本运行良好,但我期望它可以检查远程服务器是否接收到文件。比如文件存在返回1/true,文件不存在返回0/false。
我的代码:
include('Net/SFTP.php');
$path = "upload/";
$path_dir .= $ref .".xml";
$directory = '/home/XML/';
$directory .= $ref .".xml";
$sftp = new Net_SFTP('xxx.com',22);
if (!$sftp->login('username', 'password'))
exit('SFTP Login Failed');
echo $sftp->pwd();
$sftp->put($directory, $path_dir, NET_SFTP_LOCAL_FILE);
if (!$sftp->get($directory))
echo "0";
文件上传成功,但不知道如何查看文件是否存在。
有没有人有任何解决此问题的想法或建议?
【问题讨论】:
你可以使用$sftp->rawlist($dir)
和array_key_exists
的组合,或者只使用stat($file)
你能给我一些例子吗?脚本挂了我的服务器。非常感谢
【参考方案1】:
你可以使用file_exists
方法:
if ($sftp->file_exists($directory))
echo "File exists";
($directory
变量名在这里真的很混乱。它是指向文件而不是目录的路径。)
虽然测试put
方法的结果就足够了。确实不需要额外的检查。
file_exists
方法仅从 phpseclib 0.3.7 开始可用。如果您使用的是旧版本的 phpseclib,请使用stat
方法:
if ($sftp->stat($directory))
echo "File exists";
无论如何,file_exists
在内部调用stat
。
【讨论】:
【参考方案2】:你也可以$sftp->file_exists($directory)
。
【讨论】:
对不起,不适合我。不确定 file_exists 是否 sftp 有 file_exists,因为我在 SFTP 示例中找不到它:link 但 stat($directory) 工作正常 这是您提供的链接的第 2250 行:github.com/phpseclib/phpseclib/blob/master/phpseclib/Net/…以上是关于如何使用 phpseclib 通过 SFTP 检查上传的文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章