FTP_SITE関数の最初のパラメーターはサイトコマンドであり、FTPサーバーのフォーマット要件に準拠する必要があります。 FTPサーバーは通常、異なるオペレーティングシステムに従って異なるサイトコマンドオプションを提供します。たとえば、UNIXシステムでは、サイトCHMODやサイトリストなどのコマンドがある場合があります。異なるFTPサーバーには異なるコマンド構文またはパラメーター要件がある場合があるため、コマンド形式が正しくない場合、FTPサーバーはエラーを返し、実行に失敗します。
<span><span><span class="hljs-variable">$ftp_conn</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-string">"ftp.example.com"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">ftp_site</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"CHMOD 777 somefile.txt"</span></span><span>); </span><span><span class="hljs-comment">// 正しいコマンド</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_site</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"CHMOD777 somefile.txt"</span></span><span>); </span><span><span class="hljs-comment">// 間違い,誤ったコマンド形式</span></span><span>
</span></span>
2番目の例では、コマンドCHMOD777の形式が正しくないため、FTPサーバーが理解できないため、実行が失敗します。
FTPサーバーによってサポートされるサイトコマンドは、通常、サーバーの構成とオペレーティングシステムによって異なります。一部のFTPサーバーは、特定のコマンドをサポートしていない場合や、現在の構成によって一部のオプションが受け入れられない場合があります。サポートされていないコマンドまたはパラメーターを使用しようとすると、 FTP_SITE関数はfalseを返します。
<span><span><span class="hljs-title function_ invoke__">ftp_site</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"SITE SETMODE 755"</span></span><span>); </span><span><span class="hljs-comment">// このコマンドがそうではないと仮定します FTP サーバーサポート</span></span><span>
</span></span>
上記の例では、サイトSetModeはサーバーによってサポートされていないコマンドである場合があります。異なるFTPサーバーが異なる実装を実装するため、サポートされていないコマンドを送信しようとすると、実行障害が発生します。
FTP_SITEの2番目のパラメーターは、特定のコマンドと操作です。コマンドパラメーターが不完全または欠落している場合、FTPサーバーはコマンドを理解できず、障害が発生します。たとえば、サイトCHMODコマンドには、許可値とファイルパスが必要です。これらのいずれかが欠落している場合、実行は失敗します。
<span><span><span class="hljs-title function_ invoke__">ftp_site</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"SITE CHMOD"</span></span><span>); </span><span><span class="hljs-comment">// 許可値とファイルパスの欠落</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_site</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"SITE CHMOD 777"</span></span><span>); </span><span><span class="hljs-comment">// ファイルパスがありません</span></span><span>
</span></span>
上記の両方の状況には、重要なコマンドパラメーターが欠けているため、 FTP_SITE実行の障害が発生します。
FTP_SITE関数のパラメーター値タイプが正しくない場合があります(たとえば、文字列の代わりに数値を渡すこともできます)、実行に失敗する可能性があります。 FTP_SITEのパラメーター要件は文字列ですが、一部の違法な文字または非準拠の形式により、FTPサーバーがコマンドを認識しない可能性があります。
<span><span><span class="hljs-title function_ invoke__">ftp_site</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"SITE CHMOD 755 12345"</span></span><span>); </span><span><span class="hljs-comment">// 仮定 12345 有効なファイルパスではありません</span></span><span>
</span></span>
この例では、 12345は有効なファイルパスまたはファイル名ではない場合があり、これによりコマンドが適切に実行されなくなります。
FTP_SITE関数が失敗する理由は、コマンド自体が正しくないためではなく、コマンドを実行するユーザーの許可が不十分であるためである場合があります。たとえば、ファイル許可を変更したり、ディレクトリ設定を変更したりするときは、より高い権限が必要になる場合があります。現在のFTPユーザーに十分な権限がない場合、サーバーは対応するコマンドの実行を拒否します。
<span><span><span class="hljs-title function_ invoke__">ftp_site</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"SITE CHMOD 777 sensitive_file.txt"</span></span><span>); </span><span><span class="hljs-comment">// 許可が不十分な場合、実行に失敗しました</span></span><span>
</span></span>
この例では、FTPユーザーがsensitive_file.txtファイルの権限を変更する許可を持たない場合、実行は失敗します。
ネットワーク接続の問題は、FTP操作の障害の一般的な原因の1つです。 FTP_SITEコマンドの実行時にクライアントとFTPサーバー間のネットワーク接続が不安定である場合、またはサーバー応答タイムアウトの場合、コマンドが正常に実行されない場合があります。
<span><span><span class="hljs-variable">$ftp_conn</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-string">"ftp.example.com"</span></span><span>, </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// タイムアウトを設定します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">ftp_site</span></span><span>(</span><span><span class="hljs-variable">$ftp_conn</span></span><span>, </span><span><span class="hljs-string">"SITE CHMOD 777 somefile.txt"</span></span><span>); </span><span><span class="hljs-comment">// ネットワークの問題は失敗につながります</span></span><span>
</span></span>
コマンドの実行時にネットワークが不安定である場合、またはFTPサーバーが時間内に応答できない場合、 FTP_SITEが失敗する可能性があります。
FTPサーバーが高負荷状態でリクエストを処理すると、応答が遅れたり、特定のコマンドを処理できない場合があります。これは通常、まれな問題ですが、交通量の多い環境では、サーバーリソースが制限に達する可能性があり、 FTP_SITE実行障害が発生します。