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

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

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

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

Q&A

解決済

4回答

5228閲覧

file_get_contentsがPHP5.3だと動かない

yamaotakuro

総合スコア13

PHP

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

0グッド

0クリップ

投稿2016/11/29 00:14

###前提・実現したいこと
PHPで対象ページの中身を取得したいです。
php5.5、5.4では同様のコードで動作しています。

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

エラーが出ずタイムアウトも表示されません。
ずっとローディング状態で遷移しません。

###該当のソースコード

php

1function get_page_title($url) { 2 $html = file_get_contents($url); 3 $html = mb_convert_encoding($html, "UTF-8", "auto" ); 4 if ( preg_match( "/<title>(.*?)<\/title>/i", $html, $matches) ) { //(3) 5 return $matches[1]; 6 } else { 7 return false; 8 } 9} 10 11//出力する箇所 12<?php for($i = 1; $i <= 47; $i++): ?> 13<tr> 14 <td><a href="<?php echo $url;?>" target="new"><?php echo get_page_title($url); ?></a></td> 15</tr> 16<?php endfor; ?>

###試したこと

cURLでの取得も試しましたが同様に5.3では動作しませんでした。

php

1 2function curl_get_contents( $url, $timeout = 60 ){ 3 $ch = curl_init(); 4 curl_setopt( $ch, CURLOPT_URL, $url ); 5 curl_setopt( $ch, CURLOPT_HEADER, false ); 6 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); 7 curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); 8 curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); 9 $result = curl_exec( $ch ); 10 curl_close( $ch ); 11 return $result; 12}

php.iniの設定は
allow_url_fopen = On
allow_url_include = Off
等は確認しています。

上記のコードを踏まえ原因、対策があればご教授いただきたいです。

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

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

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

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

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

maisumakun

2016/11/29 00:29

PHP 5.4と5.3の比較は、「同じサーバ」で行なっての話でしょうか。
date

2016/11/29 00:34

apacheのlogに何か書かれていませんでしょうか
yamaotakuro

2016/11/29 00:45

>maisumakun様 同一サーバーではありません。
yamaotakuro

2016/11/29 00:46

>date様 5.3のサーバーではapacheのログは見ることができません。
guest

回答4

0

自己解決

PHPでの取得は諦めてjavascriptで取得するようにします。
皆さまたくさんのアドバイス本当にありがとうございました。

投稿2016/11/29 04:39

yamaotakuro

総合スコア13

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

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

0

php.ini の設定が異なっているかもしれません。

http://php.net/manual/ja/filesystem.configuration.php#ini.allow-url-fopen

イメージ説明

投稿2016/11/29 02:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yamaotakuro

2016/11/29 04:18

回答ありがとうございます。 allow_url_fopen = On allow_url_include = Off となっておりますのでphp.iniの設定は問題ないと思います。
guest

0

接続できない方のサーバー環境には外部接続用のproxyは導入されてないのでしょうか?
cURLであればproxy経由のデータ取得も可能です

投稿2016/11/29 01:44

yambejp

総合スコア114585

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

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

yamaotakuro

2016/11/29 02:24

回答ありがとうございます。 proxyの可能性もあるのでcURLで取得を試みているのですがうまくいきません。 拾ったコードを試してみたりはしたのですが うまくいきません。
guest

0

「php5.5、5.4では同様のコードで動作しています。」同じサーバー(特にネットワーク関連)でPHP5.3.xでは動作せず php 5.4.x移行では動作するのでしょうか?
単純に ネットワークに問題があるとかではないのでしょうか

Proxyサーバー経由でないとした場合
動くサーバー(php5.4.x以降がインストールされたサーバー)と動かないサーバー(php 5.3.xがインストールされたサーバー)で以下コマンドを実行し正常に接続できるか確認できます。
※www.example.comは対象のURLのFQDNを指定ください。

bash

1#DNSの正引きができるか確認 2nslookup www.example.com

bash

1#対象サーバーの80ポートへ接続できるか確認(Hostヘッダー入力後は改行2回送信すること) 2telnet www.example.com 80 3GET / HTTP/1.1 4Host: www.example.com 5 6

投稿2016/11/29 00:33

編集2016/11/29 00:36
Y.H.

総合スコア7914

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

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

yamaotakuro

2016/11/29 01:36 編集

回答ありがとうございます。 5.4と5.3は別サーバーです。 本番(5.3)に移行した際に問題が発生します。 nslookupは動作しています。 telnetの方はホストとの接続はできているんですが GET / HTTP/1.1を打つとコマンドが無効と言われ接続が切断されてしまいます。 これはネットワークに問題があるのでしょうか?
yamaotakuro

2016/11/29 01:40

すみません。 追記です。 telnet動作しました。HTTP/1.1 200 OK Date: Tue, 29 Nov 2016 01:39:14 GMT Server: Apache Last-Modified: Mon, 21 Nov 2016 01:31:31 GMT ETag: "4ee9dfa-52-541c59d8bd2df" Accept-Ranges: bytes Content-Length: 82 Content-Type: text/html この表示が返ってきました。 何かしら助言をいただけると幸いです。 よろしくお願い致します。
Y.H.

2016/11/29 01:52

これは5.4と5.3どちらのサーバーからtelnetを実行した結果でしょうか? 200で帰ってきてますがcontents bodyが何も返ってきてないですね。 また、接続先は5.4と5.3とも同じサーバー(FQDN)でしょうか? 5.4のサーバーでまったく同じtelnetコマンドを実行した場合は正常にHTMLが帰ってくるのでしょうか?
yamaotakuro

2016/11/29 02:07

5.4のサーバーで実行した結果です。 5.4のドメイン(テストドメイン)をtelnetで接続した場合はcontents bodyが返ってきました。 5.3のサーバーはそもそもルートで入ることが出来なくて 5.4のサーバー内で5.3で使用するドメイン(本ドメイン)を叩いた結果が上記のレスポンスになります。 わかりにくい説明ですみません。 何卒宜しくお願い致します。
Y.H.

2016/11/29 03:17

5.3のサーバーにはconsoleにログインできないということでしょうか? Fireallなどで遮断されているかProxyが必要なのでしょう。 Proxyサーバーの設定を聞くかネットワーク管理者にFirewallの透過依頼が必要だと思います。 5.3のサーバーを構築した方やネットワーク管理者に本番環境のネットワークの詳細を聞いてみるしかないと思います。
yamaotakuro

2016/11/29 04:38

はい。ログインできません。 やはりそうですよね・・ 色々アドバイスいただきありがとうございます。 代替案としてjavascriptで取得する方法を試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問