通过命令行执行PHP
我希望能够通过带有$\u GET变量的命令行执行PHP。我知道我可以用通过命令行执行PHP,php,command-line,Php,Command Line,我希望能够通过带有$\u GET变量的命令行执行PHP。我知道我可以用exec来做到这一点,但我想了解更多的安全风险以及我应该注意的事项。我要传递的参数是从MySQL返回的一个MySQL自动递增ID,因此我不关心用户输入。但是,仅仅允许这种情况发生,在安全方面应该考虑什么 脚本将接受订单ID并向客户发送电子邮件发票。这使我可以从站点的多个部分执行此功能,仅在一个位置维护代码。为什么不能使用argv/argc $id = isset($argv[1]) ? (int)$argv[1] : (int
exec
来做到这一点,但我想了解更多的安全风险以及我应该注意的事项。我要传递的参数是从MySQL返回的一个MySQL自动递增ID,因此我不关心用户输入。但是,仅仅允许这种情况发生,在安全方面应该考虑什么
脚本将接受订单ID并向客户发送电子邮件发票。这使我可以从站点的多个部分执行此功能,仅在一个位置维护代码。为什么不能使用argv/argc
$id = isset($argv[1]) ? (int)$argv[1] : (int)$_REQUEST['id'];
为什么不能使用argv/argc
$id = isset($argv[1]) ? (int)$argv[1] : (int)$_REQUEST['id'];
我不认为您真的需要从命令行执行此操作。创建一个PHP函数并将其包含在多个部分中:这样会更快。每个示例:
function sendInvoice($orderId) {
// do something
}
那就叫它:
include_once('send_invoice.inc.php');
sendInvoice(42);
这仍然允许代码重用和一个地方来维护代码。我认为您不需要从命令行执行此操作。创建一个PHP函数并将其包含在多个部分中:这样会更快。每个示例:
function sendInvoice($orderId) {
// do something
}
那就叫它:
include_once('send_invoice.inc.php');
sendInvoice(42);
这仍然允许代码重用和一个地方来维护代码。对于cmdline脚本,
$argv
就是答案。但是您确实可以插入$\u GET
变量。只需相应地预先定义QUERY\u字符串
环境变量:
putenv("QUERY_STRING=id=$id");
exec("php script.php");
关于安全性,如果共享托管服务器上的cmdline php脚本启动管理操作,它们可能会更令人担忧。但你对此无能为力。严格禁止cmdline脚本进入文档根目录,并尽可能应用文件或目录权限。对于cmdline脚本,
$argv
就是答案。但是您确实可以插入$\u GET
变量。只需相应地预先定义QUERY\u字符串
环境变量:
putenv("QUERY_STRING=id=$id");
exec("php script.php");
关于安全性,如果共享托管服务器上的cmdline php脚本启动管理操作,它们可能会更令人担忧。但你对此无能为力。严格禁止在文档根目录中使用cmdline脚本,并尽可能应用文件或目录权限。+1更好的解决方案,然后使用shell脚本执行此类任务+1更好的解决方案,然后使用shell脚本执行此类任务