【问题标题】:How do I pass parameter from $_GET to shell_exec and run it on PHP CLI?如何将参数从 $_GET 传递给 shell_exec 并在 PHP CLI 上运行?
【发布时间】:2015-10-16 15:44:17
【问题描述】:

我需要将一些 $usertoken 值传递给 shell_exec 函数,以便从我的服务器执行具有此值的另一个 PHP 文件。

这是我的代码:

<?php
$usertoken= array( $_GET['usertoken'] );
$findme   = 'valid_device';
$pos = strpos($usertoken, $findme);

if ($pos === false) {
    echo "The string '$findme' was not found in the string '$usertoken'";
} else {
    echo " Device is valid ### $usertoken Continue to push_script  ### ";
    echo shell_exec('cd /mypath; /usr/local/bin/php -q push_script.php -q "{$usertoken}"');
    }
?>

push_script.php 正在等待 $_GET 到 $usertoken 值

如何将此参数传递给 PHP?

我从阅读的内容中了解到,我应该使用一些 parse_str() 和 $argv 的组合来将 $usertoken 解析为 PHP 脚本,但我不知道该怎么做。

我将不胜感激任何帮助

【问题讨论】:

标签: php


【解决方案1】:

您将在保留变量$argv中获得您的值

push_script.php $argv[1] 中,您将传递所需的参数,同时按照@Barmar 的指示交换引号。

【讨论】:

  • 嗨,Kamal,感谢您的建议,但我不明白如何使用 $argv 。我是否需要在push script.php 而不是$_get() 中替换它,还是另外?我还应该在执行脚本中添加一些东西吗?
  • @Abraham 你需要用$argv[1] 替换$_GET['usertoken'] .. 据我所知$_GET 将在http / https 下提供(可能更多,我不知道) ,我已经在我的回答中发布了指向 PHP 手册的链接以供参考。再次在这里php.net/manual/en/reserved.variables.argv.php 也看到这个帖子.. stackoverflow.com/questions/6763997/…
  • @Abraham 你可以print_r($argv),并查看所有参数,其中 0 索引将是你正在执行的文件 .. 或者如果你喜欢使用 $_GET .. 你可以执行你的脚本通过 curl 或 wget .. 像 `curl yourdomain.com/script_to_be_executed.php'
  • 谢谢它有效!当您想结合 https 请求并将参数传递给 PHP CLI 脚本时,这确实是一个很好的解决方案
【解决方案2】:

变量不会在单引号字符串内展开,只能在双引号字符串内展开,因此请交换引号。

echo shell_exec("cd /mypath; /usr/local/bin/php -q push_script.php -q '{$usertoken}'");

What is the difference between single-quoted and double-quoted strings in PHP?

另外,$usertoken 应该只是一个字符串,而不是一个数组,所以赋值应该是:

$usertoken = $_GET['usertoken'];

【讨论】:

  • 感谢 Barmar,我改为单引号,但仍然无法正常工作。该值被传递给 PHP 脚本,但随后脚本输出一个 reslut 错误,这意味着该值不正确。也许问题出在 shell_exec 语法上?
  • 从命令行运行php -q push_script.php -q 'token'是否有效?
  • shell_exec 看起来不错。您确定在push_script.php 之后需要额外的-q 吗?该参数被发送到脚本。
  • 从命令行运行php push_script.php 'token_number' 工作正常,但仍然是同样的问题 - PHP 结果有错误,这意味着由于某种原因字符串值未正确传递。是的,我不需要 -q
  • 好吧,请忽略我的最后一条评论,我以为您希望我运行第一个 php 脚本。的确,这很奇怪 - 从命令行运行 php push_script.php 'token' 会产生错误输出。顺便说一句,当使用 php?usertoken=XXX 通过网络运行 push_script 时工作正常。所以我不明白可能是什么问题?也许一些服务器配置?
猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 2016-11-20
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2012-09-07
相关资源
最近更新 更多