如何使用 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 检查上传的文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

phpseclib连接过早关闭

如何使用phpseclib验证证书是否由公共CA签名?

是否有使用用户、密码和私钥/公钥来验证 SFTP 的 PHP 库? [关闭]

如何使用带有 SFTP 协议的 JSch 检查读取权限?

本地主机上的 PHPSeclib 公钥认证成功;部署失败

使用 phpseclib 时出现“分段错误”