2012-07-20 307 views
1

下面的命令是一個適用於我的shell命令。從php運行shell命令

php -f /home3/kintest2/www/project/keygen_msql_adjuster.php

什麼,我想要做的是建立從一個php文件此命令運行。

任何提示,歡迎

+1

Here're two hints:['exec'](http://php.net/manual/en/function.exec.php),['shell_exec'] (http://www.php.net/manual/en/function.shell-exec.php)。 – Palladium 2012-07-20 14:46:19

+0

['shell_exec()'](http://php.net/manual/en/function.shell-exec.php) – jexact 2012-07-20 14:46:28

回答

0

我認爲你正在尋找shell_exec

echo shell_exec ("php -f /home3/kintest2/www/project/keygen_msql_adjuster.php"); 
+0

此代碼適用於任何其他命令。當我使用上面的shell命令時,它不會執行頁面似乎只是爲每個...加載的任何想法。 – 2012-07-20 14:59:18

+0

@CongoleseMedia可能是該文件或文件夾的權限問題,或者可能是環境問題,例如啓用了safe_mode。 – Quantastical 2012-07-20 17:43:20

1

您可以使用這取決於你想與你啓動進程做什麼backtickssystemshell_execpopen, 。

+0

我想從另一個PHP文件執行PHP。該文件所做的是隻更新滿足某些條件的一個數據庫記錄。但我希望文件在循環中連續執行此文件 – 2012-07-20 15:14:32

+0

是否想到某種預定作業,即每隔幾分鐘/幾小時就會啓動一次?如果你是,看看http://en.wikipedia.org/wiki/Cron – complex857 2012-07-20 15:29:23

1

出了什麼問題:

include('/home3/kintest2/www/project/keygen_msql_adjuster.php'); 

還是有要火了一個全新的PHP解釋器的實例特別的原因?

我會注意到一個很好的理由而不是使用include是因爲其中聲明的任何東西都會污染你當前的實例的命名空間。

另一方面,撥打shell_exec或類似的可能是一個海量的安全漏洞。但是,如果您的代碼運行在可能無關緊要的受限環境中。

+0

我想從另一個PHP文件執行PHP。該文件所做的是隻更新滿足某些條件的一個數據庫記錄。但我想要文件連續執行這個文件在循環 – 2012-07-20 15:15:43

+0

聽起來,嗯,次優... – Alnitak 2012-07-20 15:39:24

0

你也可以考慮使用命令運行庫,妥善處理錯誤和東西: https://github.com/kamermans/command

然後你就可以像這樣運行程序:

use kamermans\Command\Command; 
$cmd = Command::factory('php') 
    ->option('-f', 'keygen_msql_adjuster.php') 
    ->setDirectory('/home3/kintest2/www/project') 
    ->run(); 

,或者更簡單地說:

use kamermans\Command\Command; 
$cmd = Command::factory('php -f /home3/kintest2/www/project/keygen_msql_adjuster.php'); 

與PHP的內置方法,如果命令失敗,此方法將拋出一個PHP異常,您可以TH如果需要可以捕獲和處理:

use kamermans\Command\Command; 
use kamermans\Command\CommandException; 

$cmd = Command::factory('php') 
    ->option('-f', 'keygen_msql_adjuster.php') 
    ->setDirectory('/home3/kintest2/www/project'); 

try { 
    $cmd->run(); 
} catch (CommandException $e) { 
    die("The command failed: ".$e->getMessage()."\n"); 
}