2011-04-02 16 views
0

我正在尋找一種方法來檢查目錄中是否有新文件。我可以用一些嬰兒循環來活嗎?當我說:如何使用PHP運行「背景」嬰兒循環?

<?php 
     while (true) { 
      $files = glob("../example/*.txt"); 
      $count_posts = $files !== false ? count($files) : 0; 
      if ($count_posts > 0) { 
       break; 
      print("WE DID IT!!!!!!!"); 
      } 
     } 
     ?> 

三個奇怪的事情發生了:1)該網頁將繼續加載 - 我不能有二)它不會打印「我們做到了!!!!!!! !!」和3.)直到有新文件纔會顯示內容。我怎樣才能做到這一點?

+0

我的想法是,將內部部分(無循環)放入一個函數中,並在頁面加載後調用它,並且每次更改可以調用它爲true或每隔幾秒(使用JS) ...因爲你需要把它放在一個不同的文件中,並從你的文件中訪問它。 – fingerman 2011-04-02 09:03:39

+0

我怎麼能這樣做?至於從不同的文件訪問它? – 2011-04-02 09:35:03

回答

1

只要通過目錄循環檢查文件使用DirectoryIterator,或者如果有子文件夾RecursiveDirectoryIterator。 while循環將在一個無限循環被抓住,如果水珠語句返回false或0

例如:

$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) { 
    ... 
} 

如果您正如Ben所建議的那樣,需要將此作爲後臺任務來運行,以便使用AJAX。通過網頁的正常PHP請求旨在加載所有內容並將內容顯示回頁面。 AJAX請求是在Web上執行異步請求的唯一方法。請參閱http://api.jquery.com/jQuery.ajax/

+0

我怎樣才能做到這一點與Ajax?它沒有在鏈接中提及它。 – 2011-04-02 09:28:38

+0

AJAX基本上通過通過JavaScript向服務器發送異步HTTP請求(即PHP)來工作。然後PHP返回一些東西(通常是一個字符串或者JSON,它更靈活一點),然後你的JavaScript做了一些事情(即更新頁面的HTML)。您可以閱讀關於如何開始使用jQuery的教程,其中包括關於在http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery#Rate_me:_Using_Ajax使用AJAX與PHP的部分 – simonrjones 2011-04-02 09:45:54

1

簡單的答案是,你不能使用套接字和/或Javascript來做到這一點。在整個頁面完全加載之前,PHP不會返回任何信息,在這種情況下,除非調用break子句,否則不會顯示任何信息。

我想要一個單獨的腳本來檢查由javascript每隔X秒通過setTimeout和AJAX輪詢的文件夾中的新文件。

+0

你可以給我看一個例子嗎? – 2011-04-02 09:29:09

+1

如果您使用flush()命令並且服務器不緩衝內容,PHP可以返回數據。 http://example.preinheimer.com/flush.php – preinheimer 2011-04-02 14:04:55