Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过命令行执行PHP_Php_Command Line - Fatal编程技术网

通过命令行执行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

我希望能够通过带有$\u GET变量的命令行执行PHP。我知道我可以用
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脚本执行此类任务