문제

나는 다른 것들 외에도 파일을 다운로드하거나 업로드하기 위해 FTP 서버에 연결 해야하는 웹 앱을 구축하는 과정에 있습니다. 응용 프로그램은 PHP로 작성되었으며 Linux 서버에서 호스팅됩니다.

내가 궁금한 점은 SFTP 서버를 지원하는 것이 가능할 것인지 아닌지에 대한 것이지만 Google에서 빠른 검색을 한 후에는 이것이 간단하지 않은 것 같습니다.

그렇다면 질문은 : PHP 내에서 SFTP를 사용하는 가장 좋은 방법은 무엇입니까? FTP와 SFTP를 지원할 수있는 클래스가있어 동일한 기능이 둘 다를 사용할 수 있습니까?

도움이 되었습니까?

해결책

예, 당신은 그렇게 할 수 있습니다 곱슬 곱슬하다. FTP에서 SFTP로 전환하려면 프로토콜 옵션 양식을 변경하는 것입니다. CURLPROTO_FTP 에게 CURLPROTO_SFTP.

CURL은 HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TELNET, LDAP, LDAPS, DICT, FILE, TFTP의 다음 프로토콜을 지원합니다.

BTW. SFTP는 FTP와 혼동되어서는 안됩니다. SFTP는 SSH 파일 전송 프로토콜이고 FTP는 SSL을 통해 FTP입니다.

다른 팁

컬이 설치되어 있지 않으면 (내 호스트는 그렇지 않음) phpseclib을 사용할 수 있습니다.

http://phpseclib.sourceforge.net/documentation/net.html#net_sftp

누군가이 페이지에서 누군가가 끝나는 경우.

당신은 또한 사용할 수도 있습니다 libssh2에 대한 PHP 바인딩 PHP와 함께. 시스템에 적절하게 설치해야합니다.

Ubuntu 10.04와 Debian Lenny에서 물론 모든 의존성이 있습니다.

apt-get install libssh2-php

Igor의 권장 사항의 문제점은 무엇보다도 휴대용 코드가 훨씬 덜 휴대용 코드를 만들어 내고 (LIBSSH2가 매우 많은 호스트에 설치되지 않았으며) 훨씬 직관적 인 OOP 기반 API를 가지고 있으며 RSA 인증은 실제로 의미가 있습니다 (Libssh2 요구 사항이 의미가 있습니다. 파일 시스템에 공개 키와 개인 키를 별도로 저장합니다. 별도로 제공해야한다는 사실은 대부분의 개인 키 형식이므로 어리석은 일입니다. 포함 그들 안에 공개 키).

phpseclib도 더 빠릅니다.

http://kevin.vanzonneveld.net/techblog/article/make_ssh_connection_with_php/#comment_3759

$dataFile      = 'PASTE_FILE_NAME_HERE';
$sftpServer    = 'PASTE_SFTP_SERVER_NAME_HERE';
$sftpUsername  = 'PASTE_USERNAME_HERE';
$sftpPassword  = 'PASTE_PASSWORD_HERE';
$sftpPort      = 'PASTE_PORT_HERE';
$sftpRemoteDir = '/';

$ch = curl_init('sftp://' . $sftpServer . ':' . $sftpPort . $sftpRemoteDir . '/' . basename($dataFile));

$fh = fopen($dataFile, 'r');

if ($fh) {
    curl_setopt($ch, CURLOPT_USERPWD, $sftpUsername . ':' . $sftpPassword);
    curl_setopt($ch, CURLOPT_UPLOAD, true);
    curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
    curl_setopt($ch, CURLOPT_INFILE, $fh);
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($dataFile));
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    $verbose = fopen('php://temp', 'w+');
    curl_setopt($ch, CURLOPT_STDERR, $verbose);

    $response = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);

    if ($response) {
        echo "Success";
    } else {
        echo "Failure";
        rewind($verbose);
        $verboseLog = stream_get_contents($verbose);
        echo "Verbose information:\n" . $verboseLog . "\n";
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top