我正在寻找一种检查目录中是否有新文件的方法。我可以用一些婴儿循环来做这个吗?当我说:
<?php
while (true) {
$files = glob("../example/*.txt");
$count_posts = $files !== false ? count($files) : 0;
if ($count_posts > 0) {
break;
print("WE DID IT!!!!!!!");
}
}
?>
发生了三件奇怪的事情:1。)页面将继续加载 - 我不能拥有2.)它不会打印“我们这样!!!!!!!!!” 3.)在有新文件之前,不会显示任何内容。我怎么能这样做?
答案 0 :(得分:1)
简单的答案是,如果不使用套接字和/或Javascript,就无法做到这一点。在整个页面完全加载之前,PHP不会返回任何信息,在这种情况下,在调用break子句之前不会显示任何信息。
我有一个单独的脚本,每X秒通过setTimeout和AJAX检查由javascript轮询的文件夹中的新文件。
答案 1 :(得分:1)
至于遍历目录以检查文件,请使用DirectoryIterator,或者如果存在RecursiveDirectoryIterator的子文件夹。如果glob语句返回false或0,则while循环将陷入无限循环。
例如:
$iterator = new DirectoryIterator('../example');
foreach ($iterator as $path) {
if ($path->isFile()) {
if (strpos($path->getFilename(), '.txt') !== false) {
print("WE DID IT!!!!!!!");
break;
}
}
或者使用递归目录迭代器..
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('../example'));
foreach ($iterator as $path) {
...
}
如果您需要将此作为后台任务运行,则需要使用AJAX,正如Ben建议的那样。通过网页的正常PHP请求旨在加载所有内容并将内容显示回页面。 AJAX请求是在Web上执行异步请求的唯一方法。见http://api.jquery.com/jQuery.ajax/