504网关超时没有输出 - php

时间:2017-10-11 22:36:15

标签: php nginx timeout http-status-code-504

我写了一个脚本,与一款名为kahoot的流行游戏进行通信。它登录并回答每个问题,然后在完成时回显。这是working on the command line。但是,当我将此功能添加到我的网站时,当我运行它时它会给我一个504 gateway timeout,即使在超时之前它应该产生一些输出并将其回显到页面。

以下是website code

完整执行代码:

<html>
  <head>
    <title>Kahoot bot</title>
  </head>
  <body>
<?php
$username = 'kahootbot28@gmail.com';
$password = 'botkahoot28';
$loginUrl = 'https://create.kahoot.it/rest/authenticate';
$kahootId = $_GET['quizid'];
$type = $_GET['what'];
if ($type == "bot") {
  $call = "~/www/reteps.tk/go/kahoot-auto " . $_GET['gamepin'] . " " . $_GET['username'] . " ";
  echo($call);
}
$pageUrl = 'https://create.kahoot.it/rest/kahoots/' . $kahootId;
$loginheader = array(); 
$loginheader[] = 'content-type: application/json';
$loginpost = new stdClass();
$loginpost->username = $username;
$loginpost->password = $password;
$loginpost->grant_type = "password";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($loginpost));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER,$loginheader);
$store = curl_exec($ch);
curl_close($ch);
$token = json_decode($store,true)["access_token"];
//get questions
$quizheader = array(); 
$quizheader[] = 'authorization: ' . $token;
$options = array(
    'http' => array(
        'method'  => 'GET',
        'header'  => "Authorization: ".$token."\r\n"
    )
  );
$pairs = array(
     0 => "red",
     1 => "blue",
     2 => "yellow",
     3 => "green",
);
$context = stream_context_create($options);
$raw_result = file_get_contents($pageUrl, false, $context);
$result = json_decode($raw_result,true)["questions"];
echo("<a href='kahoot_bot'>back</a><br>");
foreach($result as $value) {
  if ($type == "text") {
    echo($value['question']."  ");
  }
  $choices = $value['choices'];
  for($i=0;$i<count($choices);$i++) {
    if ($choices[$i]['correct'] == true) {
      if ($type == "text") {
        echo($choices[$i]['answer']."<br>");
      } elseif ($type == "bot") {
        $call .= $i;
      } else {
        echo($pairs[$i].", ");
      }
      break 1;
    }
  }
}
if ($type == "bot") {
  $old_result = "";
  $handle = popen($call . " 2>&1", "r");
  $result = fread($handle, 2096);
  echo($result);
  while ((strpos($result, "end") !== false) != true) {
    $result = fread($handle, 2096);
    sleep(1); 
    if ($result != $old_result) {
      echo($result);
      $old_result = $result;
    }
  }
  pclose($handle);
}
?>
</body>
</html>

0 个答案:

没有答案