【问题标题】:Passing a value from Bash script to PHP将值从 Bash 脚本传递到 PHP
【发布时间】:2018-02-27 17:17:03
【问题描述】:

在 Bash 脚本中,我称之为类似的东西

# !/bin/bash
output=$(curl -L -H "Authorization: token MY_TOKEN" https://MY_GITHUB_ENTERPRISE/api/v3/repos/USER_NAME/REPO/pulls/123/files)
echo $output

我从输出中收到一个字符串。我想将此字符串传递给 php 代码以使用 json_decode 函数。我该怎么办?

我将像这样在 PHP 部分编写代码。可以吗?很抱歉这个麻木的问题,因为我是 Bash 脚本和 PHP 的新手

#!/usr/bin/php
$json = json_decode($DATA_FROM_CURL, true);
// Some logic in php

// continue with bash script
#!/usr/bin/bash
echo ABC

**注意:我必须在一个 Bash 脚本文件中编写所有代码。

更新 1 感谢 Felipe Valdes 的建议,我像这样更新了我的代码。但是,我得到了回报

{"message":"Bad credentials","documentation_url":"https://developer.github.com/enterprise/2.8/v3"}

我的代码:

#!/usr/bin/php
<?php
// create curl resource 
$ch = curl_init();
$TOKEN = 'abclaldslsl';

$header = array();
$header[] = 'Content-length: 0';
$header[] = 'Content-type: application/json';
$header[] = 'Authorization: token'.TOKEN;

// set url 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, "https://MY_GITHUB_ENTERPRISE/api/v3/repos/USER_NAME/REPO/pulls/123/files");

//return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// $output contains the output string 
$output = curl_exec($ch);

// close curl resource to free up system resources 
curl_close($ch);

print_r($output);
?>

【问题讨论】:

    标签: php bash github


    【解决方案1】:

    您在 TOKEN 变量之前忘记了 $

    您的脚本可能如下所示:

    #!/usr/bin/php
    <?php
    // create curl resource 
    $ch = curl_init();
    
    $host = 'https://MY_GITHUB_ENTERPRISE'; // your host
    $path = "/api/v3/repos/USER_NAME/REPO/pulls/123/files"; // your path
    $access_token = 'abclaldslsl'; // your access token
    
    // set url 
    curl_setopt($ch, CURLOPT_URL, $host . $path);
    curl_setopt($ch, CURLOPT_HTTPHEADER, 
    [
        'Accept: application/json', // inform the server you want a json response
        'Authorization: token '. $access_token, // set the access token
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
    // check for errors
    if(!$response = curl_exec($ch)) 
    {
        die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
    }
    
    print_r(json_decode($output, true));
    

    如果您愿意,可以使用参数向量 (argv) 设置路径和令牌:

    $path = $argv[1] ?? "/api/v3/repos/USER_NAME/REPO/pulls/123/files";
    $access_token = $argv[2] ?? 'abclaldslsl';
    

    这将允许您覆盖默认路径和访问令牌,从而允许像这样使用您的命令:

    $ myscript.php /api/v3/repos/USER_NAME/REPO/pulls/123/files MY_ACCESS_TOKEN
    

    【讨论】:

    • 是的,我明白了。非常感谢。
    【解决方案2】:

    为了将 BASH 变量从环境传递到您的 PHP 进程, 你可以使用 PHP 中的 ARGV 和 ARGC 变量

    http://php.net/manual/en/reserved.variables.argv.php

    您也可以将值作为 bash 变量传递并使用 getenv() 获取数据:

    http://php.net/manual/en/function.getenv.php

    在您的情况下,您也可以完全避免使用 bash 脚本,而只需使用 file_get_contents 或 curl_* 函数等直接从 PHP 获取 curl url 内容:

    http://php.net/manual/en/curl.examples.php

    http://php.net/manual/en/function.file-get-contents.php

    另外,请参阅这个类似的问题: How to pass parameters from bash to php script?

    【讨论】:

    • 我尝试了您的建议,但返回错误凭据。我的代码有什么问题?
    猜你喜欢
    • 2011-06-26
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多