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

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

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

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

Q&A

解決済

1回答

1438閲覧

file_get_contentsが動かない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2018/03/26 14:38

いつもお世話になっています。
file_get_contentsを使って取得しようと試みているのですがうまくいきません。
以下ソースコードになります。

$url = "https://www.example.com"; $options = array( 'http' => array( 'header' => "Content-type: application/JSON;charset=utf-8", 'method' => 'GET', 'dataType' => 'JSON', 'proxy' => 'tcp://proxy.example.com:1234', 'request_fulluri' => true, ), ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); var_dump($result);

こちらエラー内容です。

Warning: file_get_contents(https://www.example.com): failed to open stream: Operation timed out in /ファイル名 ~ on line 10

リンク先(https://www.example.com)がプロキシ設定をしているため他の方法も検証してみましたが、下記コードでもうまくできない状況です。

function curl_get_contents($url, $timeout = 60){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $result = curl_exec($ch); curl_close($ch); return $result; } $result = curl_get_contents("https://www.example.com", 120); var_dump($result);

var_dump($result)の結果は二つとも「bool(false)」です。

php.iniの設定は「allow_url_fopen = on」となっているので、問題ないかなとは思うのですが他に考えられる原因はあるのでしょうか・・?

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

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

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

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

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

m.ts10806

2018/03/27 00:20

取得しようとしている先はどのようなところなのでしょうか?完全に外部のサイト?自社などの自身の領域内?
退会済みユーザー

退会済みユーザー

2018/03/27 00:51

取得先は自身の領域内です。
m.ts10806

2018/03/27 00:55

ローカル環境でしょうか?Webに公開されている環境でしょうか? その環境側が外部プログラムからのアクセスを許可しているかは確認しましたか?
退会済みユーザー

退会済みユーザー

2018/03/27 01:04

イントラサイトのようなもので一部の人には見えている環境です。恐らく外部プログラムからのアクセスを許可しているはずなのですが、もし可能であればそのアクセスを許可しているのか確認できる方法はあるのでしょうか…?
m.ts10806

2018/03/27 01:20

基本的にはIP指定でアクセスを制限するみたいなやり方だったはず(すみません失念しました。ファイアウォールとかだったような)なので、自身の環境であれば関係なさそうですね。
m.ts10806

2018/03/27 01:22

気になるのは「Operation timed out」ですね。通常開けない場合は「Connection timed out」の方なので。
m.ts10806

2018/03/27 01:23

取得しようとしているのは余程大きな情報なのでしょうか?
m.ts10806

2018/03/27 01:52

GETでやろうとしているということは、ブラウザからクエリ付きで実行した場合、ちゃんと想定の結果は返ってきますか?
退会済みユーザー

退会済みユーザー

2018/03/27 02:21

はい、例えばhttps://www.example.com?id=1でクエリ付きで実行しても想定の結果は返ってきています。
guest

回答1

0

ベストアンサー

curlでproxyをかませばよいのでは?

PHP

1function curl_get_contents($url, $timeout = 60){ 2 $ch = curl_init(); 3 curl_setopt($ch, CURLOPT_URL, $url); 4 curl_setopt($ch, CURLOPT_HEADER, false); 5 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 6 curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); 7 8 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); 9 curl_setopt($ch, CURLOPT_PROXYPORT, '1234'); 10 curl_setopt($ch, CURLOPT_PROXY, 'http://proxy.example.com'); 11 12 $result = curl_exec($ch); 13 curl_close($ch); 14 return $result; 15} 16

投稿2018/03/27 01:57

yambejp

総合スコア114829

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

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

退会済みユーザー

退会済みユーザー

2018/04/09 07:48

返事が遅くなり申し訳ございません…。 教えていただいた内容で上手くいきました! ご教示いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問