웹 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
....
읽다:
나는 완전한 cop-out을 수행하고 배치 파일을 만든 다음 호출을 sftp
통해 호출하는 클래스를 작성했습니다 system
. 가장 좋은 (또는 가장 빠른) 방법은 아니지만 필요한 작업을 수행하며 PHP에서 추가 라이브러리 또는 확장을 설치할 필요가 없습니다.
ssh2
확장 기능 을 사용하지 않으려면 갈 방법이 될 수 있습니다.