Hello编程员你好!
我有一个PHP脚本,可以保存从表单传递到压缩存档的URL,工作正常
唯一的麻烦是当用户在选择了很多网址后提交表单时,用户必须等待一段时间,而php脚本会执行它的工作。
我想使用ajax在每个url被添加到它的foreach循环中的zip之后得到一种详细的反馈,并且如果它遇到php错误也会标记(如果其中一个url是404页面,它当前会这样做) 。)
我已经尝试过几次AJAX测试,但没有得到任何结果
这甚至可能吗?
我的想法是foreach循环将通过AJAX作为外部php脚本运行,并在成功时将其数据传递回此脚本......或者可能有更好的方法。
任何帮助将不胜感激!
<?php
$dir = "archive/";
$site = 'http://domain.com/';
$urls = array($site);
$zipfile = 'archive-'.date('Ymd_His').'.zip';
$zip = new ZipArchive;
$newzip = $zip->open($zipfile, ZipArchive::CREATE);
if (isset($_POST['urls'])){$urls = $_POST['urls'];}
if ($newzip === TRUE) {
foreach ($urls as $url) {
$file = file_get_contents($url);
$filename = "index.html";
$namer = str_replace($site, '', $url);
if ($namer != "") {$filename = $namer;}
$zip->addFromString($dir.$filename, $file);
}
$source = "assets/";
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
foreach ($files as $file) {
$file = str_replace('\\', '/', $file);
if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
continue;
if (is_dir($file) === true){
$zip->addEmptyDir($dir.str_replace($source . '/', '', $file . '/'));
}
else if (is_file($file) === true){
$zip->addFromString($dir.str_replace($source . '/', '', $file), file_get_contents($file));
}
}
$zip->close();
echo "Generated <a href='$zipfile'>$zipfile</a>";
} else {
echo 'failed';
}
?>
答案 0 :(得分:1)
您可以使用ajax接收有关PHP脚本进度的反馈,您可以执行以下操作:
如果您使用数据库,则辅助脚本必须查询数据库,并向客户端提供有关zip文件操作的所有新信息。
总结:
setInterval
定期调用的函数,以查询提供状态信息的URL。