현재 위치: > 최신 기사 목록> ftp_connect와 함께 ftp_pasv를 사용하는 방법, ftp 연결 및 수동 모드 설정을 단계별로 구현하는 방법을 가르쳐주십시오.

ftp_connect와 함께 ftp_pasv를 사용하는 방법, ftp 연결 및 수동 모드 설정을 단계별로 구현하는 방법을 가르쳐주십시오.

M66 2025-06-28

FTP 작업에 PHP를 사용할 때는 종종 연결 시간 초과 또는 데이터를 전송할 수 없습니다. 특히 일부 방화벽 또는 NAT 네트워크 환경에서 활성 모드로 인해 FTP 데이터 연결이 실패 할 수 있습니다. 현재 수동 모드는 문제를 해결하는 열쇠입니다. 이 기사에서는 FTP_CONNECTFTP_PASV를 사용하여 안정적인 FTP 연결 및 데이터 전송을 달성하는 방법을 이해하기 위해 단계별로 진행됩니다.

1. FTP의 활성 모드와 수동 모드의 차이점을 이해

활성 모드에서 클라이언트는 서버에 연결된 제어 포트 (기본값 21)를 시작한 다음 서버는 클라이언트의 임의의 포트에 연결하여 데이터를 전송합니다. 일부 네트워크 환경에서는 가로 채울 수 있습니다.

수동 모드에서 클라이언트는 제어 연결을 시작할뿐만 아니라 방화벽과 NAT를 통과하기가 더 쉬운 데이터 연결을 적극적으로 시작합니다.

따라서 PHP 스크립트에서 수동 모드를 명시 적으로 켜는 것은 호환성 및 전송 성공률을 향상시키는 중요한 단계입니다.

2. ftp_connect를 사용하여 연결을 설정하십시오

FTP_CONNECT 는 FTP 서버에 연결하기위한 내장 기능입니다. 구문은 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hostname</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$timeout</span></span><span> = </span><span><span class="hljs-number">90</span></span><span>): FTP\Connection|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>

샘플 코드 :

 <span><span><span class="hljs-variable">$ftp_host</span></span><span> = </span><span><span class="hljs-string">'ftp.example.com'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_port</span></span><span> = </span><span><span class="hljs-number">21</span></span><span>;

</span><span><span class="hljs-variable">$conn</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-variable">$ftp_host</span></span><span>, </span><span><span class="hljs-variable">$ftp_port</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$conn</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"연결할 수 없습니다 FTP 섬기는 사람:<span class="hljs-subst">$ftp_host</span></span></span><span>");
}
</span></span>

3. ftp_login을 사용하여 FTP 사용자에게 로그인하십시오

연결이 설정되면 FTP_LOGIN을 사용하여 로그인해야합니다.

 <span><span><span class="hljs-variable">$ftp_user</span></span><span> = </span><span><span class="hljs-string">'username'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_pass</span></span><span> = </span><span><span class="hljs-string">'password'</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-variable">$ftp_user</span></span><span>, </span><span><span class="hljs-variable">$ftp_pass</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"FTP 로그인이 실패했습니다!"</span></span><span>);
}
</span></span>

4. 수동 모드 설정 : FTP_PASV

연결이 성공하고 로그인되면 FTP_PASV를 호출하여 데이터 전송 기능 (예 : FTP_GET , FTP_PUT 등)을 실행하기 전에 수동 모드를 활성화해야합니다.

 <span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_pasv</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"수동 모드를 켜질 수 없습니다!"</span></span><span>);
}
</span></span>

수동 모드를 활성화하려면 true 로 설정하고 활성 모드를 사용하려면 False .

5. 샘플 코드를 완료하십시오

위의 단계를 통합하여 다음 전체 예를 얻으십시오.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>

</span><span><span class="hljs-variable">$ftp_host</span></span><span> = </span><span><span class="hljs-string">'ftp.example.com'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_port</span></span><span> = </span><span><span class="hljs-number">21</span></span><span>;
</span><span><span class="hljs-variable">$ftp_user</span></span><span> = </span><span><span class="hljs-string">'username'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_pass</span></span><span> = </span><span><span class="hljs-string">'password'</span></span><span>;

</span><span><span class="hljs-comment">// 1. 연결을 설정하십시오</span></span><span>
</span><span><span class="hljs-variable">$conn</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-variable">$ftp_host</span></span><span>, </span><span><span class="hljs-variable">$ftp_port</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$conn</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"연결할 수 없습니다 FTP 섬기는 사람!"</span></span><span>);
}

</span><span><span class="hljs-comment">// 2. 로그인하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-variable">$ftp_user</span></span><span>, </span><span><span class="hljs-variable">$ftp_pass</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"FTP 로그인이 실패했습니다!"</span></span><span>);
}

</span><span><span class="hljs-comment">// 3. 수동 모드를 활성화합니다</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_pasv</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"수동 모드를 켜질 수 없습니다!"</span></span><span>);
}

</span><span><span class="hljs-comment">// 4. 예:파일을 다운로드하십시오</span></span><span>
</span><span><span class="hljs-variable">$remote_file</span></span><span> = </span><span><span class="hljs-string">'remote/path/file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$local_file</span></span><span> = </span><span><span class="hljs-string">'local_copy.txt'</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ftp_get</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-variable">$local_file</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>, FTP_BINARY)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일 다운로드가 성공적으로 다운로드하십시오!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일 다운로드가 실패했습니다!"</span></span><span>;
}

</span><span><span class="hljs-comment">// 5. 연결을 닫으십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>);
</span></span>

6. 주목할만한 것들

  1. ftp_pasv는 ftp_login이 성공한 후에 호출해야합니다.

  2. 일부 FTP 서버는 기본적으로 수동 모드를 지원하지 않으며 서버 측에서 구성해야합니다.

  3. 연결 문제가 발생할 때 FTP_RAW를 사용하여 서버 응답을보고 문제를 해결하는 데 도움이됩니다.

7. 결론

FTP_CONNECT , FTP_LOGINFTP_PASV를 결합함으로써 FTP를 사용하여 복잡한 네트워크 환경에서 파일을 안정적으로 전송할 수 있습니다. 실제 개발 에서이 과정은 특히 중요합니다. 이러한 기능을 사용하면 다양한 FTP 작업 문제를보다 쉽게 ​​처리 할 수 ​​있습니다. 이 기사의 설명이 FTP 연결 및 수동 모드 설정을 성공적으로 실현하는 데 도움이되기를 바랍니다.