通过命令行执行PHP

时间:2010-12-20 16:49:05

标签: php command-line

我希望能够通过带有$ _GET变量的命令行执行PHP 。我知道我可以使用exec执行此操作,但我想了解更多安全风险以及我应该注意哪些事项。我想传递的参数是从MySQL返回的 MySQL auto_incremented ID ,所以我不关心用户输入。但是,仅仅允许这种情况发生在安全性方面应该考虑什么?

脚本将接受订单ID并向客户发送电子邮件发票。这允许我从站点的多个部分执行此功能,只将代码保存在1个位置。

3 个答案:

答案 0 :(得分:2)

我认为你真的不需要从命令行执行此操作。创建一个PHP函数并将其包含在您的多个部分中:它会更快。每个例子:

function sendInvoice($orderId) {
    // do something
}

然后叫它:

include_once('send_invoice.inc.php');
sendInvoice(42);

这仍然允许代码重用以及维护代码的单一位置。

答案 1 :(得分:1)

为什么不能使用argv / argc?

$id = isset($argv[1]) ? (int)$argv[1] : (int)$_REQUEST['id'];

答案 2 :(得分:1)

对于cmdline脚本$argv就是答案。但你确实可以注入$_GET个变量。只需相应地预定义QUERY_STRING环境变量:

putenv("QUERY_STRING=id=$id");
exec("php script.php");

关于安全性,如果cmdline php脚本启动管理操作,它们在共享主机服务器上可能会更加令人担忧。但是你无能为力。严格遵守document_root中的cmdline脚本,并在可能的情况下应用文件或目录权限。