現在の位置: ホーム> 最新記事一覧> 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_GETFTP_PUTなどなど)を実行する前に、 FTP_PASVを有効にする前にパッシブモードを有効にする必要があります。

 <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_LOGINが成功した後、 FTP_PASVを呼び出す必要があります。

  2. 一部のFTPサーバーは、デフォルトでパッシブモードをサポートせず、サーバー側で構成する必要があります。

  3. 接続の問題に遭遇するときは、 FTP_RAWを使用してサーバーの応答を表示して、問題のトラブルシューティングを支援します。

7。結論

FTP_CONNECTFTP_LOGIN、およびFTP_PASVを組み合わせることにより、FTPを使用して、複雑なネットワーク環境で安定してファイルを転送できます。実際の開発では、このプロセスは特に重要です。これらの機能の使用を習得すると、さまざまなFTP操作の問題をより簡単に処理できます。この記事の説明が、FTP接続とパッシブモードの設定をうまく実現するのに役立つことを願っています。