質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2632閲覧

Googleアカウントの認証 file_get_contentsが利用できないため、cURLに変更したい。

hira-toshi

総合スコア11

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/04/29 05:21

編集2019/04/29 13:13

前提・実現したいこと

Googleアカウント認証を実装したサイトを作成しています。
このサイトは仲間内だけが閲覧できるようにするため、Googleのアカウント(gmail)で認証できるようにし、閲覧できるメンバーは管理者が追加するような形にしたいと思っています。
<詳細>
・レンタルサーバー:XFREE
・使用言語:PHP

自分なりに調べてOAuthで認証させ、スプレッドシートなどで作ったリストと比べて閲覧させるなどできるのではないかと考えてネット上のサンプルコードをもとに作っています。
しかし、XFREEではfile_get_contentsが使用できず、以下のようなメッセージが出てきます。cURLに置き換えることができるようですが、よくわからず困っています。
cURLに置き換える方法やこのようなサイトを作るためのほかのアイデアがありましたら、お教えてください。

発生している問題・エラーメッセージ

Warning: file_get_contents(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /home/****/****.php.xdomain.jp/****/callback.php on line 42 Warning: file_get_contents(https://accounts.google.com/o/oauth2/token): failed to open stream: no suitable wrapper could be found in /home/****/****.php.xdomain.jp/****/callback.php on line 42

auth.php

PHP

1<?php 2//パラメタの設定 3$url = "https://accounts.google.com/o/oauth2/auth"; 4$client_id = "クライアントID"; 5$redirect_uri = "リダイレクトURI"; 6$query = ""; 7$query .= "client_id=".urlencode($client_id)."&"; 8$query .= "scope=".urlencode("openid email")."&"; 9$query .= "response_type=".urlencode("code")."&"; 10$query .= "redirect_uri=".urlencode($redirect_uri)."&"; 11$location = $url ."?".$query; 12header("Location: {$location}"); 13exit();// 14?>

callback.php

PHP

1<?php 2//パラメタの設定 3$url = "https://accounts.google.com/o/oauth2/token"; 4$client_id = "クライアントID"; 5$client_secret = "クライアント シークレット"; 6$redirect_uri = "http://****.php.xdomain.jp/callback.php"; 7 8//POSTパラメタの作成 9$query = ""; 10$query .= "code=".urlencode($_GET["code"])."&"; 11$query .= "client_id=".urlencode($client_id)."&"; 12$query .= "client_secret=".urlencode($client_secret)."&"; 13$query .= "redirect_uri=".urlencode($redirect_uri)."&"; 14$query .= "grant_type=".urlencode("authorization_code"); 15 16//HTTPヘッダの設定 17$header = array( 18 "Content-Type: application/x-www-form-urlencoded", 19 "Content-Length: ".strlen($query) 20); 21 22//コンテキストの設定 23$context = array( 24 "http" => array( 25 "method" => "POST", 26 "header" => implode("\r\n", $header), 27 "content" => $query 28 ) 29); 30 31//id token を取得する 32$res_json = file_get_contents($url, false, stream_context_create($context)); 33 34//取得したjsonデータをオブジェクト化 35$res = json_decode($res_json); 36 37//id_token(JWT)を分解 38$val = explode(".", $res->id_token); 39 40//2番目がデータ部分なのでbase64でデコード 41$data_json = base64_decode($val[1]); 42 43//bsae64でデコードしたjsonをオブジェクト化 44$data = json_decode($data_json); 45 46//取得したデータを表示 47print("対象ユーザの識別子:".$data->sub."<br>" ); 48print( "email:".$data->email."<br>"); 49print( "emailが認証済か否か:".$data->email_verified."<br>"); 50 51?>

参考にしたサイト

http://cccapital.jp/374

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/04/29 05:42

XDOMAINはドメイン取得サービスで、一緒にサーバーを借りたということであればXSERVERというサービス名かと。
hira-toshi

2019/04/29 13:10

ご指摘ありがとうございます。 完全に思い込んでいましたので、確認したところ、XFREEというサービスみたいでした。
guest

回答1

0

ベストアンサー

いきなり、作りかけのコードを書き換える前に、
シンプルでミニマルなテストコードを書いて、
cURLが使えるかどうか確認したほうが、
もしできなかった場合のショックが少ないかと。

cURLの使い方はたとえば
PHP cURLの色々な使い方 - Qiita
の事例が参考になるでしょうか。

レンタルサーバーの一部では、
外部のサーバーなどからのコンテンツ取得を
そもそも制限していることがあるため、
file_get_contents()で遮断していたら
cURLも遮断していることが多い気がします。
回避するには、よそのサーバーを使うしかないかと。

サーバー業者側に問い合わせを起こして
使えますかどうですかと確認して言質を取ることをおすすめします。

投稿2019/04/29 05:44

編集2019/04/29 08:09
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hira-toshi

2019/04/29 08:34

m6uさん早速の回答ありがとうございます。 今回利用しているレンタルサーバーでfile_get_contents()が使えないようなのは分かったのですが、cURLも遮断されている場合があるのですね。 cURLについて使えるかどうかも含め、確認したいと思います。 参考のURLもありがとうございます。 いま一から作っているところなので、閲覧者を制限するほかに方法をご存知であれば、教えていただけますか?
hira-toshi

2019/04/29 13:31

セキュリティのかかったサイトを作るのが初めてのため、アイデアをいただけて助かります。 Basic認証は簡単に実装できそうで現実的な気がしています。 最終的に複数の人がアカウントを追加するなどの管理作業ができるようにしたいと思っていたので、追加するのにファイルのアップロードなどはしたくないと思っていました。が、多少勉強してもらって、アップしてもらうのが、落としどころかもしれません。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問