在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”:“凭据错误”,“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);
?>
答案 0 :(得分: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?
答案 1 :(得分: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