• ベストアンサー

テキストデータに関して

お世話になっております。 PHPにてwebアプリケーションを作っており、その中でMySqlなどのDBを使用せず、保存すべきデータは、テキストファイル(.txt)を用いているのですが、URLでそのテキストファイルを直接読み込むと、当然ながらファイルの内容を読まれてしまいますが、ファイルの内容を読まれないようにする設定などはあるのでしょうか? 具体的には・・ .txtではなく、他の拡張子に変更することで、.txt同様の構造が作れるのであれば、それに越したことないが、その場合、ファイルの生成・内容書込みなどを行うPHPのソースは、単に拡張子を変更するだけで良い?また、その.txtに代わる拡張子は? .htaccessなどを用いてファイルの内容を外部から参照できなくする設定があると耳にしたことがあるが、読み書き可能としているファイル(属性606に設定)でも、.htaccessの設置は不具合はないのか? などです。これまでファイルの読み込み・書込みなどをものは作成したことが無く、お恥ずかしい質問かと思いますが、アドバイスなど頂戴できれば幸いです。 お忙しい中恐縮ですが、宜しくお願い申し上げます。

  • PHP
  • 回答数8
  • ありがとう数9

質問者が選んだベストアンサー

  • ベストアンサー
  • nick9090
  • ベストアンサー率26% (102/378)
回答No.8

>ドキュメントルートしか利用できない場合の対処法 対処法は「ない」と考えてください。 厳密に言えば無いこともないですが、あなたのレベルでは無理です。付け焼き刃の対策をすると必ず危険な「穴」が発生します。ファイルの内容を「絶対に」読まれたくないのならば、ドキュメントルート外に置く以外の対処法はありません。 (※ドキュメントルート外に置いた場合でもまた別の危険の可能性はありますが、話が複雑になるのでここでは書きません) ですから、私が既に書きましたように、privateディクレトリが使えるサーバーだけを使ってください。

mayu_chap
質問者

お礼

nick9090さん、こんにちは。 お世話になっております。 はっきりとしたお答え、ありがとう御座います。 あれから、「どうしたものか?」と考えていたので、消去法として「消去法はない」として考えるようにいたします。 お返事が遅れて申し訳ありませんでした。(PCの調子が悪く、ネットに接続できなかった)

その他の回答 (7)

  • nick9090
  • ベストアンサー率26% (102/378)
回答No.7

>私も、ロリポップのほか、エクスエリアを借りているのですが xreaも借りているのですか? それならドキュメントルート外にディレクトリが作れますけど…。 というか最初からprivateディレクトリが存在しているはずです。

mayu_chap
質問者

お礼

nick9090さんへ こんばんは。お世話になっております。 すみません。私の質問が不十分だったのかも知れませんが、ロリポップなどのようにドキュメントルートしか利用できない場合の対処法もアドバイスいただければと、お伺いさせて頂きました。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.6

#4さん惜しい。 拡張子phpではなく、拡張子cgiですよね? テキストファイルの拡張子をphpに変えても、"<?php"という文字(実際には"<?"でもOK)が入っていないと、スクリプトエンジンは処理せずにスルーされてしまいます。 結果、拡張子txtのときと同様、すべてブラウザに送られてしまいます。 1行目に"<?php"を入れる、データとして読み込むプログラムからは、1行目を無視して2行目からデータとして読み取る、と変更をすれば拡張子phpに変更して望みの事ができます。(普通わざわざそんな事しないですが) 拡張子をcgiに変えた場合、直接ファイルを指定して読み込もうとしても、Parlエンジン(通常は拡張子cgiはParlスクリプトと設定されています)がエラーで停止するだけなので、中身を読み取られることはありません。 簡易的な回避方法なので、業務でのプログラム作成であれば、必ずしもお勧めはできないですけど。(お客様に説明するために、なぜこのような拡張子なのか、将来に渡っても安全なのか、といった理論武装が必要になるでしょうね)

