이 글의 내용은 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 = 'D:\down'.time().'.txt'; ·$opts = array( ·'http'=>array( ·'method'=>"GET", ·'timeout'=>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 'download failed'; ·//} ·//-------------------------------------------------------------------------------------------------------------- ·//上传文件 ·//1 ·//file_put_contents("ssh2.sftp://{$resSFTP}/var/testfile/456.txt", 'D:/ab.txt'); ·//2也可以用copy() ·if(!copy("d:/ab.txt", "ssh2.sftp://{$resSFTP}/var/testfile/up".time().".txt")) { ·echo 'upload failed'; ·} ·} 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 매뉴얼에서
를 전달하면 이 주소가 잘못되었음을 나타내는 오류가 보고됩니다. 마지막으로 업로드를 확인해 보세요. 다운로드 주소는 이전
에 추가할 필요 없이 SFTP 파일 경로를 직접 사용하세요.
업로드에 사용되는 기능은 copy, file_get_content, 컬
을 사용하여 업로드해야 합니다.
ssh2_scp_recv 다운로드
위 내용은 PHP+sftp는 파일 업로드 및 다운로드를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!