删除SSH服务器中的内容文件夹

时间:2013-08-21 11:58:24

标签: php file-io

我试图在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...

这到底是怎么回事?

2 个答案:

答案 0 :(得分:1)

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

那说我建议使用phpseclib, a pure PHP SFTP implementation。一个例子:

<?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
?>

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

答案 1 :(得分: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";
}