为什么我的PHP脚本间歇性地无法通过FTP上传文件?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了为什么我的PHP脚本间歇性地无法通过FTP上传文件?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我编写了一个 PHP脚本来从电子商务商店导出订单,将它们保存在XML文件中,然后将它们复制到远程FTP文件夹.另一家公司监控该FTP文件夹以获取文件并使用它们来完成订单.

出于某种原因,脚本只会在某些时候上传文件,而我正在寻找调试/到达这个非常困难底部.这是违规脚本的主要部分:

if ($ftp_conn = ftp_connect($ftp_server)) {
    if ($login = ftp_LOGin($ftp_conn,$ftp_user,$ftp_pass)) {

        $filename = time() . '-orders.xML';
        ftp_pasv($ftp_conn,true);

        if (ftp_put($ftp_conn,$filename,$xmlPath,FTP_ASCII)) {
            $logString .= ' - Successfully run';
            ftp_close($ftp_conn);
        } else {
            $logString .= ' - Failed to upload file';
            $error = error_get_last();
            $logString .= ' - ' . $error['message'];
            ftp_close($ftp_conn);
        }
    } else {
        $logString .= ' - Failed to log in to server';
        ftp_close($ftp_conn);
    }
} else {
    $logString .= ' - Failed to connect to server';
};

我将$logString变量保存到文本文件中.我实际看到的唯一错误是:

ftp_put(): TyPE set to A

我无法在网上找到任何关于这意味着什么或是否应该导致问题的内容.

FTP连接日志也没有帮助.这是你无法运行时看到的全部内容

"PASS (hidden)" 230 -
"TYPE A" 200 -

有时候它有效,有时则不然.它失败时没有明显的模式.大型和小型XML文件都有效且失败.

显然,服务器可以处理3个同时连接,理论上应该只有2个,所以我不能看到这个问题.

PHP脚本是否正常,如果是这样,我还能做些什么来尝试记录文件无法上传时会发生什么?

解决方法

无论这被视为修复还是躲避工作,我都会留给您.

我最好的猜测是我连接的1and1 FTP服务器存在问题,因为上面的脚本在其他服务器上没有问题.

我尝试将ftp_put模式切换到FTP_BINARY,但没有区别.

我通过循环整个函数解决这个问题,直到它成功完成.即:

$uploaded = false;
$tries = 0;
$filename = time() . '-orders.xml';

while (!$uploaded && $tries <= 5) {
    $tries++;
    if ($ftp_conn = ftp_connect($ftp_server)) {
        if ($login = ftp_login($ftp_conn,$ftp_pass)) {
            $logString .= ' - Attempt ' . $tries;

            ftp_pasv($ftp_conn,true);
            ftp_set_option($ftp_conn,FTP_TIMEOUT_SEC,120);

            if (ftp_put($ftp_conn,FTP_BINARY)) {
                $logString .= ' - Successfully run';
                $uploaded = true;
                ftp_close($ftp_conn);
            } else {
                $logString .= ' - Failed to upload file';
                $error = error_get_last();
                $logString .= ' - ' . $error['message'];
                ftp_close($ftp_conn);
            }
        } else {
            $logString .= ' - Failed to log in to server';
            ftp_close($ftp_conn);
        }
    } else {
        $logString .= ' - Failed to connect to server';
    };
};

如果出现真正错误的情况,我将5美元试探上限. CRON作业经常运行,如果它不能工作一次,它可以工作另一个.

到目前为止,这一点运作良好.上传文件所需的尝试次数最多为4次,并且完全无法上传文件.所以它正在工作,我可以放松一下.

脚本宝典总结

以上是脚本宝典为你收集整理的为什么我的PHP脚本间歇性地无法通过FTP上传文件?全部内容,希望文章能够帮你解决为什么我的PHP脚本间歇性地无法通过FTP上传文件?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。