>  기사  >  백엔드 개발  >  PHP는 sftp에 연결하여 파일 업로드 및 다운로드를 구현합니다.

PHP는 sftp에 연결하여 파일 업로드 및 다운로드를 구현합니다.

不言
不言원래의
2018-04-16 10:07:142359검색

이 기사의 내용은 sftp를 PHP와 연결하여 파일 업로드 및 다운로드를 실현하는 것에 관한 것입니다. 이제 모든 사람과 공유합니다. 은행에 업로드하고 파일을 다운로드해야 합니다. 파일 기밀성에 대한 특정 요구 사항이 있으므로 SFTP가 사용됩니다. 그러나 실제 개발에서는 인터넷에서 찾은 튜토리얼과 사례를 사용할 수 없고 계속해서 복사되는 문제가 많이 발생했습니다. 끊임없는 디버깅 끝에 마침내 PHP의 파일 업로드 및 다운로드가 실현되었습니다. 지금은 참고용으로만 녹음되었습니다.

1. PHP 버전을 확인하고 해당 SSH2 확장 프로그램을 다운로드하세요. https://windows.php.net/downloads/pecl/releases/ssh2/ 구체적인 설치 방법은 온라인에서 검색하세요. phpinfo()는 설치 여부를 확인합니다. 설치가 성공적으로 완료되면 ssh2를 볼 수 있습니다.

2.

인터넷에서 제공하는 업로드 및 다운로드 방법(한번쯤 보신 적이 있으실 겁니다)

<·?·php
//php环境中必须有ssh
·$strServer = "服务器ip";//服务器ip
·$strServerPort = "22";//端口号
·$strServerUsername = "***";//用户名
·$strServerPassword = "***";//密码
·//connect to server
·$resConnection = ssh2_connect($strServer, $strServerPort);
·if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){
·//初始化 SFTP
·$resSFTP = ssh2_sftp($resConnection);
·echo $resSFTP;
·//下载文件
·//1
·$filename = &#39;D:\down&#39;.time().&#39;.txt&#39;;
·$opts = array(
·&#39;http&#39;=>array(
·&#39;method&#39;=>"GET",
·&#39;timeout&#39;=>60,
·)
·);
·$context = stream_context_create($opts);
·$strData = ·file_get_contents("ssh2.sftp://{$resSFTP}/var/testfile/abc.txt", false, $context);
·file_put_contents($filename, $strData);
·//2 也可以用copy()
·//if(!copy("ssh2.sftp://{$resSFTP}/dfr508/WUN/ikea-logo.jpg", $filename)) {
·// echo &#39;download failed&#39;;
·//}
·//--------------------------------------------------------------------------------------------------------------
·//上传文件
·//1
·//file_put_contents("ssh2.sftp://{$resSFTP}/var/testfile/456.txt", &#39;D:/ab.txt&#39;);
·//2也可以用copy()
·if(!copy("d:/ab.txt", "ssh2.sftp://{$resSFTP}/var/testfile/up".time().".txt")) {
·echo &#39;upload failed&#39;;
·}
·} else {
·echo "无法在服务器进行身份验证";
·}
·?·>
하지만 온라인 튜토리얼을 따라했는데 실패했습니다. , 그래서 단계별로 원인을 조사해야 했습니다.

         $strServer = "";//服务器ip         
         $strServerPort = "";//端口号     
         $strServerUsername = "";//用户名     
         $strServerPassword = "";//密码    
         //1连接服务器          
         $resConnection = ssh2_connect($strServer, $strServerPort);        
         //2验证连        
         if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){            
         //3初始化 SFTP            
         $resSFTP = ssh2_sftp($resConnection);

우선, 처음 세 단계에서는 문제가 없습니다.

copy, file_get_content,curl 메소드를 사용하여 업로드 및 다운로드를 수행하면 502 오류가 보고됩니다. 경로와 기타 사항을 확인해 보니 문제는 없었으나 성공하지 못할 뿐입니다.

SFTP 서버의 파일 주소에는 접근이 불가능한 것으로 추후 유추됩니다.

"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"


이제 정말 쓸만한 주소밖에 못 찾겠군요. 많은 정보를 확인하다가 드디어 PHP에서 찾았습니다. manual


ssh2_sftp_realpath 파일의 실제 경로를 확인하고, 마지막으로 SFTP에 접속한 후 접속한 파일의 주소를 반환한다.

"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

를 전달하면 이 주소가 잘못되었음을 나타내는 오류가 보고됩니다. 마지막으로 업로드를 확인해 보세요. 다운로드 주소는 이전

sh2.sftp://{$resSFTP}

에 추가할 필요 없이 SFTP 파일 경로를 직접 사용하세요.

업로드에 사용된 기능은 사용할 수 없습니다. 앞서 언급한

copy, file_get_content, 컬

을 사용해야 합니다.

ssh2_scp_send Upload

ssh2_scp_recv Download

관련 추천:

PHP mysql 연결 방법 - mysqli 및 PDO

PHP 연결 풀에 대한 자세한 설명






위 내용은 PHP는 sftp에 연결하여 파일 업로드 및 다운로드를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.