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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

解決済

1回答

376閲覧

「1度だけ表示するページ」でファイル読み込みがうまくいきません。

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

0グッド

0クリップ

投稿2017/12/28 11:08

編集2017/12/28 16:44

###■やりたいこと
クッキーごとに1度だけ表示するページを作っています。
wordpressの投稿テンプレートです。

###■うまくいかないこと
ファイルの読み込みがうまくいかないようで、次のようなエラーが出てしまいます。

Warning: fopen(/single-test-a.php): failed to open stream: No such file or directory in /home/XXX/example.com/public_html/wp-content/themes/simplicity2-child/single-test.php on line 23 ファイルが開けません。

###■該当のソースコード
■single.php

php

1<?php 2/* 3Template Name: singleテンプレート 4*/ 5if ( in_category('test') ) { 6get_template_part('single-test'); 7}else { 8get_template_part('single-page'); 9} 10?>

■single-test.php

php

1<?php 2 3//表示するファイルの設定   ここから▼▼▼ 4//$allow → 1回だけ許可するファイル 5//$deny  → 2回目以降表示するファイル 6$allow = "/single-test-a.php"; 7$deny = "/single-test-b.php"; 8//表示するファイルの設定   ここまで▲▲▲ 9 10$buff = ""; $cookie=$_COOKIE["Visiter"]; 11if(strcmp($cookie,"") == 0){ 12$cookie = 0; 13} 14$value = $cookie + 1; $timeout = time() + 365 * 86400; 15setcookie("Visiter","$value",$timeout,'/',$_SERVER["SERVER_NAME"] . ";"); 16 17if( $cookie ) { 18$read_file = $deny; 19}else{ 20$read_file = $allow; 21} 22 23if (! ($fp = fopen ($read_file , "r" ))) { 24die("ファイルが開けません。"); 25} 26 27while ($line = fgets($fp)) { 28$buff .= $line; 29} 30fclose($fp); 31 32print $buff; 33 34?> 35

どなたか解決法を教えてくださいませ。
宜しくお願い致します。<(_ _)>

###□補足
ご回答を受けて、現在次の(その1)または(その2)のエラー状態です。

■single-test.php(その1)↓
→なんどやっても真っ白画面です。

php

1<?php 2 3if( $cookie ) { 4$read_file = $deny = get_stylesheet_directory()."//single-test-a.php"; 5}else{ 6$read_file = $allow = get_stylesheet_directory()."/single-test-b.php"; 7} 8 9?>

■single-test.php(その2)↓
→クロームだと「single-test-a」の中身だけ表示され、ファイアフォックスだと「single-test-b」の中身だけ表示されます。

php

1<?php 2 3//表示するファイルの設定   ここから▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 4//$allow → 1回だけ許可するファイル 5//$deny  → 2回目以降表示するファイル 6$allow = get_stylesheet_directory()."/single-test-a.php"; 7$deny = get_stylesheet_directory()."/single-test-b.php"; 8//表示するファイルの設定   ここまで▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ 9 10$buff = ""; $cookie=$_COOKIE["Visiter"]; 11if(strcmp($cookie,"") == 0){ 12$cookie = 0; 13} 14$value = $cookie + 1; $timeout = time() + 365 * 86400; 15setcookie("Visiter","$value",$timeout,'/',$_SERVER["SERVER_NAME"] . ";"); 16 17if( $cookie ) { 18$read_file = $deny; 19}else{ 20$read_file = $allow; 21} 22 23if (! ($fp = fopen ($read_file , "r" ))) { 24die("ファイルが開けません。"); 25} 26 27while ($line = fgets($fp)) { 28$buff .= $line; 29} 30fclose($fp); 31 32print $buff; 33 34?> 35

###□補足Ⅱ
■single-test.php(その3)↓
→その2と同じく、ブラウザで表示が違います。
ところで、phpやCSSが無効化されていることに気づきました。このコードにそのような無効化機能が入っているのでしょうか??

php

1<?php 2 3$buff = ""; $cookie=$_COOKIE["Visiter"]; 4if(strcmp($cookie,"") == 0){ 5$cookie = 0; 6} 7$value = $cookie + 1; $timeout = time() + 365 * 86400; 8setcookie("Visiter","$value",$timeout,'/',$_SERVER["SERVER_NAME"] . ";"); 9 10if( $cookie ) { 11$read_file = $deny = get_stylesheet_directory()."/single-test-a.php"; 12}else{ 13$read_file = $allow = get_stylesheet_directory()."/single-test-b.php"; 14} 15 16if (! ($fp = fopen ($read_file , "r" ))) { 17die("ファイルが開けません。"); 18} 19 20while ($line = fgets($fp)) { 21$buff .= $line; 22} 23fclose($fp); 24 25print $buff; 26 27?> 28

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーを読んで意味を理解しましょう。
問題の行数が書いてあります。
そこからさかのぼれば何が悪いか分かります。

