2012-09-15 44 views
0

我試圖運行一個背景PHP過程與shell_exec()作爲WordPress插件的一部分。背景PHP過程與shell_exec()作爲WordPress插件的一部分

這是樣本。

/* Plugin Name: Sample Background Process */ 

add_action('init', 'Sample_Background_Process');  
function Sample_Background_Process() { 
    $file = __DIR__ . '/log.html'; 
    $current = date('l jS \of F Y h:i:s A') . ': accessed<br />'; 
    file_put_contents($file, $current, FILE_APPEND); 
} 

它創建一個日誌中的插件文件夾,每當一個頁面獲取訪問其追加一些文本。

然後,我添加了這一行,shell_exec('php "' . ABSPATH . '/index.php" > /dev/null 2>/dev/null &');。所以後臺進程應該訪問該頁面並運行將文本附加到日誌文件的功能。但它似乎並沒有這樣做。我期望一個頁面加載在日誌文件中產生兩行。但它只會添加一行,這意味着後臺進程不會運行,或者WordPress不會執行任何操作,如果這樣調用。

add_action('init', 'Sample_Background_Process');  
function Sample_Background_Process() { 
    $file = __DIR__ . '/log.html'; 
    $current = date('l jS \of F Y h:i:s A') . ': accessed<br />'; 
    file_put_contents($file, $current, FILE_APPEND); 
    shell_exec('php "' . ABSPATH . '/index.php" > /dev/null 2>/dev/null &'); 
} 

我在做什麼錯?

路徑phpshell_exec()由於我在Windows服務器上測試而在我的實際腳本中被路徑改爲php.exe。它在其他PHP腳本中運行良好。

謝謝。

+0

你肯定安全模式是Windows服務器上禁用? –

+0

'if(ini_get('safe_mode'))'返回false。 – Teno

+0

嘗試打開錯誤報告並自行運行該單一行。這應該讓你知道發生了什麼。您可能還想打印出您傳遞給'shell_exec'的字符串並手動執行它。 –

回答

2

據我所知(據我所知)的/ dev/null的Windows中不存在 只是使用NUL ...例如

shell_exec('php "' . ABSPATH . '/index.php" > NUL &'); 
+0

它似乎工作。謝謝。我意識到它創造了一個無限的過程循環。 – Teno

+0

以及...無限循環不是我所例外:) – user1494162

+0

在Windows中使用shell_exec是一個壞主意 –