ftp_nb_continueによって返される値は、 ftp_finishedまたはftp_failedを使用して、送信が完了したかどうかを示します。 FTP_FAILEDが返された場合、それは送信が失敗したことを意味します。 FTP_FINISHEDが返された場合、それはトランスミッションが正常に完了したことを意味します。ただし、場合によっては、返信値の例外の問題に遭遇する可能性があります。
解決:
まず、FTP接続が正常であることを確認し、 FTP_ConnectやFTP_LOGINなどの関数を使用して、接続が成功したかどうかを確認します。
ターゲットパスとアクセス許可が正しいことを確認してください。ファイルに書き込みアクセス許可がないか、ターゲットフォルダーが使用できない可能性があります。
FTP_ERRORを使用して、FTPサーバーからエラー情報を取得します。これにより、問題が発生します。
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> == FTP_FAILED) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"送信に失敗しました: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">ftp_error</span></span><span>(</span><span><span class="hljs-variable">$ftp_connection</span></span><span>);
}
</span></span>ファイル転送にFTP_NB_CONTINUEを使用する場合、FTP接続のタイムアウト時間が不適切に設定されている場合、特に大きなファイルを転送する場合、接続がタイムアウトになる可能性があります。
解決:
FTP_SET_OPTIONを使用して、 FTP_TIMEOUTなどのFTPのタイムアウトオプションを設定して、接続の有効期限を避けます。
<span><span><span class="hljs-title function_ invoke__">ftp_set_option</span></span><span>(</span><span><span class="hljs-variable">$ftp_connection</span></span><span>, FTP_TIMEOUT_SEC, </span><span><span class="hljs-number">90</span></span><span>); </span><span><span class="hljs-comment">// タイムアウト時間を設定します902番</span></span><span>
</span></span>サーバーとクライアント間のネットワーク接続が安定していること、およびFTPサーバーが過度の負荷のために遅延しないことを確認してください。
FTPサーバーが送信中に誤って接続を閉じて、 FTP_NB_CONTINUEがFTP_FAILEDエラーを返すことがあります。
解決:
FTPサーバーの構成を確認して、アイドル接続セットが短すぎないことを確認してください。
コード内の自動再接続メカニズムをセットアップします。転送が失敗した場合は、再接続してアップロードまたはダウンロードを継続することができます。
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> == FTP_FAILED) {
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$ftp_connection</span></span><span>);
</span><span><span class="hljs-variable">$ftp_connection</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-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$ftp_connection</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>パスエラーは別の一般的なエラーです。ファイルのアップロードパスと宛先パスが正しく、パスの誤りがないことを確認してください。
解決:
FTP_CHDIR関数を使用してターゲットディレクトリに切り替えて、ファイルを正しい場所にアップロードできることを確認します。
ファイル転送の前に、 FTP_PWDを使用して現在のディレクトリを取得し、パスが正しいかどうかを確認します。
<span><span><span class="hljs-variable">$currentDir</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_pwd</span></span><span>(</span><span><span class="hljs-variable">$ftp_connection</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-variable">$currentDir</span></span><span>;
</span></span>FTPサーバーの宛先フォルダーに書き込みアクセス許可がない場合、 FTP_NB_CONTINUEがファイルを正常にアップロードできない場合があります。この問題は通常、共有ホスティング環境で発生します。
解決:
ターゲットフォルダーに正しい許可設定があることを確認してください。これは通常、755または777に設定できます(状況によって異なります)。
CPANELまたは同様のツールを介してサーバーを管理している場合は、ファイルマネージャーを介してフォルダーの権限を直接調整できます。
<span><span><span class="hljs-title function_ invoke__">ftp_chmod</span></span><span>(</span><span><span class="hljs-variable">$ftp_connection</span></span><span>, </span><span><span class="hljs-number">0777</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>);
</span></span>FTP_NB_CONTINUEは非ブロッキングですが、データ接続(つまり、ファイル転送に使用されるデータチャネル)がブロックされる場合があります。パッシブモード(PASV)接続を使用すると、ファイアウォールまたはその他のネットワーク制限によりデータ接続が失敗する可能性があります。
解決:
アクティブモードに切り替えて、ファイアウォールの制限をバイパスし、 FTP_PASV関数を使用してパッシブモードに切り替えてください。
<span><span><span class="hljs-title function_ invoke__">ftp_pasv</span></span><span>(</span><span><span class="hljs-variable">$ftp_connection</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>); </span><span><span class="hljs-comment">// アクティブモードを使用します</span></span><span>
</span></span>さらに、制限付きポートの使用を避けるために、FTPクライアントのポート構成を変更することもできます。
ファイル転送中にキャッシュされたデータが時間内に更新されない場合、ファイルのアップロードまたはダウンロード、または一貫性のないファイルコンテンツにつながる可能性があります。
解決:
ファイルを転送する前に、可能なキャッシュを閉じるか、 ftp_nb_putとftp_nb_get関数を使用してファイルを直接転送して、キャッシュ干渉を避けます。
PHPは、特にファイル転送が非常に大きい場合、リソースの制約によりファイル転送操作を中止する場合があります。一般的なリソースの制限には、最大実行時間、メモリ制限などが含まれます。
解決:
PHPの最大実行時間制限は、set_time_limit(0)によってキャンセルできます。
<span><span><span class="hljs-title function_ invoke__">set_time_limit</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// 最大実行時間制限をキャンセルします</span></span><span>
</span></span>メモリ制限の問題が発生した場合、 ini_set( 'memory_limit'、 '512m')でphpスクリプトのメモリ制限を増やすことができます。