mayu_chap
質問者

お礼

BellBellさんへ こんにちは。ご親切なアドバイスをありがとう御座います。 ただいま、BellBellさんのご指摘のように、拡張子をcgiにして確認してみたところ、PHPプログラムにてデータを格納すべくcgiファイルを操作しようとしたところ、エラーとなってしまいました。 私、これまでcgiとは全くの無縁なのですが、cgiファイルを操作するに当たって、特別な記述やサーバーの設定(属性とか格納するディレクトリとか?)が必要なのでしょうか? それと、データを格納すべくファイルの拡張子をphpとしたところ、確かにブラウザから中身を見ることが出来たのですが、これも全てではなく、見れるものと、見れないものがあることを確認いたしました。 多くの皆さんのアドバイスをいただきながら、解決できずに居る状況に恐縮ですが、宜しくお願い申し上げます。

  • nick9090
  • ベストアンサー率26% (102/378)
回答No.5

私はロリポップを借りたことがないので実際に確かめたわけではないのですが、Googleで検索する限り、ロリポップではドキュメントルートより上にディレクトリを作ることが出来ないみたいですね。 http://www.google.co.jp/search?q=%E3%83%AD%E3%83%AA%E3%83%9D%E3%83%83%E3%83%97%E3%80%80%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%83%AB%E3%83%BC%E3%83%88&btnG=%E6%A4%9C%E7%B4%A2&hl=ja&rlz=1B3GGGL_ja___JP202&sa=2 その場合でもいろいろやり方があるとは思いますが、やっぱり簡単かつ安全なのはpublicでなくprivateなディレクトリが使えるサーバーに乗り換えることですね。ちなみに私のオススメはxreaです。

mayu_chap
質問者

お礼

nick9090さんへ こんにちは。度重なるアドバイスをありがとう御座います。 私も、ロリポップのほか、エクスエリアを借りているのですが、ドキュメントルートしか使えない場合は、どうしたものか?と考えていた次第です。 検索までしていただき、ありがとう御座いました!

  • c_crimer
  • ベストアンサー率34% (12/35)
回答No.4

よくあるのが、テキストだけど拡張子をphpにするタイプですねー。 これだと、ざっくりとした説明ですが、、、テキストデータをサーバが、なに掲示板?日記?解釈したいんだけど、書式が違う!!とエラーになるので、中身は見られません。 これはプログラム内でtxtを検索して、拡張子を変える処理だけで平気です。 拡張子を変えると、winに読めなくなるよ?って怒られますが、中身はテキストなので、全く平気です。 ただし、プログラムによっては、データのバックアップ機能がついていると、ちょっと複雑になるので、素人が手を出すと、動かなくなったり、不具合が出る可能性もある。 他にも、cgiのcgiやplなんかも、表示の途中で処理が必要になるので、中身は見ることはできないと思うけど・・・。 下のお三方が、書かれていないとなると、何か特殊な方法を使えば、見られる・・・かな? あ、ファイルの場所とファイル名が分かれば、外部からでも、テキストファイルを開くphpなら中身を見ることができますが・・・、データのフォルダ名を複雑にすれば、かなり分からないと思うけど。 ただ、サーバの設定によってはフォルダがみえちゃうけど、今や少数派でしょ。

mayu_chap
質問者

補足

c_crimerさんへ こんにちは。ご親切なアドバイスをありがとう御座います。 c_crimerさんのアドバイスをもとに、ソースの書き直しをしていたのでお返事が遅れてしまいました。 当初、私も拡張子をphpにすれば良いのかな・・とは思っていたのですが、「1行目と最終行に記述する<?phpと、?>の処理はどうしたら良いのだろう?」と考えていたのですが、これらの宣言?はなくてもファイルとして機能するのですね。勉強になりました。 が、しかし、#5のBellBellさんのご指摘があり、ブラウザにて該当ファイルを呼び出したところ、中身が見えてしまうものや、見えないものが確認出来ました。 どうしたものでしょうか・・・

  • nick9090
  • ベストアンサー率26% (102/378)
