我打電話給一個PHP系統調用一個Java程序。 Java程序需要一段時間才能運行,但最終會生成一個已知文件名的PDF文件。如何檢查一個文件,直到它存在,然後提供一個鏈接到它
我需要不斷檢查這個文件,直到它存在,然後提供一個鏈接。我假設有一個while循環會涉及,但我不希望它太耗費資源。這樣做的好方法是什麼?
我打電話給一個PHP系統調用一個Java程序。 Java程序需要一段時間才能運行,但最終會生成一個已知文件名的PDF文件。如何檢查一個文件,直到它存在,然後提供一個鏈接到它
我需要不斷檢查這個文件,直到它存在,然後提供一個鏈接。我假設有一個while循環會涉及,但我不希望它太耗費資源。這樣做的好方法是什麼?
基本上,你這樣做是正確
while (!file_exists($filename)) sleep(1);
print '<a href="'.$filename.'">download PDF</a>';
的睡眠給了兩次檢查之間的1秒鐘,這樣如果你需要發送回瀏覽器也不會強調你白白
這將完成這項工作,但您可以指定一個額外的超時時間。
while(!file_exists($pathToFile))
{
sleep(1);
}
CPU ,你應該調查一下使用setInterval計時器的AJAX調用和檢查文件是否存在的PHP腳本。您可以通過兩種方式來實現:
flush()
HTML回包括javascipt的啓動使用AJAX的瀏覽器投票端輪詢過程中的瀏覽器,你的PHP腳本的AJAX功能來處理投票。
如果flush()
不起作用,那麼您應該返回您的PHP腳本的HTML,然後再啓動Java進程。在該代碼中放入兩個AJAX調用。一個啓動實際的Java進程,一個啓動輪詢服務來查找文件。
長期運行的腳本可能會超時的瀏覽器之前,你可以從你的Java應用程序,這就是爲什麼你可能需要瀏覽器從您的Java進程異步工作的響應。
在另一方面,如果這是一個純粹的PHP腳本運行或Java過程不到一個典型的瀏覽器超時,你可以使用類似:
$nofileexists = true;
while($nofilexists) { // loop until your file is there
$nofileexists = checkFileExists(); //check to see if your file is there
sleep(5); //sleeps for X seconds, in this case 5 before running the loop again
}
你沒有,如果這提將是一個高流量的呼叫(對於大量的公共用戶)或報告類型的應用程序。如果流量高,我會推薦AJAX路由,但是如果流量很低,那麼上面的代碼。