在php函数期间生成反馈。 (通过AJAX?)

时间:2013-12-19 16:45:54

标签: javascript php ajax

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';
}
?>

1 个答案:

答案 0 :(得分:1)

您可以使用ajax接收有关PHP脚本进度的反馈,您可以执行以下操作:

  • 创建一个HTML页面,通过ajax调用(或使用JQuery)调用初始PHP脚本进行ZIP文件处理。
  • 修改初始脚本以将数据添加到数据库事件表或将信息附加/编辑到物理文件(例如json)。
  • 编写javascript代码以查询将提供正在进行的操作状态的辅助PHP脚本(或文件)。

如果您使用数据库,则辅助脚本必须查询数据库,并向客户端提供有关zip文件操作的所有新信息。

总结:

  1. 包含调用初始php脚本的javascript的HTML页面
  2. HTML页面包含通过setInterval定期调用的函数,以查询提供状态信息的URL。
  3. 启动进程的PHP脚本包含将状态添加到数据库或文件的调用。
  4. 运行时返回算法状态/进度的PHP脚本。