0

我正在用 php 组合一个搜索引擎,它会遍历一些目录并在运行时回显过滤后的结果。

我的问题是,在所有搜索完成之前不会执行回显,导致页面在脚本完成之前保持空白。

这是正常的吗?如果是这样,我怎样才能在调用 echo 时显示搜索结果?

我还将最终将结果中的图像写入屏幕。可以调用 JS document.write 函数而不是呼应所有内容,而是通过同时利用客户端和服务器端来加快速度吗?

编辑:这是迭代的代码。我有一个标记系统,但该部分目前已被注释掉......

function checkTags($dir, $search){
  global $tag;
  $filesInDir = array_map('strtolower', scandir($dir)); // lower case the files
  $filterOut = array('.','..');
  $filesInDir = array_diff($filesInDir, $filterOut); // get rid of the current '.' and parent '..' values
             //   print_r($filesInDir);


  foreach($filesInDir as $file) {
    if($file == $tag) {  // found a tag
      echo 'found tag: '.$file.'<br>';
   /*   $tagDir = dirname($tag);
      $tagContents = strtolower(file_get_contents($file).'<br>'.$tagDir); // adding full path to include parent dirs in tag searching

      foreach($search as $s){
        if(strpos($tagContents, $s) !== false){ // the tag has a search word
          //getFiles($tagDir);
        }
      }  */
    }
    elseif(is_dir($dir.'/'.$file) !== false) { //is a folder, so try in there
      //print_r($file);
      echo 'found dir: '.htmlspecialchars($file).'<br>';
      checkTags($dir.'\\'.$file, $search);
    }
  }
}

谢谢

4

3 回答 3

5

您想将输出刷新到客户端,请使用 PHP 的flush()函数。

也就是说,如果您在页面加载时进行复杂的处理,那将是一种糟糕的用户体验。它更复杂,但是如果你向用户提供一些东西,即使它只是一个空但完整的模板,然后用 AJAX 异步拉入昂贵的数据,你会提供一个更好的产品,正如快乐事故所建议的那样。

于 2013-03-22T19:57:00.347 回答
1

我想从@dimo414 的参考中引用一些东西

一些服务器,特别是在 Win32 上,仍然会缓冲脚本的输出,直到它在将结果传输到浏览器之前终止。

Apache 的服务器模块(如 mod_gzip)可能会自己进行缓冲,这将导致 flush() 不会导致数据立即发送到客户端。

甚至浏览器也可以在显示之前缓冲它的输入。例如,Netscape 会缓冲文本,直到它接收到行尾或标记的开头,并且在看到最外层表格的标记之前不会呈现表格。

某些版本的 Microsoft Internet Explorer 仅在收到 256 字节的输出后才开始显示页面,因此您可能需要在刷新之前发送额外的空格以使这些浏览器显示页面。

这基本上意味着无法保证 flush() 会实际向客户端发送中间数据,或者客户端会显示它们。

如果要测试 flush() 是否有效,请禁用任何可能导致服务器缓冲的 apache 模块。即使这样,浏览器也可能会等到页面完成加载,或者已经加载了一定数量的字节,所以最可靠的测试方法是使用 netcat。

根据我的经验,客户端在脚本结束之前看到输出的唯一原因是因为我搞砸了,并且在某处放置了一个带有回显的无限循环。在这种情况下,浏览器将冻结,直到 apache 决定终止脚本。正如其他人所说, AJAX是实现这一目标的方式。

于 2013-03-22T21:05:15.127 回答
1

绝对不是 document.write,但肯定会研究 JavaScript 和 Ajax 技术来实现您的目标。

查看http://en.m.wikipedia.org/wiki/Ajax_(programming)了解 Ajax 的概述。

如果您是 JavaScript 的初学者,可能值得一看 jQuery 库。特别是 .ajax 方法。

http://jquery.com/

http://api.jquery.com/jQuery.ajax/

于 2013-03-22T20:01:17.627 回答