PHP& FTP同步冻结所有站点

时间:2013-10-16 06:38:03

标签: php ftp

我有页面,其中有很多网站,有源代码,我需要将它们同步到ftp,一个网站,有自己的ftp。我正在使用FTPsync类。它工作得很好,文件转到FTP,但问题是当我点击“将文件推送到FTP”,然后我的主站点被冻结,直到ftp同步过程完成,有人能对我说,有什么问题?为什么会这样,也许提供我怎样才能解决这个问题。感谢。

如果需要FTPsync类源代码,请告诉我我将在此处添加。

1 个答案:

答案 0 :(得分:0)

如果您在同一个请求中执行FTP同步过程,那么您的页面将需要很长时间才能加载,并且可能会干扰其他请求。

建议的方法通常是创建一个作业队列,在该队列中,您可以使用存储系统(数据库等)或消息队列来排队作业,并编写另一个脚本来执行同步。

如果您想要一种更简单的方法来解决这个问题,您可以

  1. 使用ignore_user_abort()flush切断用户连接并继续在后台同步
  2. 在执行操作的页面中嵌入框架并显示进度条。然后在同步结束时执行window.parent.location = 'done-syncing'
  3. 对于1.,这是一个例子:

    <?php
    ignore_user_abort(true);
    ob_start();
    echo 'Syncing...';
    ob_end_flush();
    flush();
    
    // Perform the FTP syncing here
    

    对于2.,它将跨越多个页面。假设单击“将文件推送到FTP”会转到页面ftp_sync_start.php,然后执行真正同步的文件为ftp_do_sync.php,这里有一些示例:

    ftp_sync_start.php

    <!-- You can put some sort of progress bar here -->
    <iframe src="ftp_do_sync.php?<?php // Pass some parameters here ?>"></iframe>
    

    ftp_do_sync.php

    <?php
    // Just do the syncing here, then at the end
    echo "<script>window.parent.location = 'ftp_sync_done.php';</script>";
    

    这些解决方案虽然不太具扩展性。