0

我正在尝试在 SSH 服务器中删除一个文件夹及其中的所有文件。问题是我不知道 ssh2 是如何工作的。我将连接更改为 ssh2,但也许这些功能在 ssh 服务器中不起作用,我不知道......

我的代码:

$ftpuser = '***';
$ftppass = '***';
$dir = 'files/someFolder/';
$connection = ssh2_connect('**.***.***.***',22);

if(!$connection) {
    error_log("Couldn't connect to $ftp_server");
    exit;
}
$login_result = ssh2_auth_password($connection, $ftpuser, $ftppass);

ftp_chdir($connection, $dir);
$folders_files = ftp_nlist($connection, '.');
foreach ($folders_files as $folder_file) {
    ftp_delete($connection, $folder_file);
}
ftp_rmdir($connection, $dir);

有一些错误:

PHP Warning:  ftp_chdir(): supplied resource is not a valid FTP Buffer resource in...
PHP Warning:  ftp_nlist(): supplied resource is not a valid FTP Buffer resource in...
PHP Warning:  Invalid argument supplied for foreach() in...
PHP Warning:  ftp_rmdir(): supplied resource is not a valid FTP Buffer resource in...

这到底是怎么回事?

4

2 回答 2

1

您正在混合 ssh2_* 函数和 ftp_* 函数。它们不可互换。

也就是说,我建议使用phpseclib,一个纯 PHP SFTP 实现。一个例子:

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

$sftp->delete('dirname.remote', true); // deletes a directory and all its contents
?>

它可以递归删除东西的事实应该对您特别有用。IE。如果 files/someFolder/ 包含一个文件夹 A,该文件夹本身包含另一个文件夹,文件夹 B,您可能无法使用您的方法删除它,而使用 phpseclib 的删除方法可以删除它。

于 2013-08-21T19:47:27.697 回答
0

您必须在一个不存在的目录中。

此代码将帮助您了解您做错了什么。

echo "Current directory: " . ftp_pwd($connection) . "\n";

// try to change the directory to somedir
if (ftp_chdir($connection, "files/someFolder/")) {
    echo "Current directory is now: " . ftp_pwd($connection) . "\n";
} else { 
    echo "Couldn't change directory\n";
}
于 2013-08-21T12:11:38.123 回答