0

我在使用 ssh2_sftp_rename 时遇到问题,或者通常使用 SSH2/SFTP 包装器时遇到问题。

我们有两个 SFTP 服务器。一个是我们自己设置的测试服务器,一个是来自服务提供商的。在测试服务器上,一切正常,而在提供的 SFTP 上,我们无法通过 PHP 重命名文件。通过 sftp cli 手动重命名工作正常。我们的 SFTP 服务器使用协议版本 2.0 和远程软件版本 OpenSSH_6.0p1 Debian-4,而另一台使用协议版本 2.0,远程软件版本 OpenSSH_5.3。所以我猜他们应该采取同样的行动。

这是用于测试的最小代码片段,它不起作用:

<?php
$connection = ssh2_connect('sftp.serviceprovider.com', 22);
ssh2_auth_password($connection, 'username', 'password');

$sftp = ssh2_sftp($connection);
$result = ssh2_sftp_rename($sftp, '/new/foo.xml.gz', '/processed/foo.xml.gz');

var_dump($result);
var_dump(error_get_last());

$resultfalseerror_get_last()返回NULL。我还尝试保留开头的斜杠或我能想到的任何其他组合,但它只是“不起作用”:文件仍在“新”文件夹中。

因此,不幸的是,我无法查看服务提供商的日志文件,但我已要求提供日志摘录或至少进行分析。但我不想等待他们的支持中心回答我的问题并尝试调试这些东西。

有没有可能在幕后调试什么ssh2_sftp_rename或正在做什么?rename有没有其他人经历过这样的事情并找到了解决方案?

感谢您的任何提示,马蒂亚斯

4

1 回答 1

1

用 libssh2 诊断问题几乎是不可能的。我的建议:使用phpseclib,一个纯 PHP SFTP 实现。例如。

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

define('NET_SFTP_LOGGING', NET_SFTP_LOG_COMPLEX);

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

$sftp->rename('filename.remote', 'newname.remote');

echo $sftp->getSFTPLog();
?>

代替查看日志,我的猜测是权限问题,但日志应该可以肯定地告诉我们。

于 2013-10-13T03:40:21.477 回答