<span><span>--------------------------------------------------
使用 ftp_pasv 時間,FTP エラーがないようにサーバーを構成する方法?簡単な説明
--------------------------------------------------
存在する PHP で使用されます ftp_pasv 関数はパッシブモードを有効にします(Passive Mode)接続する FTP サーバ時間,常常会遇到接続する失败或数据传输真ん中断的问题。これは主に次のものです FTP サーバー構成は、ネットワーク環境と1つ致しません,クライアントがデータチャネルを正しく確立できないようにします。この記事では、使用について詳しく説明します ftp_pasv 時間,FTP サーバーを構成する方法,才能保证接続する稳定、滑らかなトランスミッション。
1つ、FTP アクティブモードとパッシブモードの簡単な説明
FTP 接続する由控制接続する和数据接続する组成。アクティブモード(Active Mode)真ん中,クライアントはサーバーにそれを伝えますIPおよびポート,サーバ主动接続する客户端进行数据传输;パッシブモード(Passive Mode)サーバーは、クライアントにデータポートを指示します,客户端主动接続するサーバ。パッシブモード通常适合客户端处于防火墙或NAT环境時間使用。
二、なぜ使用するのか ftp_pasv?
存在する现代网络环境真ん中,多くの場合、クライアントはファイアウォールまたはルーターの後ろにあります,アクティブモード接続する因被动防火墙阻挡而失败。開ける ftp_pasv パッシブモード后,クライアントはこれらの制限をバイパスできます,主动接続するサーバ指定的端口进行数据传输,これにより、成功率が向上します。
三つ、FTP サーバーを構成する方法?
</span><span><span class="hljs-number">1</span></span><span>. **配置パッシブモード端口范围**
サーバ必须设置1つ段专用的端口范围供パッシブモード使用,例えば </span><span><span class="hljs-number">50000</span></span><span>-</span><span><span class="hljs-number">51000</span></span><span>。
- 存在する vsftpd 真ん中,構成ファイルは通常です `/etc/vsftpd/vsftpd.conf`,追加または変更します:
```conf
pasv_min_port=</span><span><span class="hljs-number">50000</span></span><span>
pasv_max_port=</span><span><span class="hljs-number">51000</span></span><span>
</span></span>
ProFTPDやPure-FTPDなどの他のFTPサーバーにも同様の構成があります。
ファイアウォールポートを開く<br> パッシブモードのデータポート範囲(上記の例では50000-51000など)は、サーバーファイアウォールでリリースする必要があります。それ以外の場合、クライアントはこれらのポートに接続できないため、送信に障害が発生します。
たとえば、 iptablesを使用して、ルールを追加します。
<span><span>iptables -I INPUT -p tcp --match multiport --dports 50000:51000 -j ACCEPT
</span></span>
ファイアウォールまたは他のファイアウォールソフトウェアを使用する場合、対応する構成も必要です。
サーバーのパブリックIPを設定します
サーバーは通常、イントラネットにあるか、NATを使用しているため、クライアントに正しいパブリックIPアドレスを指示する必要があります。
vsftpdで、構成:
<span>pasv_address=あなたのパブリックネットワークIP住所
</span>
それ以外の場合、クライアントはイントラネットIPを取得し、データポートに接続できません。
接続タイムアウトと最大数の接続数<br>を構成します 時期尚早の接続切断またはサーバーリソースの不足を防ぐために、タイムアウト設定と最大接続カウントを適切に調整します。
4。PHPコードの例以下は、パッシブモードをオンにしてファイルをアップロードする簡単な例です。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$ftp_server</span></span><span> = </span><span><span class="hljs-string">"ftp.example.com"</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-variable">$local_file</span></span><span> = </span><span><span class="hljs-string">"/path/to/local/file.txt"</span></span><span>;
</span><span><span class="hljs-variable">$remote_file</span></span><span> = </span><span><span class="hljs-string">"file.txt"</span></span><span>;
</span><span><span class="hljs-comment">// 接続する FTP</span></span><span>
</span><span><span class="hljs-variable">$conn_id</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-variable">$ftp_server</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$conn_id</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">// ログイン</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_id</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-keyword">die</span></span><span>(</span><span><span class="hljs-string">"FTP ログイン失败"</span></span><span>);
}
</span><span><span class="hljs-comment">// 開けるパッシブモード</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_pasv</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// ファイルをアップロードします</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ftp_put</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>, </span><span><span class="hljs-variable">$local_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">// 关闭接続する</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
5。概要FTP_PASVを使用する場合、キーは、サーバー側のパッシブモードポート範囲、ファイアウォールルール、パブリックネットワークIPアドレスを正しく構成することです。それらのどれも欠落していません。そうしないと、クライアントはデータ接続を正しく確立できません。サーバーが合理的に構成され、正しいPHPコードと組み合わされている限り、ほとんどのFTPパッシブモードの接続エラーは回避できます。
この記事の説明を通して、FTPパッシブモードの構成を明確に理解しており、実際のプロジェクトでFTP_PASVをスムーズに使用して、安定した効率的なファイル転送を確保できると思います。
<span></span>