2013-10-10 2 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_rename 또는 rename이 (가) 뒤에서 무엇을하고 있는지 디버그 할 수 있습니까? 다른 누구도 이와 같은 경험을하고 해결책을 찾았습니까? libssh2 문제를 진단 어떤 힌트를

감사합니다, 마티아스

답변

1

불가능 가까이입니다. 내 추천 : 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(); 
?> 

로그를 보는 대신 내 생각 엔 사용 권한 문제 일 것이지만 로그는 확실히 알려줄 것입니다.

관련 문제