回答No.3

> 通常、多く貸し出されている共有のレンタルサーバーなどにも、ドキュメントルーと以外のディレクトリは確保されているのでしょうか? それはサーバー屋の設定とか使っているOSなどによって千差万別なので、決まった答えはありません。まあ普通はwwwとして公開されるディレクトリ以外のprivateなディレクトリもあると思いますが。 > 現在借りている共有のサーバーは、はじめてのサーバーだったことも手伝い、曖昧な記憶ながらにも、色々と変更しすぎて?ドキュメントルート以外のディレクトリがない状態となっています。 それはどのサーバー屋のどのプランですか? それを書いてくれないと答えようがありません。 あと、Linuxのディレクトリ構成やapacheの設定などについて、軽く検索してまずは調べてみるといいでしょう。

mayu_chap
質問者

お礼

nick9090さんへ こんばんは。早速のお返事をありがとう御座います! >それはどのサーバー屋のどのプランですか? ロリポップを借りているのですが、ドキュメントルート以外のディレクトリの存在がった記憶ありですが、現在はドキュメントルートのみとなっているので、ドキュメント以外のディレクトリの認識が薄かったようです。 ところで、最後にもう一つお伺いしたいのですが、もし、ドキュメントルートしか使えないようなサーバーの場合、テキストファイルを閲覧できないような設定は、諦めるしかないのでしょうか? もちろん、セキュリティを考えれば、nick9090さんの仰るとおり、ドキュメントルート以外で、privateなりのディレクトリを作成すべきなのでしょうが、もし、使えなかった場合の対処などがあったら、今後の知恵としてアドバイスいただければ幸いです。 お忙しい中、度々の質問で恐縮ですが、宜しくお願い申し上げます。

  • nick9090
  • ベストアンサー率26% (102/378)
回答No.2

606などパーミッション云々を言う前に、そもそも公開されているディレクトリ(public_htmlなど)にそのファイルを置くこと自体が間違っています。 直接アクセスされたら困るようなファイルは、公開されていないディレクトリ(たとえばprivateなど)に置くべきです。

mayu_chap
質問者

お礼

nick9090さんへ こんばんは。早速のアドバイスをありがとう御座います。 お恥ずかしい質問、恐縮いたします。 ドキュメントルートから外して設置する認識が欠けていました。 先の#1さんへのお礼でも述べたのですが、通常、多く貸し出されている共有のレンタルサーバーなどにも、ドキュメントルーと以外のディレクトリは確保されているのでしょうか? 現在借りている共有のサーバーは、はじめてのサーバーだったことも手伝い、曖昧な記憶ながらにも、色々と変更しすぎて?ドキュメントルート以外のディレクトリがない状態となっています。 この場合の対処はともかく、通常貸し出されているサーバーのディレクトリ構成を教えて下されば幸いです。宜しくお願い申し上げます。

  • honoka69
  • ベストアンサー率50% (6/12)
回答No.1

ブラウザからアクセスできない場所に.txtを作るというのはまずいのでしょうか? wwwがドキュメントルートだとすると 環境によってパスが変わるのですが、 例えば home/www/hoge.txt ↑ここだとブラウザからアクセスできてしまうので、 home/data/hoge.txt (dataというフォルダは自分で作って下さい) みたいな階層に、テキストファイルを置けばブラウザからは見えません。

mayu_chap
質問者

お礼

