5

Mam następujący kod, modyfikowany Google's documentation:Google Cloud API - Application domyślne Poświadczenia

 $GOOGLE_APPLICATION_CREDENTIALS = "./[path].json"; 
     $_ENV["GOOGLE_APPLICATION_CREDENTIALS"] = "./[path].json"; 
     $_SERVER["GOOGLE_APPLICATION_CREDENTIALS"] = "./[path].json"; 

     $projectId = "[my project's ID']"; 
     $client = new Google_Client(); 
     $client->useApplicationDefaultCredentials(); 
     $client->setScopes(['https://www.googleapis.com/auth/books']); 
     $service = new Google_Service_Books($client); 
     $results = $service->volumes->listVolumes('Henry David Thoreau'); 

Jednak gdy uruchamiam go zwraca błąd:

PHP Fatal error: Uncaught exception 'DomainException' with message 'Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information' 

Próbowałem różnych konfiguracji, na przykład zmiana ścieżki pliku. Jak widzisz, zrobiłem również trzy różne formy zmiennych, o których mogłem od razu pomyśleć (dwa środowiska, jeden nie).

Nie jestem pewien, gdzie szukać dalej. Czy powinienem spojrzeć na różne sposoby ustawiania zmiennej środowiskowej, czy też powinienem zdefiniować ścieżkę w inny sposób? Jakie są właściwe sposoby robienia tego? Czy jest jakiś inny powód błędu?

+0

Gdzie są uruchomione kod z aplikacji (np. Prod silnika lub dev, Compute Engine lokalnie)? – Adam

+0

@Adam Lokalnie, w systemie Windows/Apache. Jednak buduję coś, co będzie działać w systemie Linux/NGINX. – laef

Odpowiedz

13

Musisz użyć putenv() (http://php.net/manual/en/function.putenv.php) zamiast próbować użyć jednej z używanych przez ciebie metod ($_ENV lub $_SERVER).

Zrobione z https://github.com/google/google-api-php-client/blob/master/UPGRADING.md#google_auth_assertioncredentials-has-been-removed

// OR use environment variables (recommended) 

putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json'); 
$client->useApplicationDefaultCredentials(); 
+1

Proszę przeczytać "[Jak napisać dobrą odpowiedź] (http://stackoverflow.com/help/how-to-answer)" – fusion3k

+0

@ fusion3k Nie widzę żadnego problemu z moją odpowiedzią. Okay, jest krótka, ale zapytali "czy powinienem zdefiniować ścieżkę w inny sposób?" a moja odpowiedź pokazuje, jak zdefiniować ścieżkę w inny sposób, odpowiadając na to pytanie. Wierzę, że moja odpowiedź jest oczywista i nie wymaga dalszych wyjaśnień. "Zwartość jest do przyjęcia". Cieszę się, słysząc, jak myślisz, że mogę poprawić odpowiedź? –

+0

Po pierwsze: twoja odpowiedź została zgłoszona przez kilku użytkowników jako "niejasna", więc więcej niż jedna osoba uważa, że ​​nie jest ona "oczywista". Mogę się z tobą zgodzić: dla mnie - i być może dla OP - odpowiedź jest oczywista, ale ta strona nie jest czatowa, pytania i odpowiedzi istnieją również dla przyszłych odwiedzających. Lepszą odpowiedzią może być "Twoja próba ustawienia zmiennej środowiskowej jest nieprawidłowa, musisz użyć tej składni zamiast ... $ _ENV oznacza, że ​​... zobacz dokumentację po więcej szczegółów ... etc". Istnieje wiele sposobów, ale "publiczność" chce więcej niż jednej linii kodu. – fusion3k

0
I agree with above answer only want to describe if user getting error in php using nlp google 
    <?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

# Includes the autoloader for libraries installed with composer 
require __DIR__ . '/vendor/autoload.php'; 

# Imports the Google Cloud client library 
use Google\Cloud\Language\LanguageClient; 
putenv('GOOGLE_APPLICATION_CREDENTIALS=/home/sgupta/www/practise/nlp/google/cred.json'); //your path to file of cred 
//$client->useApplicationDefaultCredentials(); 
# Your Google Cloud Platform project ID 
$projectId = 'nlp-project-nname'; //your project name 

# Instantiates a client 
$language = new LanguageClient([ 
    'projectId' => $projectId 
]); 

# The text to analyze 
$text = 'Sachin Tendulkar'; 



# Detects the sentiment of the text 
$annotation = $language->analyzeSentiment($text); 
$sentiment = $annotation->sentiment(); 
echo "<pre>"; 
print_r($annotation); die; 

echo 'Text: ' . $text . ' 
Sentiment: ' . $sentiment['score'] . ', ' . $sentiment['magnitude']; 
?> 
Powiązane problemy