投稿2017/12/28 11:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/12/28 12:07

ありがとうございます。23行目が悪いというのはわかるのですが、、 「"r"」のところかなと思い、こちらのサイトを参考にして http://php.net/manual/ja/function.fopen.php いろいろ「'w'」とかにしてみたのですが、ダメだったのです。泣 もう1ヒント頂けませんでしょうか?
退会済みユーザー

退会済みユーザー

2017/12/28 13:11

No such file or directory そのようなファイルやディレクトリはありません
退会済みユーザー

退会済みユーザー

2017/12/28 13:15

たびたび(そしてあちこちで)ありがとうございます。 ほんとですか(;'∀') あ、いえ、同じディレクトリに、きちんと「single-test-a.php」という名前でありますね、、コピペして同じ文字だと確認しました。 それとも $allow = "/single-test-a.php"; $deny = "/single-test-b.php"; という呼び出し方が違うのでしょうか?
退会済みユーザー

退会済みユーザー

2017/12/28 13:31

そうですね。 >同じディレクトリに、きちんと「single-test-a.php」という名前でありますね その考えだけだと無理です。 パスを通さないと認識できません。 WordPressでは基本的にはwp-config.phpがある階層からパスを通さないといけないと思ってください。 もう答えを書きますが $allow = get_template_directory()."/single-test-a.php"; $deny = get_template_directory()."/single-test-b.php"; このようにしなければ無理です。 子テーマの場合はget_stylesheet_directory()に変えてください。 https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_template_directory 結局はこうしておけばいいだけだと思います。 if( $cookie ) { $read_file = $deny = get_template_directory()."/single-test-b.php"; }else{ $read_file = $allow = get_template_directory()."/single-test-a.php"; }
退会済みユーザー

退会済みユーザー

2017/12/28 13:59

がんばって「include」とかを使ってみたのですが、それだと「test-a」も「test-b」も表示されてしまって困っておりました。 「get_stylesheet_directory」だなんて、、絶対たどり着けなかったでしょうね笑 教えて頂いて助かりました。ありがとうございます! ・・・ ちなみに、 「get_stylesheet_directory」だと「test-a」は無事呼び出せたのですが、2回目に呼び出されるはずの「test-b」が真っ白でして、「結局は」の方ですと2つとも真っ白でしたが、、 そのあたりについては、何か思いつくものってございませんでしょうか…?
退会済みユーザー

退会済みユーザー

2017/12/28 14:14

あれ?クロームだと「test-a」しか出ませんけれど、ファイアフォックスならば「test-b」も出ました。そんなことってあるのでしょうか?
退会済みユーザー

退会済みユーザー

2017/12/28 14:18

「結局は」は$read_fileの変数に直でURLを入れるか$allowなどの変数を入れるかだけの違いなので特に深い意味は無いのですが。 それだけで結果が変わるとは思えませんが…
退会済みユーザー

退会済みユーザー

2017/12/28 14:19

ブラウザのキャッシュじゃないですか?
退会済みユーザー

退会済みユーザー

2017/12/28 14:44

