如何使用API通过PHP脚本将.txt文件上传到Github?

如何使用API通过PHP脚本将.txt文件上传到Github?,php,api,github,curl,Php,Api,Github,Curl,因此,在过去的3天里,我一直在为我的公司编写这个脚本,以便将一个日志文件自动发送到我的Github存储库。我认为这其实很容易(我错了),而且不知道如何使用API发送信息。在做了大量研究之后,我在这里找到了另一位用户的帖子: 似乎有益的主要代码是以下代码块: <?php $file_git = "wall.jpg"; $data_git = array( 'sha'=>file_get_contents("sha.txt"), 'message

因此,在过去的3天里,我一直在为我的公司编写这个脚本,以便将一个日志文件自动发送到我的Github存储库。我认为这其实很容易(我错了),而且不知道如何使用API发送信息。在做了大量研究之后,我在这里找到了另一位用户的帖子:

似乎有益的主要代码是以下代码块:

<?php
$file_git = "wall.jpg";
$data_git = array(
'sha'=>file_get_contents("sha.txt"),
'message'=>'image',
'content'=> base64_encode($file_git),
'committer'=> array(
'name'=>'Jacob',
'email' => '45331093+greenandgreen@users.noreply.github.com'
)
);
$data_string_git = json_encode($data_git);
$ch_git = curl_init('https://api.github.com/repos/YOUR_REPO/contents/wall.jpg');
curl_setopt($ch_git, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch_git, CURLOPT_POSTFIELDS, $data_string_git);
curl_setopt($ch_git, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_git, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.3.314 Yowser/2.5 Safari/537.36',
'Authorization: token PLACE_YOUR_PERSONAL_TOKEN_HERE'
));
$result_git = curl_exec($ch_git);
echo $result_git;
$p_git = json_decode($result_git);
file_put_contents("sha.txt",$p_git->content->sha);
?>
我收到的错误消息是“消息”:“未找到”,“文档\u url”:https://developer.github.com/v3“”
总体目标是将这个.txt文件放在updateCollection/tree/simplehistorylogs下的respository中,但我似乎无法到达那里


TLDR:我正试图使用PHP脚本通过Github API上传一个.txt文件,但无法将该文件放入存储库,也无法到达存储库。

因此我发现了一些更正,使我更接近最终结果。上面列出的代码仅适用于公共存储库。curl_init在repos之前需要所有者名称(joshg/repos/updateCollection/contents/{file path}名称是这个脚本实际发送过来的唯一一个片段;文件的内容很可能不会因为echo显示的这一片段而移动:对于那些正在寻找这个解决方案的人,我无法准确地找到我正在寻找的内容,但找到了一个类似的解决方案,它避免了API调用限制,并且非常有用对于我的目的来说仍然足够了。我没有将每条记录存储在文本文件中,而是将每条记录作为文件名直接发送到GitHub;调用的数量没有限制,但您必须使用Sleep()函数,以避免滥用率。希望这有助于一些谨慎的搜索者。因此,我发现了一些更正,使我更接近最终结果。上面列出的代码仅适用于公共存储库。curl_init要求在repos之前输入所有者名称(joshg/repos/updateCollection/contents/{file path}名称是这个脚本实际发送过来的唯一一个片段;文件的内容很可能不会因为echo显示的这一片段而移动:对于那些正在寻找这个解决方案的人,我无法准确地找到我正在寻找的内容,但找到了一个类似的解决方案,它避免了API调用限制,并且非常有用对于我的目的仍然足够。我没有将每条记录存储在文本文件中,而是将每条记录作为文件名直接发送到GitHub;调用的数量没有限制,但您必须使用Sleep()函数以避免滥用率。希望这能帮助一些谨慎的搜索者。
$file_git = $filename;
$data_git = array(
    'sha'=>file_get_contents($shafile),
    'message'=>'text',
    'content'=> base64_encode($file_git),
    'committer'=> array(
    'name'=>'JOSH',
    'email' => 'USER@EMAIL.COM')
);

$data_string_git = json_encode($data_git);
$ch_git = curl_init('https://api.github.com/repos/updateCollection/contents/' . $filename);
curl_setopt($ch_git, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch_git, CURLOPT_POSTFIELDS, $data_string_git);
curl_setopt($ch_git, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_git, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.3.314 Yowser/2.5 Safari/537.36',
    'Authorization: token PERSONALACCESSTOKEN_TOKEN_LISTED_HERE'
));

$result_git = curl_exec($ch_git);
echo $result_git;
$p_git = json_decode($result_git);
file_put_contents("sha.txt",$p_git->content->sha);