2015-04-03 18 views
1

所以這裏有一點點需要破解的東西。我有這個網頁執行一大組任務,最後,它重新啓動httpd來重新加載剛剛編輯的新httpd.conf。從PHP重新啓動httpd,臨死前的回顯頁面

  • 這沒有問題,但我想在服務器死亡並重新啓動之前顯示結果。
  • 原因是我最初製作了一個js按鈕來執行腳本,然後用「Wait ...」替換div的內容,當腳本結束時,它會填充div的內容在我們的例子中,PHP文件「完成」。 。
  • 由於我在最後添加了重新啓動,它只是一直等待。

我發現flush方法,並試圖如下,但沒有骰子

if (ob_get_level() == 0) ob_start(); 
echo "Finished."; 
ob_flush(); 
flush(); 
ob_end_flush(); 
mysqli_close($conn); 
$cmd= 'sudo /usr/sbin/apachectl restart'; 
exec($cmd); 
exit(); 

編輯::一些更多的信息

現在我認爲這個問題是不是PHP本身,而是JavaScript的。它看起來像這樣:

document.getElementById("infocr").innerHTML = "Wait..."; 
$.post("create.php", { 
user: targetuser 
} 
, function(datacr) { 
document.getElementById("infocr").innerHTML = "datacr"; 
$('#csf')[0].reset(); // To reset form fields 
wait=1; 
setTimeout(function(){wait=0;}, 5000); 
}); 

括號之間的東西永遠不會被調用,因爲php文件永遠不會「結束」。你能爲此提出任何解決方法嗎? 5秒計時器是爲了防止按鈕垃圾郵件

+2

用'graceful'重新啓動Apache,而不是蠻力的'restart'。 – deceze 2015-04-03 06:15:20

+0

@deceze精美的工作。這很好,謝謝。發佈一個完整的答案,所以我可以標記它 – aron9forever 2015-04-03 06:18:30

+1

只是'apachectl優雅'應該做的。 – deceze 2015-04-03 06:23:59

回答

2

在重新啓動httpd之前,您可以回顯所有內容。之後,你的php代碼將不會再被執行,因爲httpd服務暫時關閉。
一個解決方案是使用JavaScript setInterval()函數檢查某個URL,以檢查httpd是否再次運行,並且當您收到響應時,可以顯示一條消息,指示httpd已成功重新啓動。

+0

我有這個壽的幾個問題。服務器幾乎立即重新啓動,我將如何讓重新啓動之前不執行檢查?由於rr速度如此之快,我懷疑我能趕上404錯誤告訴JS它離線,然後在線 – aron9forever 2015-04-03 05:56:13

+0

那麼,你可以先等待幾秒鐘,然後開始檢查一個URL。例如,url應該返回一個帶有status = ok的json響應 – 2015-04-03 06:06:05