2012-10-15 119 views
1

在這裏我寫了關於我的流程的詳細信息。PHP exec()一次又一次地重複執行相同的腳本

我在同一主機上做了一個Ajax請求。 AJAX致電saveUser.php

saveUser.php,我已包含Common.php

Common.phpcreateFile1()createFile2()功能。

createFile1()函數只是創建一個sample1.php爲另一個目的。

in createFile2(),我正在創建一個文件sample2.php並執行exec('php /home/public/sample2.php > /dev/null &');命令來執行該文件。

我打電話給createFile1()createFile2()函數分別從saveUser.php這是由AJAX請求調用。

因爲我已經設置了exec命令在命令結尾處由'&'在後臺運行,它在返回時沒有等待響應,並且一切順利。

但是,當我在我的服務器上檢查時,這些文件sample1.php和sample2.php一次又一次地被創建。似乎所有這些saveUser.php操作都會一再執行,直到我停止SSH的sample2.php進程。

我檢查了進程列表,每次'php /home/public/sample2.php'有new process_id,所以它確認它一次又一次地執行。如果我刪除了exec()的代碼並從SSH執行這個sample2.php,它按預期工作,沒有這樣的問題。

請問我最近怎麼了?服務器配置有任何問題,我使用的是hostgator共享帳戶。

此外,我還包括Common.php文件在sample2.php也,通知情況下,它可以幫助它。

感謝您的幫助提前。

saveUser.php代碼

include_once dirname(__FILE__).'/Common.php'; 

createFile1(); 

createFile2(); 

echo 'saved successfully!'; 

的common.php代碼

function createFile1() 
     { 
       $template = file_get_contents('sendDmTemplate.php'); 

       $serviceFp = fopen('sendDmFiles/sample1.php',"w"); 
       fwrite($serviceFp , $fileContent); 
       fclose($serviceFp); 
     } 

     function createFile2() 
     { 
       $fileContent = file_get_contents(dirname(__FILE__).'/sampleFileTemplate.php'); 

       $serviceFp = fopen('sample2.php',"w"); 
       fwrite($serviceFp , $fileContent); 
       fclose($serviceFp); 

       exec('php '.dirname(__FILE__).'/sample2.php > /dev/null &'); 
     } 

sample2.php代碼

include_once dirname(__FILE__).'/Common.php'; 
echo 'hi'; 
+0

也許嘗試'include_once' /'require_once'? –

+0

感謝David,我正在使用include_once來包含任何文件。 –

+0

您能否檢查saveUser.php上沒有多個AJAX調用? –

回答

1

這同樣的事情發生在我身上。我試圖讓一個php腳本在另一個php腳本上調用exec(),但由於一些奇怪的原因,它只是exec()本身再次創建一個無限循環。目前接受的答案沒有讓我到任何地方,但我能夠通過指定一個絕對路徑來實現它。

所以,相反的

exec('php /home/public/sample2.php > /dev/null &'); 

這將是

exec('/usr/local/bin/php /home/public/sample2.php > /dev/null &'); 
1

章eck如下:

1)你確定你沒有多次調用你的腳本saveUser.php嗎? Mayby是javascript XHR中某處的一個codingerror?通過查看(apache?)日誌來檢查這一點。

2)你確定你的PHP執行沒有-q?我使用php -q pathtoscript。PHP

3)如果沒有1或2:郵政saveUser.php

這裏(或地方)

編輯代碼:我看到你的問題。您創建的文件再次包含common.php,並再次執行該文件。等< - 錯的糟糕。我寫得太早了。現在再看一遍。

4)是否有可能使用一些重定向到saveUser.php的錯誤處理?

編輯:

5)有可能發生的事實,你是其中正在執行與include_once組合命令本身的文件有問題,但我不知道。你可以簡單地通過調整sampleFileTemplate.php來改變你的sample2.php內容。創建一個common2.php(與common.php具有相同的內容),並使用該內容。你測試驅動器的設置並報告回來嗎?

+0

嗨Erwin,檢查訪問日誌,沒有任何多重請求的問題。也嘗試使用-q,它也沒有解決問題。我在問題本身上粘貼我的代碼。等待。 –

+0

嗨@Erwin,更新了有問題的代碼,請看看它。 –

+0

嗨Erwin,但Common.php中的代碼在函數中,所以函數不應該被自動調用,不是嗎? –

相關問題