- ベストアンサー
PHPで外部サイトの内容を取得する方法
いまPHPをやっているのですが。外部サイトのソースを文字列で取得する方法はあるのでしょうか? (例えばwikipediaの内容を文字列で取得して echo で表示させたい) wikipediaの内容はソースを見れればいいだろうと思ったからです。 fopenでURLを入れれると書いていたのでしてみたのですがタイムアウトしてうまくいきません。 なので例としてwikipediaのページのソースを取得しechoで表示させるプログラムを教えていただけませんでしょうか?。よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
これでProxy経由でのアクセスが出来るようになるかと思います。 (私の所では使えるProxyが無いのでテストはしてません) <?php $proxy = array( "http" => array( "proxy" => "tcp://プロキシHOST:ポート", "request_fulluri" => true ) ); $proxy_context = stream_context_create($proxy); echo file_get_contents("アクセス先のURL", false, $proxy_context); ?>
その他の回答 (6)
- t_ohta
- ベストアンサー率38% (5242/13714)
その表示のされ方はエラーが発生している感じではないので、括弧とかダブルコーテーションの入力ミス等ではないでしょうか。 Proxyのある環境でテストしてみたところ、ちゃんと表示されましたよ。
お礼
回答ありがとうございます。 arrayのところとかコンマとか色々いじくってみたのですがどうも結果が変わりません、プログラム送ります。 <?php $proxy = array( "http" => array( "proxy" => "tcp://proxy.noc.*****-****.ac.jp:****", "request_fulluri" => true ) ); $proxy_context = stream_context_create($proxy); echo file_get_contents("http://ja.wikipedia.org/wiki/%E8%B6%85%E9%95%B7%E6%B3%A2", false, $proxy_context); ?> どこか間違っているでしょうか? ちなみにプロキシHOSTとは「ツール」→「インターネットオプション」→「接続」→「LANの設定」→「プロキシーサーバのアドレス(E)」の内容でいいんですよね?
- t_ohta
- ベストアンサー率38% (5242/13714)
DNS、プロキシー、ファイヤウォール等の影響かもしれませんね。 ネットワーク環境を一度確認してみてはいかがでしょうか。 私の所ではデータが取得できました。 環境は Windows Vista + XAMPP 1.7.0 です。
お礼
回答本当にありがとうございます。 今は寮で学校のプロキシーなのできっとプロキシーが原因だと思います。 プロキシーを無視する方法なんてありますでしょうか?
- t_ohta
- ベストアンサー率38% (5242/13714)
echo file_get_contents("ja.wikipe... の ja. の前に http:// を入れてみて下さい。 根本的な問題として、ただ http://ja.wikipedia.org/ にアクセスしてもリダイレクトの指示が帰ってくるだけで、そのページにはコンテンツがありませんので、ちゃんとコンテンツのあるページを読み込んで実験してみて下さい。
お礼
回答本当にありがとうございます。 ですが、なぜかエラーになります。 自分が入力したプログラムは <?php echo file_get_contents("http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84 "); ?> で、回答が Warning: file_get_contents(http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84 ) [function.file-get-contents]: failed to open stream: 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。 in C:\xampp\htdocs\tesuto.php on line 2 でした。コンテンツなどもブログ、Youtube、Googleなど色々やってみたんですが、全部同じ結果でした。
- gentaro
- ベストアンサー率47% (105/221)
あくまでfopenとecho使って「ソース」表示なら <?php $url = 'http://ja.wikipedia.org/'; $fp = fopen($url, 'r'); if($fp==false) exit; while (!feof($fp)) { echo htmlspecialchars(fgets($fp,8192)); } fclose($fp); ?> エラー処理は適当に。 勉強するならfsockopenでhttpヘッダ送信受信からやったほうがいいですよ。 http://www.spencernetwork.org/memo/tips-3.php
お礼
回答ありがとうございました。 そのプログラムを実行してみたのですが(URLを正しく書き直して)真っ白のままでした。 それと、内容を保存するときに このファイルは、ANSIテキストファイルとして保存すると失われてしまうUnicode 形式の文字を含んでいます・・・[文字コード]から[Unicode]を選択してください。 などとかかれるのですが、何か根本的なミスをしているのでしょうか?
- t_ohta
- ベストアンサー率38% (5242/13714)
リンクと間違われて途中で切れて見えなくなってしまいましたね(^^; 以下のような感じで、URLに http:// を付けてみてください。 ============================== <?php echo file_get_contents("ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8"); ?>
お礼
回答ありがとうございます。 そのプログラムで実行してみたのですがうまくいかずに Warning: file_get_contents(ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8) [function.file-get-contents]: failed to open stream: No such file or directory in C:\xampp\htdocs\test.php on line 2 と表示されてしまいます。 何かわかりますでしょうか?
- t_ohta
- ベストアンサー率38% (5242/13714)
これで出ると思います。(画像やCSSなど相対パスで指定されている物は出ませんが) ============================== <?php echo file_get_contents("http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8"); ?>
お礼
回答本当にありがとうございます。 今度は array( "proxy" => "tcp://proxy.noc.*****-****.ac.jp:****", "request_fulluri" => true ) ); $proxy_context = stream_context_create($proxy); echo file_get_contents("http://goyaku.seesaa.net/article/115299516.html", false, $proxy_context); ?> と表示されました。 *のところは自分のproxyのアドレスとポートを入力しました。「?>」が出力されているところから見ると"http"=> 以降からそのまま表示されている感じです。 あの、もしお疲れでしたら、言ってくださって結構ですが・・・