でも、ほんとなのです。ほんとに結果が変わるのです。(´;ω;`) 質問文に補足してみましたので、お手すきの折りにご覧いただけましたら幸いです。 補足の(その1)が「結局は」の方なのですが、まぁこれは何をしても真っ白だからまだいいとして、、 (その2)の方が問題ですよね。ブラウザによって「test-a」だったり「test-b」だったり変わるって、どういうことなのでしょうね???
退会済みユーザー

退会済みユーザー

2017/12/28 15:26

あ、意味と取り違えてますね。 結局はこうしておけば…というのは $allow = get_template_directory()."/single-test-a.php"; $deny = get_template_directory()."/single-test-b.php"; が要らなくて if( $cookie ) { $read_file = $deny; }else{ $read_file = $allow; } を if( $cookie ) { $read_file = $deny = get_template_directory()."/single-test-b.php"; }else{ $read_file = $allow = get_template_directory()."/single-test-a.php"; } すればいいという意味です。
退会済みユーザー

退会済みユーザー

2017/12/28 15:46

あ、なるほど。もはやそのレベルなので笑、お手を煩わせてしまってすみません。 仰るようにしてみたところ、補足した(その2)と同様に、ブラウザによって変わるようです。 「1回目と2回目以降で分かれる」ようにしたいのですが、「クロームとファイアフォックスで分かれる」ようになっています。 これ、不思議すぎますよね。
退会済みユーザー

退会済みユーザー

2017/12/28 16:31

cookieが無い初回のアクセスは a cookieがあれば b 試してみましたが特に問題ないようです。 ブラウザに依存するような結果にもなりませんが。
退会済みユーザー

退会済みユーザー

2017/12/28 16:36

なにか私の設定がおかしいのですね。。 もう1つ不思議なことがありました。 この呼び出し方法だとCSSとPHPが無効化されてしまうのです。たとえば ■single-test-bに <?php dynamic_sidebar('footer'); ?> と書いてウィジェットを呼び出しているのですが、この呼び出し方法だと勝手にコメントアウトされているのです。CSSもどこかに消えてしまっています。(他の呼び出し方法ならばきちんと表示されます。) このようにCSSやPHPが消えるという現象から、何かお心当たりのある原因など、思い浮かびませんでしょうか?
退会済みユーザー

退会済みユーザー

2017/12/28 16:38

single.php から直接呼べば問題なく、single-test.php を介した呼び出し方法だけ、PHPがコメントアウトされるというおかしなことになるのです。
退会済みユーザー

退会済みユーザー

2017/12/29 01:39

あ… 変な事書いてました。 問題の結果とは無関係だと思いますが、こうですね if( $cookie ) { $read_file = get_template_directory()."/single-test-b.php"; }else{ $read_file = get_template_directory()."/single-test-a.php"; }
退会済みユーザー

退会済みユーザー

2017/12/29 02:48

よく見てませんでした。 変な画面になるのはPHPファイルをそのまま開いているからです。 テキストやHTMLファイルだと表示可能ですが。 だから結局はsingle-test.phpをこうすればいいだけだと思います。 <?php @$cookie = $_COOKIE["Visiter"]; if(strcmp($cookie,"") == 0){ $cookie = 0; } $value = $cookie + 1; $timeout = time() + 365 * 86400; setcookie("Visiter","$value",$timeout,'/',$_SERVER["SERVER_NAME"] . ";"); if( $cookie ) { get_template_part('single-test-b'); }else{ get_template_part('single-test-a'); } ?>
退会済みユーザー

退会済みユーザー

2017/12/29 05:22

おはようございます。 全て書いてくださってありがとうございます。 そちらのコードでも同様に、やはりクロームとファイアフォックスでaのb表示が変わるようです。(ブラウザで変わる理由がわかりません!!) 「get_template_part」を「get_stylesheet_directory」とか「get_template_directory」にしますと真っ白画面です。
退会済みユーザー

退会済みユーザー

2017/12/29 05:43

「マルチ投稿」というやつに対してでしょうか?たしかに、腹が立つ方がいらっしゃるようですね。そうでしたら弁解の余地はございません。2か所に質問することに腹が立ってしまうようなら、私は謝るしかできません。すみません。(-_-;)
退会済みユーザー

退会済みユーザー

2017/12/29 06:07

どうか穏やかに、あまり腹を立てずにお過ごしくださいませ。 「なんでこれで怒ってしまうんだろう」って、じっくり考えてみるのがオススメです。 私はそうやって、「みんなが怒ることに脊髄反射的に怒る」という癖がなくなり、「必要に応じて叱る」ことができるようになりました。 オススメなので年末のお時間あるときにぜひ、やってみてください♪ なんだか説教くさいですけれど、、、そこです、今、その瞬間のいらだちを、捕まえて、じっくり解剖してみてください!(^_-)-☆成長できる機会になるかもしれません!
退会済みユーザー

退会済みユーザー

2017/12/29 06:26

そんな内観にはこちらの本がオススメです。 『ニューアース』  https://www.amazon.co.jp/dp/4763198726 個人的にスピリチュアルにはあまり惹かれませんけれど、こちらはなかなか実践的で役に立ちました。局留め&元払いでお送りしますよ!何かのご縁ということで。
kei344

2017/12/29 07:23

To: matsuzakaq 【ヘルプ|teratail(テラテイル)】 https://teratail.com/help#posted-otherservice > teratailでは、マルチポスト*の推奨はしていません。 > やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。
退会済みユーザー

退会済みユーザー

2017/12/29 07:37

ありがとうございます。きちんと読んでおきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問