Ваша проблема в том, что вы устанавливаете заголовок перенаправления, но затем не следуете.
Этот раздел кода выполняется:
if(isset($_GET['code'])){
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect = 'http://'.$_server['HTTP_HOST'].'/tool.php';
header('Location:'.filter_var($redirect,FILTER_SANITIZE_URL));
}
но вместо выхода из PHP после установки заголовка Location
вы продолжаете:
if(isset($_SESSION['access_token']) && $_SESSION['access_token']){
.....
}
и, наконец, этот код выполняется:
else{
$authUrl = $client->createAuthUrl();
}
РЕШЕНИЕ:
Изменить на этот блок кода: обратите внимание на добавление exit()
if(isset($_GET['code'])){
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect = 'http://'.$_server['HTTP_HOST'].'/tool.php';
header('Location:'.filter_var($redirect,FILTER_SANITIZE_URL));
exit();
}
Предложение
Если вы планируете отправлять HTTP-заголовки клиенту, всегда добавляйте ob_start();
в начале вашего PHP-кода. Это включает выходную буферизацию. Это предотвращает отправку вывода перед вашими заголовками. Наберите ob_end_flush();
до выхода вашего кода.
<?php
ob_start();
Включить отчет об ошибках. Вверху вашего PHP-файла добавьте (плюс мое другое предложение):
<?php
// enable output buffering
ob_start();
// Enable error reporting
error_reporting(E_ALL);
ini_set('display_errors', 1);
Кроме того, если у вас есть настройка регистрации ошибок PHP, вы сможете увидеть ошибки и предупреждения. Бьюсь об заклад, есть несколько, которые должны быть исправлены.