[php] PHP로 SFTP하는 방법?

웹 FTP 클라이언트 용 PHP 스크립트를 많이 보았습니다. PHP에서 웹 애플리케이션으로 SFTP 클라이언트를 구현해야합니다. PHP는 SFTP를 지원합니까? 샘플을 찾을 수 없습니다. 누구든지 이것으로 나를 도울 수 있습니까?



답변

PHP에는 ssh2 스트림 래퍼 (기본적으로 비활성화 됨)가 있으므로 ssh2.sftp://프로토콜 에 사용하여 스트림 래퍼를 지원하는 모든 함수에 sftp 연결을 사용할 수 있습니다.

file_get_contents('ssh2.sftp://user:pass@example.com:22/path/to/filename');

또는 -ssh2 확장을 사용하는 경우

$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$sftp = ssh2_sftp($connection);
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');

http://php.net/manual/en/wrappers.ssh2.php 참조

참고로이 주제에 대해 이미 많은 질문이 있습니다.


답변

ssh2 함수는 그다지 좋지 않습니다. 사용하기 어렵고 아직 설치하기 어렵 기 때문에 코드를 사용하면 코드의 이식성이 0이됩니다. 내 추천은 순수한 PHP SFTP 구현 인 phpseclib 를 사용 하는 것 입니다.


답변

“phpseclib”가이 작업에 도움이된다는 것을 알았습니다 (SFTP 및 더 많은 기능). http://phpseclib.sourceforge.net/

파일을 서버에 넣으려면 ( http://phpseclib.sourceforge.net/sftp/examples.html#put의 코드 예제 )

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

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

// puts a three-byte file named filename.remote on the SFTP server
$sftp->put('filename.remote', 'xxx');
// puts an x-byte file named filename.remote on the SFTP server,
// where x is the size of filename.local
$sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE);


답변

Flysystem 설치 :

composer require league/flysystem-sftp

그때:

use League\Flysystem\Filesystem;
use League\Flysystem\Sftp\SftpAdapter;

$filesystem = new Filesystem(new SftpAdapter([
    'host' => 'example.com',
    'port' => 22,
    'username' => 'username',
    'password' => 'password',
    'privateKey' => 'path/to/or/contents/of/privatekey',
    'root' => '/path/to/root',
    'timeout' => 10,
]));
$filesystem->listFiles($path); // get file lists
$filesystem->read($path_to_file); // grab file
$filesystem->put($path); // upload file
....

읽다:

https://flysystem.thephpleague.com/v1/docs/


답변

나는 완전한 cop-out을 수행하고 배치 파일을 만든 다음 호출을 sftp통해 호출하는 클래스를 작성했습니다 system. 가장 좋은 (또는 가장 빠른) 방법은 아니지만 필요한 작업을 수행하며 PHP에서 추가 라이브러리 또는 확장을 설치할 필요가 없습니다.

ssh2확장 기능 을 사용하지 않으려면 갈 방법이 될 수 있습니다.


답변