-1

我有一个页面,其中有很多站点,带有它们的源代码,我需要将它们同步到 ftp,一个站点,有自己的 ftp。我正在使用 FTPsync 类。它工作得很好,文件将发送到 FTP,但问题是当我点击“将文件推送到 FTP”时,我的主站点被冻结,直到 ftp 同步过程完成,谁能告诉我,有什么问题吗?为什么会发生这种情况,也许提供我该如何解决这个问题。谢谢。

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

4

1 回答 1

0

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

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

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

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

对于 1.,这是一个示例:

<?php
ignore_user_abort(true);
ob_start();
echo 'Syncing...';
ob_end_flush();
flush();

// Perform the FTP syncing here

对于 2.,它将跨越多个页面。假设点击“Push files to 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>";

不过,这些解决方案的可扩展性不太高。

于 2013-10-16T08:33:26.753 回答