我试图在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...
这到底是怎么回事?
答案 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";
}