source

PHP에서 SFTP를 사용하는 방법

gigabyte 2022. 9. 16. 23:08
반응형

PHP에서 SFTP를 사용하는 방법

웹 FTP 클라이언트용 PHP 스크립트를 많이 접했습니다.SFTP 클라이언트를 PHP에서 웹 애플리케이션으로 구현해야 합니다.PHP는 SFTP를 지원합니까?샘플을 찾을 수 없었습니다.누가 나 좀 도와줄래?

PHP에는 ssh2 스트림 래퍼(기본적으로 비활성화됨)가 있습니다.따라서 스트림 래퍼를 지원하는 모든 함수와 함께 sftp 연결을 사용할 수 있습니다.ssh2.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 기능은 그다지 좋지 않습니다.사용하기 어렵고 설치도 어렵기 때문에 코드 이동성이 제로임을 보증합니다.순수한 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 v1 설치:

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/

v2로 업그레이드:

https://flysystem.thephpleague.com/v2/docs/advanced/upgrade-to-2.0.0/

설치하다

 composer require league/flysystem-sftp:^2.0

그 후, 다음과 같이 입력합니다.

//$filesystem->listFiles($path); // get file lists
$allFiles = $filesystem->listContents($path)
->filter(fn (StorageAttributes $attributes) => $attributes->isFile());

$filesystem->read($path_to_file); // grab file
//$filesystem->put($path); // upload file
$filesystem->write($path);

나는 전면적인 코프아웃을 수행했고 배치파일을 만들고 나서 콜을 하는 수업을 썼다.sftp경유로system가장 좋은(또는 가장 빠른) 방법은 아니지만, 필요한 기능을 할 수 있고 PHP에 추가 라이브러리나 확장 기능을 설치할 필요가 없습니다.

이 기능을 사용하고 싶지 않다면ssh2확장 기능

언급URL : https://stackoverflow.com/questions/4689540/how-to-sftp-with-php

반응형