2013-10-10 19 views
0

我遇到了ssh2_sftp_rename問題,或者通常與SSH2/SFTP包裝器有關。如何調試ssh2_sftp_rename?

我們有兩臺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_renamerename在幕後做些什麼?有沒有其他人經歷過這樣的事情,並找到了解決方案?

感謝您的任何提示, 馬蒂亞斯

回答

1

診斷問題與libssh2是幾乎是不可能的。我的推薦:使用phpseclib, a pure PHP SFTP implementation。例如。

<?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(); 
?> 

代替查看日誌我猜測會是一個權限問題,但日誌應該告訴我們肯定。