honoka69さんへ こんばんは。早速、かつご丁寧なアドバイスをありがとう御座います。 ドキュメントルートを変えればいいのですね・・。 確かに仰る通りでした。 そこで、再度お伺いしたいのですが、通常のレンタルサーバーなどには、ドキュメントルート以外のディレクトリ?は確保されているのでしょうか? 現在2社から共有のサーバーを借りしており、そのうちの一社は初めてサーバーということもあってか、右も左も分からず、気付いたらドキュメントルート以外のディレクトリがなくなっている状態でした。 以上、うろ覚えなのですが、ドキュメントルートが確保されていたのか、それとも初めからドキュメントルートしかなかったのかが分からず、ドキュメントルートから外してファイル等を設置する・・という認識が欠けていたのですが、再度、上記質問にお答えいただければ幸いです。

関連するQ&A

  • テキストファイルについて

    拡張子にtxtのついたものは基本的にプレーンテキストだと認識していますが正しいでしょうか?しかしながら、ウインドウズのメモ帳のみならず、TeraPadのようなよりプログラミングのソースコードを記述するのに適していると言われるエディタでさえもフォント設定のメニューがあります。 ワープロではないいわゆるテキストエディタと言われるものにもこうしたフォントのメニューがあるということは、「txt」という拡張子を持つファイルはプレーンテキストだがそれをエディタで表示する際、エディタがフォントと呼ばれるものを付加しているのだと自分は思っていますが、「txt」拡張子のついたいわゆるプレーンテキストファイルというものであっても、再びそれらのファイルがエディタに読み込まれた時に作成時に設定したフォントが呼び出されるような最低限の情報が「txt」の拡張子のテキストファイルも持っているということでしょうか?そう考えると、フォント情報の全くない完全なプレーンテキストというものが本当に実在するのかよく分からないのですが・・・。「txt」拡張子付きのファイルはやはり何のフォント情報も持たないプレーンテキストであり、プレーンテキストにはそうしたフォントに関する情報は一切付与されておらず、エディタというソフトがそのテキストファイルのフォントに関する情報を覚えていて再び読み込んだとき前のテキスト表示が再現できるといった感じでしょうか?それでも最低限ソースコードを書いた時のフォント情報に繋がる最低限のデータはプレーンテキストというものも持っているのでしょうか? それともそうしたプレーンテキストとフォントの接続はOSがそうした働きをするのでしょうか?そのあたりの仕組みについてよく分かりません。

  • 外部テキストファイルの書き換えと作成について

    外部テキストファイルの操作について悩んでおります。 アドバイスお願いします。 まず、外部テキストファイルdate.txtファイルの中身は以下のような具合です。 2/19 2/18 2/09 2/14 2/17 というたった五行の日付情報です。 この日付情報をユーザーがhtml上(実際はdate.phpというファイルです)で自由に変更できるようにしたいというのが私の処理の理想です。 そこで、この日付情報のそれぞれをhtmlのinput type=textのvalue値として、まず読み込ませて表示させます。 そしてユーザーは5つそれぞれを書き換え、もしくはそのまま変更なしでもかまいませんが、最終的にsubmitでphpに送信します。(自分自身、date.phpに送信します。) そのあと、date.txtファイルがユーザーの指定通りに書き換えられるという仕組みです。 さらに、その書き換えられた際に、date.txtファイルとは別に、updated.txtファイルを生成したいと思っています。(生成というか、常にdate.txtファイルの中身が変更される際に、updated.txtファイルも変更されるようにしたいということです。) そのupdated.txtファイルの中身は、 v_hensu1=2/19&v_hensu2=2/17&v_hensu3=2/14&v_hensu4=2/17&v_hensu5=2/15 というようにしたいと思っています。改行は必要ありません。 date.txtの日付情報を上からそれぞれv_hensu1、v_hensu2に当てはめていって、それぞれを&でつなぐだけです。 以上で処理の流れは完了です。 そこでわからないのは、「最初にdate.txtファイルを開く際に使う関数」と、 次に「date.txtを書き換える際に使う関数」と、 「updated.txtを作るための関数」です。 ファイル操作について、また簡単な例をあげていただけますと幸いです。どうぞ宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • mysql_queryで取得したデータと外部のテキストファイルをマッチングしたい

    mysqlに次のようなテーブルがあります。 テーブル名 : meibo id | name 1 | 阿部 2 | 佐藤 3 | 橋本 そして次のようなテキストファイルがあります。 ファイル名 : blood.txt 1,A 2,B 3,O テーブルのidとテキストファイルの数字を共通項として連携したいのですが可能でしょうか? 具体的には、phpファイルでmysqlからデータを取り出し、blood.txtとマッチングさせて表示したいと思っています。 例えば、次のように記述箇所がある場合、どこでblood.txtとマッチングすることができるでしょうか? $rs = mysql_query("select * from meibo ;"$con); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ echo $rec['name']; //ここに血液型を表示させたい } それとも、そもそもこのようなことはできないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Wordの拡張子docを、一括してテキストファイルに変換したい。

    お世話になります。 ワード文書のファイル名にある拡張子のdocをtxtに変更すれば、テキスト文書になりますが、複数のWORD文書を一回の操作で拡張子をtxtに変更(テキストファイルに)する方法を教えてください。 よろしくお願いします。

  • .htaccessの作成法

    すいません、.htaccessを作ろうとしたんですが、作成の仕方が良くわからないので教えて頂けませんでしょうか? .htaccessを作成する際は、ファイル名は.htaccessまでは良いんですが、ファイルの種類はどうしたら良いんですか? 家はwindowsなんですが、.htaccessを作り保存する際、ファイルの種類で"テキスト文書(*.txt)"と"すべてのファイル"という選択肢があるんですが、ネットなどで見てみると、 "テキスト文書(*.txt)"で保存とありますが、これだと.htaccessの後ろに.txtという拡張子がついてしまうんですが、これでよいんですか? "すべてのファイル"というので保存すると、.txtは付かず、ファイルのアイコンも違うものができるんですがどちらが正しい物なんでしょうか? また、文字コードの選択もあるんですが、これは何を選んだらよいんでしょうか?

    • ベストアンサー
    • CGI
  • 非公開フォルダと属性と.htaccess

    独学でPHPを勉強しています。 認証のパスワードとMySQLのユーザー名とパスーワードをどこに保存すればいいのか分かりません。 [sitemix]というレンタルサーバーを利用しており、[site][blog]フォルダ以外に置けば、 非公開になることが分かりました。 そうすると、確かに、ネット上からはアクセスできませんが、拡張子を何にすればいいのか、属性をどうすれば一番セキュリティ強度が高まるのか分かりません。 掲示板の管理画面に入れる認証パスワード 非公開ディレクトリ上にあるファイル(p.php)属性404 <?php $pass=sha1("pass"); ?> 公開のファイルからアクセス require(../../p.php); if($pass==sha1($_POST('POST送信で受け取った値')){認証チェックが通った場合の処理} 問題は、例えば、p.phpの属性が初期設定の604でも変わらないのでしょうか? 最適な属性が分かりません。 また、拡張子をdatファイルなどにしてfopenで取得しても同じでしょうか? .htaccessは非公開領域でも、使用した方がいいのでしょうか? MySQLに関しては、非公開ディレクリ上にsql.phpを置き属性を404にしています。 <?php $SERV="IPアドレス"; $USER="ユーザー名"; $PASS="パスワード"; $DBNM="データベーススペース名"; mysql_connect($SERV,$USER,$PASS) or die(mysql_error()); mysql_select_db($DBNM); mysql_query('set names utf8'); ?> 認証画面と同じようにして、requireでMySQLに接続して、選択しています。 ネットや参考書では、まず、Passなどを分離してないことが多く、 どうすれば、個人レベルでセキュリティ強度を高めることができるのが書かれていません。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • データを追加するテキストの型

    MySQLを勉強し始めたばかりです。環境はWindows XpにWampServerを入れ、MySQL consoleを起動させています。 データベースにテーブルを作り、同じフォルダーに"data.txt"を入れてデータをテーブルに追加しました。 load data infile "data.txt" into table tablename; 初めはメモ帳で作り、data.txtで保存。上記の通り入力したらエラーが出ました。 次にwordにメモ帳で作った内容をコピーし、書式なしテキスト形式 data.txtで保存し、同じ文で実行したら成功しました。 全く同じ内容(タブも同じ位置)のテキスト形式(.txt)であっても作るソフトにより何か型が違うのでしょうか。2度目の方法で成功しましたが、何が違うのか理解したいので教えてください。

    • ベストアンサー
    • MySQL
  • PHPで複数のテキストファイルを読み込みたい

    PHPを勉強中です。 どうしても自力で解決できないので助けてください。 やりたい事は、 「複数ファイルの内容を読み込み、  それらのデータをcsvのセルに入れたい。」のです。 Aというフォルダに、複数のテキストファイルがあります。 これら各ファイルの内容をそれぞれ取得して 「○○.csv」のB列に上から順々に書き込んでいきたいのです。 Aフォルダに入っているテキストファイルは連番を想定しています。 A/ 0001.txt 0002.txt 0003.txt : フォルダに入っているテキストファイルの数はいろいろです。 3枚のフォルダもあれば100枚のフォルダもあります。 これらのファイルの内容を、それぞれ取得して 用意されているcsvファイルの特定のセルに テキストファイルの数だけ順番に入れていきたいのです。 ○○.csv A列  |  B列  |  C列  | △  |0001.txt内容|  △  | △  |0002.txt内容|  △  | △  |0003.txt内容|  △  | : : プログラムのヒントを教えていただければ嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでのサーバー内へのXML保存について

    現在、テスト用サーバーで作成、動作確認を行ったプログラムをレンタルサーバーに移行しているのですが その過程で、分からない事が発生したので質問させていただきます。 PHPでDomDocumentでXMLを作成し、$dom->save("aaa.xml")と保存したいのですが 上記内容を実行すると、ファイルが保存されません。 パーミッションの設定も問題なく、上記内容をチェックしてもエラーも返らないで書き込んだバイト数を返してきます。 プログラム上は、XMLの作成、保存はうまく言っているようなのですが・・・ 試しに、拡張子をxmlでは無く、$dom->save("aaa.php")と変更するとちゃんと保存されます。 という事は、やはり保存はうまく言ってるはずだと思うのですが・・・ FTPからは、拡張子がxmlでもアップロードできます。 PHPからは拡張子をphpにすると大丈夫だったので試しにtxtにもしてみましたが、txtは保存出来ませんでした。 これは、サーバー側の設定でしょうか? もしそうだとすると、.htaccessで設定可能でしょうか?(.htaccessでの設定をどこまで許可してるかにもよると思いますが・・) 可能な場合は、設定名というか項目名は何になるのでしょうか? 管理会社では特になにか制限はしていないとの事ですが、何が考えられますでしょうか? 以上、どなたか分かる方がいらっしゃったら、ご回答お願いいたします。

    • ベストアンサー
    • PHP
  • エクセルVBA テキストに出力、名前を付けて保存

    エクセルVBA テキストに出力、名前を付けて保存    A  B   C   D 1  aa  bb  cc  =A1&B1&C1 2  dd  ee  ff  =A2&B2&C2 3  gg  hh  ii  =A3&B3&C3 上記エクセルのD列の内容(セルA1~C3が連続したもの)を1行毎にテキストに出力し、 B列の内容をファイル名にしてテキストファイルを多量に自動生成したいのです。 上記エクセルのように3行なら下記の3つのファイルが生成されるといったVBAがほしいのです。 ファイル名がbb.txtで、テキストの内容はaabbcc。 ファイル名がee.txtで、テキストの内容はddeeff。 ファイル名がhh.txtで、テキストの内容はgghhii。 実際は数千行あるので、数千ファイルを一気に生成させたいのです。 どうぞよろしくお願いいたします。