我有页面,其中有很多网站,有源代码,我需要将它们同步到ftp,一个网站,有自己的ftp。我正在使用FTPsync类。它工作得很好,文件转到FTP,但问题是当我点击“将文件推送到FTP”,然后我的主站点被冻结,直到ftp同步过程完成,有人能对我说,有什么问题?为什么会这样,也许提供我怎样才能解决这个问题。感谢。
如果需要FTPsync类源代码,请告诉我我将在此处添加。
答案 0 :(得分:0)
如果您在同一个请求中执行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.,它将跨越多个页面。假设单击“将文件推送到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>";
这些解决方案虽然不太具扩展性。