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

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

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

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

Q&A

解決済

3回答

376閲覧

外部ファイルの読み込みの条件分岐

ken1_takagi

総合スコア15

PHP

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

0グッド

0クリップ

投稿2019/06/10 10:30

編集2019/06/11 00:56

前提・実現したいこと

素人の質問で恐縮です。
現在外部に予め用意したテキストがあり、それを読み込みたいのですが
一応読み込みは出来ましたが望んでいる箇所が解消ができず困っております。

●環境について
分かる範囲で記載します。
PHPバージョン 7.1
OS windows7
サーバー heteml
ブラウザ Chrome


http://example.com/directory/index.php?id=aaa
だった場合、予め用意しているテキストファイル名がaaa.txtのファイルが読み込まれるという形です。

実在しないファイルだっ場合は空のテキストファイルを表示させたいです。

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

実現しないファイルがあった場合にブラウザ上では空白となるが、ソースを覗くと404のソースが埋め込まれている。

●ソースを覗くについて こちらはChromeの"view-source:https://example.com を使っています。

該当のソースコード

ちなみに下記の none.txtは空のテキストファイルです。
雑な書き方で恐縮です。そもそもこの書き方であっているかもわかりません。

<?php $id = isset($_GET['id']) ? htmlspecialchars($_GET['id']) : null; if ($id){$data = file("http://example.com/$id.txt");} else {$data = file("http://example.com/none.txt");} srand(time()); foreach ($data as $cont) { $text = mb_convert_encoding($cont,"utf8","utf8"); echo $text; } ?>

拙い説明で恐縮ですが宜しくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/06/10 11:41 編集

こんにちは。 コード拝見しました。 まずインデントを整えましょう! 恐らくみなさん読む気にもなりません。
m.ts10806

2019/06/10 11:54

>素人の質問で 「初心者アイコン」をつけるだけで良いです
m.ts10806

2019/06/10 11:55

また、ドメインは自身が保有しているものでないのでしたら例示ドメイン(example.comなど)を利用してください。 環境情報も追記してください。PHPのバージョン、導入先のOSなど
m.ts10806

2019/06/10 11:58

あと「ソースを覗くと」とはどういう行為でしょうか。具体的に記載してください
ken1_takagi

2019/06/11 00:31

回答ありがとうございます。 ●環境について 分かる範囲で記載します。 PHPバージョン 7.1 OS windows7 サーバー heteml ブラウザ Chrome ●ソースを覗くについて こちらはChromeの"view-source:https://example.com"を使っています。 ※意味が伝わってますでしょうか?
m.ts10806

2019/06/11 00:32

もろもろ含めて質問本文更新していただければと。
m.ts10806

2019/06/13 03:39 編集

「回答を求めています」はいいのですが、既に質問日に回答していますので、そちらご確認ください。
guest

回答3

0

ベストアンサー

http://example.com/directory/index.php?id=aaa

だった場合、予め用意しているテキストファイル名がaaa.txtのファイルが読み込まれるという形です。
実在しないファイルだっ場合は空のテキストファイルを表示させたいです。

空のテキストファイルを表示させる必要がわかりませんが、こんな感じでしょうか。

php

1$id = filter_input( INPUT_GET, "id" ); 2$response = ""; 3if ($id) { 4 $response = @file_get_contents("http://example.com/{$id}.txt"); 5} 6if ($response) { 7 $response = mb_convert_encoding($response,"UTF-8"); 8} 9echo $response;

投稿2019/06/13 07:49

hide0128

総合スコア245

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

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

0

色々と細かいところをツッコミ。

  • htmlspecialchars()は出力時に行いましょう。画面に出力する情報をエスケープするものなので、今のように取得時にしてはいけません。

参考:サニタイズ/入力値検証/エスケープの考え方

  • 直接$_POSTや$_GETを参照するのではなくfilter_input()を使いましょう

参考:filter_input関数を使って簡潔なコードを書こう

  • 「ファイルが存在しない場合」があるのでしたらfile_exits()を利用したほうが良さそうです。PHPが実行されるサーバー内にあるファイルを参照するのでしたら特に。
  • file()は失敗したらfalseを返すので念のため結果がfalseかどうか確認してください。

「ブラウザ上では空白となるが」とありますが、エラー表示OFFにしていて空白なのか何も出力指示をしていないから空白なのかパッと見わからないので失敗した場合でも何か出力するようにしてください。

  • mb_convert_encoding()使うのはいいのですけど、utf8→utf8って変換してないから意味なさそうです。

もし全角文字列が入ってくるのでしたら対象のテキストファイルとプログラムファイルの文字コードにあわせて適宜対応入れてください。

php

1 $text = mb_convert_encoding($cont,"utf8","utf8"); 2 echo $text; 3 4//その場で出力するなら変数に受けなくても良いのでは

投稿2019/06/10 13:22

m.ts10806

総合スコア80850

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

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

0

該当のソースコード

<?php //$_GET['time']が存在していれば if(isset($_GET['id'])){ //idの条件がある場合 //echo 'IDが入力されました<br>'."\n"; //idがあった場合にパスを参照する。パスはサーバーパスを入力。 $filename = '/example/'.$_GET['id'].'.txt'; if (file_exists($filename)) { include($filename); } //ファイルがない場合の記述 日本語表記はダブルクォーテーションの間に入れておく。 else { echo ""; } } //idの条件がない場合 else{ echo 'てきすとなし'; } ?>

投稿2019/06/13 09:49

ken1_takagi

総合スコア15

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

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

m.ts10806

2019/06/13 11:16

回答も質問と同じくマークダウン使えます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問