2012-06-28 96 views
0

我已經編寫了php程序並上傳到服務器上。我想無限地運行這個程序。我的節目源是這樣的:如何在我的服務器上無限運行php程序

<?php 
while (1<2){ 
make something; 
} 
?> 

當然,如果我將打開我的瀏覽器將運行該頁面,但如果我將關閉我的電腦將停止工作。如何在無需在任何瀏覽器中打開的情況下無限運行此程序。

+0

也許嘗試的平等? –

+0

In * nix'<?php if(isset($ _ SERVER ['HTTP_HOST'])){exec(「php」.__ FILE__。「>/dev/null 2> &1 &"); exit;} // Do stuff here。基本上,當通過瀏覽器調用'exec()'並釋放與新進程的關聯 – DaveRandom

+1

PHP並沒有真正設計爲無限循環運行,在大多數服務器上,一個最大執行時間(默認爲30秒),假設一個腳本在該點發生故障並關閉後仍然運行,而且,您的技術會在一個內核上導致100%的CPU使用率,因爲它會在無盡的時間內執行一次計算你可能想看看你的應用程序需要像這樣運行的不同技術(node.js也許),你需要使用不同的方法從busywaiting(也許sleep()) – GordonM

回答

3

在命令行中運行或作爲cronjob運行;您還可以檢查作出PHP文件系統守護進程:

http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/

使用PHP作爲一個守護進程,您可以使其無限期運行,但您可能必須將其定期復位,以確保它不堆棧內存。

順便說一句:

while(true) 

也沒有工作。

+0

即使在循環sleep()中花費了一些時間,一個while(true)循環也是一個非常糟糕的主意。 PHP只是不適合這種類型的工作,而不是將問題看作是釘子,而應該找到比PHP錘子更適合的工具。 – GordonM

+1

@GordonM我知道,但它和'1 <2''一樣,我不建議他有更好的選擇,我只是給他一個答案。 – Luceos

0

您可以使用popen()啓動腳本,該腳本啓動新的命令行過程。所以你可以用所需的腳本啓動一個CLI PHP。

4

這樣做:

<?php 
    set_time_limit(0); 
    ignore_user_abort(true); 
    while(true) { 
     //Do something 
    } 
?> 

但它是一個非常非常非常糟糕的主意,這樣做,如果沒有一個非常非常非常好的理由。 你可能會在CLI中運行這種腳本,並使用SIGINT或SIGKILL來確保在不重新啓動Apache服務器的情況下停止腳本......(爲什麼我只是解釋它?不要這麼做,這很危險...... )

+0

我不知道我是否應該告訴他如何去做DV,或者告訴他爲什麼他不應該用UV。 – GordonM

0

我遇到了在linux服務器上無限運行java程序的同樣的問題。

我用Linux的「屏幕」命令解決了這個問題,說明發現here

1

你可以試試這個 -

<?php 
    while(1) { 
     "some code" 
    } 
?> 
相關問題