The return value of ftp_nb_continue can be FTP_FINISHED or FTP_FAILED, indicating whether the transfer has been completed. If it returns FTP_FAILED, it means the transfer failed. If it returns FTP_FINISHED, the transfer has been successfully completed. However, in some cases, you may encounter abnormal return values.
Solution:
<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">"Transfer failed: "</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>
When using ftp_nb_continue for file transfers, an improperly set FTP timeout may lead to connection timeouts, especially during large file transfers.
Solution:
<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">// Set timeout to 90 seconds</span></span><span>
</span></span>
Sometimes the FTP server may unexpectedly close the connection during a transfer, causing ftp_nb_continue to return a FTP_FAILED error.
Solution:
<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>
Path errors are another common issue. Make sure the upload and destination paths are correct and free of typos.
Solution:
<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">"Current directory: "</span></span><span> . </span><span><span class="hljs-variable">$currentDir</span></span><span>;
</span></span>
If the target folder on the FTP server lacks write permissions, ftp_nb_continue may fail to upload files successfully. This issue often occurs in shared hosting environments.
Solution:
<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 is non-blocking, but the data connection (used for file transfers) may still be blocked. When using passive mode (PASV), firewalls or network restrictions may cause the data connection to fail.
Solution:
<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">// Use Active Mode</span></span><span>
</span></span>
If cache data is not refreshed promptly during transfers, it may result in incomplete uploads/downloads or inconsistent file contents.
Solution:
PHP may terminate file transfers due to resource limitations, especially for very large files. Common limitations include maximum execution time and memory limits.
Solution:
<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">// Remove maximum execution time limit</span></span><span>
</span></span>