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

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

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

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

Q&A

解決済

2回答

1439閲覧

localhostで動作するのにレンタルサーバーでは動作しない現象

SugiuraY

総合スコア317

PHP

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

0グッド

0クリップ

投稿2018/10/12 04:21

編集2018/10/12 06:47

下記のようなphpコードでlocalhostで実行して動作が確認できたため、
本番環境のレンタルサーバーで実行したところ、ブラウザ画面に「このページは動作していません」として
エラーが発生いたしました。

一般的にこのような現象が生じるケースがあるのでしょうか?
もしレンタルサーバー側のphp.iniの設定等の問題であれば、ここでは解決することは
出来ないと思うのですが、原因がわからず同じ経験や知識をおもちであればアドバイスを
頂きたくご質問させて頂きました。

レンタルサーバー:ロリポップ
ローカルテスト環境:MacOS/MAMP

php

1<?php 2$time_start = microtime(true); 3//get_url_loop 4require_once 'simple_html_dom.php'; 5$url=[]; 6$top_loop=["","bn=31","bn=61"]; 7 8/*start*/ 9 for ($i=0; $i <count($top_loop) ; $i++) { 10 $html = file_get_html('https://www.xxxxxxx/'.$top_loop[$i]); 11 mb_language('Japanese'); 12 $select = $html->find('.m-articleTitle_text_link'); 13 foreach($select as $elm){ 14 $url[]=$elm->href; 15 } 16 } 17 //get_contents_loop 18 19 for ($i=0; $i <count($url) ; $i++) { 20 $html=""; 21 $html = file_get_html('https://www.yyyy'.$url[$i]); 22 // mb_language('Japanese'); 23 // echo 'https://www.nikkei.com'.$url[$i]; 24 $input_data[]= $html->find('h1 span')[0]->plaintext; 25 $input_data[]= $html->find('.cmnc-publish')[0]->plaintext; 26 $input_data[]= trim(preg_replace('/[\n\r\t ]+/', "",$html->find('.cmn-announce_personnel')[0]->plaintext)); 27 28 $post_number = $html->find('.cmnc-last')[0]->plaintext; 29 $post_number = trim(preg_replace("/( | )/", "", $post_number )); 30 31 32 if($post_number>1){ 33 for ($j=2; $j <$post_number+1 ; $j++) { 34 $html2=""; 35 $html2 = file_get_html('https://www.yyyy'.$url[$i].'?h='.$j); 36 mb_language('Japanese'); 37 $input_data[] = $html2->find('h1 span')[0]->plaintext; 38 $input_data[] = $html2->find('.cmnc-publish')[0]->plaintext; 39 $input_data[]= trim(preg_replace( '/[\n\r\t ]+/', "",$html2->find('.cmn-announce_personnel')[0]->plaintext)); 40 } 41 } 42 43 } 44/*end*/ 45?> 46<!DOCTYPE html> 47<html lang="ja" dir="ltr"> 48 <head> 49 <meta charset="utf-8"> 50 <title></title> 51 <style media="screen"> 52 body{ 53 font-size: 13px; 54 } 55 table{ 56 margin:0 auto; 57 } 58 table,td{ 59 border: solid 1px #989898; 60 border-collapse:collapse; 61 } 62 .col_1{ 63 width:40px; 64 } 65 .col_2,.col_3{ 66 width:200px; 67 } 68 .col_4{ 69 width:600px; 70 } 71 </style> 72 </head> 73 74 <body> 75 <table style=""> 76 <?php for($i=0;$i<count($input_data);$i=$i+3):?> 77 <tr> 78 <td class="col_1"><?php echo 1+$i/3;?></td> 79 <td class="col_2"><?php echo $input_data[$i+1];?></td> 80 <td class="col_3"><?php echo $input_data[$i];?></td> 81 <td class="col_4"><?php echo $input_data[$i+2];?></td> 82 </tr> 83 <?php endfor;?> 84 85 </table> 86 </body> 87</html> 88 89<?php 90$time = microtime(true) - $time_start; 91echo "処理時間:".sprintf("%.20f", $time)."秒"; 92?>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/10/12 04:39

ソースコードよりも先に、webサーバーが出力するerror_logを確認するのが先。
miyakichi

2018/10/12 04:42

simple_html_dom.php はレンタルサーバー側にもありますか?
SugiuraY

2018/10/12 04:50

コメントありがとうございます、simple_html_dom.php はレンタルサーバー側に配置しております。
miyakichi

2018/10/12 04:57

レンタルサーバー側のOpenSSLは有効ですか?
SugiuraY

2018/10/12 04:59

コメント有難うございます。今、レンタルサーバーにアクセスできない環境にいるので、後ほど速やかに確認してみます。
退会済みユーザー

退会済みユーザー

2018/10/12 06:44

ローカルテスト環境は何で、レンタルサーバーはどこの何か、ってところまで掲載するのが最低限のマナー。ローカルテスト環境がWindowsなのかMacOSなのかVM上のCentOSなどなのか、XAMPPもあればMAMPもあるし、などなど、違いを第三者が分かる状態で示す必要があると思いませんか?
SugiuraY

2018/10/12 06:51

失礼致しました、加筆をさせて頂きました。初心者ゆえ、不足があればまたご指摘を頂ければ幸甚です。
guest

回答2

0

ベストアンサー

file_get_html()でオブジェクトの生成を繰り返すとメモリが不足するらしいですので
原因はこれではないでしょうか。

forループ(3か所)の一番下に、それぞれ

php

1$html->clear(); 2 または 3$html2->clear(); 4 5```を入れてみてください。

投稿2018/10/12 06:28

taka-saan

総合スコア665

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

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

SugiuraY

2018/10/12 06:38

非常に参考になるアドバイスを頂き有難うございます。 まだサーバーにアクセスできるかんきょうにないため、出来次第直ぐに確認します。 取り急ぎ、御礼を申し上げます。
SugiuraY

2018/10/13 13:52

$html->clear();では解決しなかったのですが、その後調べていく中で レンタルサーバー側でphp.ini設定上、セーフモードやfopenへの許可の制限がデフォルトでかかっているケースがあるようです。 ご参考:https://blog.keinos.com/20110125_829 従って、こちらで設定を変更することにより、動作させることができました。 ご報告させていただきます。
guest

0

サーバー構成などを教えていただけますでしょうか?

ページが表示されないというのもいくつか原因が考えられるのですが、
レンタルサーバーのドキュメントルートにファイルはありますか?
また、.htaccessなどでApacheの設定などはしていますか?

あとは、PHPコードを全てコメントアウトしてみて、表示が変わるか確認してみたりすると問題の切り分けができそうです。

無限リダイレクトなどが起きているのではないかと思います。

投稿2018/10/12 04:43

kenny_sayama

総合スコア1036

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

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

SugiuraY

2018/10/12 04:50

コメント有難うございます。 サーバーはロリポップサーバーというもので、 main/のルートディレクトリの配下に ●main/index.php (上記のコード) ●main/simple_html_dom.php という構成になります。 切り分けという意味では言及を失念しておりましたが、/*star*/ /*end*/までのコードをコメントアウトすると動作する事は確認しております。反対にそれ以外に部分は動作しているようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問