2012-07-20 271 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"); 
}