我有一个页面,其中有很多站点,带有它们的源代码,我需要将它们同步到 ftp,一个站点,有自己的 ftp。我正在使用 FTPsync 类。它工作得很好,文件将发送到 FTP,但问题是当我点击“将文件推送到 FTP”时,我的主站点被冻结,直到 ftp 同步过程完成,谁能告诉我,有什么问题吗?为什么会发生这种情况,也许提供我该如何解决这个问题。谢谢。
如果需要 FTPsync 类源代码,请告诉我我会在此处添加。
如果您在同一个请求中执行 FTP 同步过程,那么是的,您的页面将需要很长时间才能加载,并且还可能会干扰其他请求。
这样做的建议方法通常是创建一个作业队列,您可以在其中使用存储系统(数据库等)或消息队列来对作业进行排队,并编写另一个脚本来执行同步。
如果你想要一个更简单的方法来解决这个问题,你可以
ignore_user_abort()
和flush
切断用户连接并在后台继续同步 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>";
不过,这些解决方案的可扩展性不太高。