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

PHP+sftp는 파일 업로드 및 다운로드를 구현합니다.

零到壹度
零到壹度원래의
2018-04-11 18:03:124697검색

이 글의 내용은 PHP+sftp로 구현된 파일 업로드 및 다운로드에 대한 내용입니다. 일정한 참고값이 있습니다. 도움이 필요한 친구들이 참고할 수 있습니다.

최근에 은행과 협력하는 프로젝트를 개발했습니다. , 문서 업로드 및 다운로드가 필요합니다. 파일 기밀성에 대한 특정 요구 사항이 있으므로 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 매뉴얼에서

ssh2_sftp_realpath를 찾아냈고, 마지막으로 접속한 파일의 주소를 반환해 주었습니다. SFTP에 연결한 후 "ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

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

sh2.sftp://{$resSFTP}

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

업로드에 사용되는 기능은 copy, file_get_content, 컬

을 사용하여 업로드해야 합니다.

ssh2_scp_recv 다운로드

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

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