• ベストアンサー

PHPのみでDBの様な使用は可能でしょうか?

いつも適切な回答ありがとうございます。 独自ドメインのレンタルサーバーでHPを運用しているのですが、 SQL(MYSQLやポステージ)が使える環境ではありません。 PHPのみです。 このような環境のままでDBのようなことができないかと今、大変思案している日々です。 やろうとしていることは、 「HP内のある箇所を日時により表記を変えたい」です。 具体的には商店のサイトで 7月16日 10時はOOの商品セール中!11時30分はOOの商品セール中! 7月17日 15時はOOの商品セール中!21時はOOの商品セール中! というようにHP内のある部分のみ指定日時で表記を変えたいのです。 今、自分ではこのように変更したい箇所に埋め込んでます。 <?php //更新情報☆ $a = 200507161035; $b = 200507161050; $c = 200507161300; // if ( $a > date(YmdHi)) include "php/whatsnew.php"; // else if ( $b > date(YmdHi)) include "php/whatsnew1035.php"; // else if ( $c > date(YmdHi)) include "php/whatsnew1050.php"; // else include "php/whatsnew1300.php"; ?> ただ、これだと24時間分以上作らねばならないし(24時間営業なので)かなり長くなります。昼間などは分単位でも商品情報を入れ替えたい為。 もっと効率のよい方法を考えているところです。 だらだらした説明で申し訳ないのですが、 どなた様かよいアイデアお持ちでしたら是非ご教授を願いたいと思っております。 よろしくお願いします。

  • PHP
  • 回答数6
  • ありがとう数5

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

  • ベストアンサー
  • YSW
  • ベストアンサー率23% (33/141)
回答No.2

ちょっと不親切だと思ったので具体的に書きます。 例えば、 200507161035,OOの商品セール中! 200507161050,××の商品セール中! 200507161300,□□の商品セール中! というデータを作ります。(「,」じゃなくてタブの方がいいです) それをdata.csvと言うファイルに保存したとして、 $datas=file('data.csv'); foreach($datas as $one_data){  list($time,$text)=split("\t",$one_data);  if($time > date(YmdHi)){   $hour=substr($time,8,2)*1;   $minute=substr($time,10,2);   print $hour.'時'.$minute.'分は、'.$text;   break;  } } のように出来ます。 (ソースをコピーする場合、全角スペースが入っているのでご注意を) データ書き込み用のページを作る場合はsplitでなくjoinを使います。

fran-go
質問者

お礼

ありがとうございます! わからない関数substrなど自分でも検索しながら 書いていただいたものを勉強させていただいています。 この場合、実質DBにあたるdata.csvには画像やHTMLタグは書き込み可能なのでしょうか?.csvとは聞きなれない拡張子で勉強不足を痛感しております。 もう少し、ご教授いただけると幸いです。

その他の回答 (5)

回答No.6

No.4です。 PHP5ではSimpleXML関数により簡単にXMLを扱う事ができます。 $root = simplexml_load_file('***.xml'); でXML構造が$rootにはいります。 year要素へのアクセスは$root->year[$i];(yearが複数あるため配列) year要素のnum属性には$root->year[$i]['num']; itemへは$root->year[$i]->month[$i]->day[$i]->item[$i] とforeach文の中で行えばいいと思います。 ただ、マルチバイト文字への対策でinternal_encoding変換して出力する必要があります。 PHP4の場合、いきなり難易度がぐーんと上がってしまいますが。 PEARをインストールし、/PEAR/XML/にXML_Treeパッケージがなければ個別に取得します。 SimpleXML同様に記述が簡単で各要素を連想配列によって扱えるので、慣れてしまえば便利ではないでしょうか。

参考URL:
http://pear.php.net/manual/ja/
fran-go
質問者

お礼

PHP5すごいですね。 わたしは、4なのでちょっとすぐには使えそうにない話ですが、 大変!役に立つ内容でPHP自体バージョンをあげようかと検討したいと思います。 ありがとうございました。

  • YSW
  • ベストアンサー率23% (33/141)
回答No.5

> 実質DBにあたるdata.csvには画像やHTMLタグは書き込み可能なのでしょうか? 可能です。CSVは、単なるテキストファイルです。.csvの拡張子を使うメリットとしては、WindowsでExcelに関連付けされていることくらいです。別に.csvでなくても、.txtでも拡張子なしでも何でもいいです。 ただしExcelで開く場合、「"」などが勝手に消されたり、さまざまな「おせっかい」が起こる可能性もありますので注意してください。

fran-go
質問者

お礼

なるほど! 早速、私のサイトで練習してみます! 思い切って質問してみてよかった!! もし行き詰った際にはまたご指導いただけると幸いです。 ありがとうございました!!

回答No.4

以下を***.xmlとして保存。 PHP からnew XML()として、目的の情報を取得してください。分単位でファイル名の指定までできるはずです。 <?xml version="1.0" encoding="Shift_JIS"?> <root> <year num="2005"> <month num="12"> <day num="31"> <item hour="08" minute="00" file="nenmatu.php">年末大セール中!</item> </day> </month> </year> <year num="2006"> <month num="1"> <day num="1"> <item hour="10" minute="30" file="newyear.php">新春大セール中!</item> <item hour="11" minute="00" file="motituki.php">餅つき大会!</item> </day> </month> </year> </root>

fran-go
質問者

お礼

XMLという手もあったのですね! ありがとうございます!

  • taseki
  • ベストアンサー率66% (155/233)
回答No.3

> SQL(MYSQLやポステージ)が使える環境ではありません。 DBはSQLだけではありません。DBMあたり使えませんか?ほとんどのレンタルサーバーでは、何かしら使えると思うのですが。

fran-go
質問者

お礼

DBMですか!はじめてききました。 すぐググってみます!! ご親切にありがとうございます!!

  • YSW
  • ベストアンサー率23% (33/141)
回答No.1

データ数やアクセス数がそれほど多くないなら、テキストファイル(CSVファイル)を使ってできます。 レンタルサーバにDBがついていない頃は、それが普通でしたね。 つまりEXCELなどで、データを作り、CSV形式で保存します。 それをfile関数で読み取って、splitで分解して、変数に入れていけば、DBのように使えます。 同じように書き込みも出来ますので、書き込み用の管理画面を作ることも可能です。

fran-go
質問者

補足

ありがとうございます。 そんな方法もあるのですね! 手探りながらも教えていただいた言葉を頼りに自分でも調べてみようと思います。 もし、許されるならばもう少し詳しく教えていただけると幸いなのですが。 なによりレスいただけたことに感謝です。ありがとうございます!

関連するQ&A

  • 外部の変数や<?php ?>間のデータを読み込んだり、加工したり出来ますか?

    いつも助けてもらってありがとうございます。 おかげでPHPにも少しずつでもわかっていくことが出来ました。 少し知恵を分けてもらえるとありがたいです。 PHPで3箇所のページをタイマーで切り替わるようにしたいと思っています。 まず、timerというファイルに切り替えたい時間を書きました。 timerのファイルの中には 200511302100 の一行だけ書いています。 そしてこちらのPHP文章を切り替えたいページに載せています。 <?php $time_1 = file("../php/timer"); foreach($time_1 as $time_data); $a=$time_data; if ( $a > date(YmdHi)) include "a.html"; else include "b.html"; ?> 11月30日の21時になったらaというページからbというページに切り替わるようにしています。 これと同じ事を3箇所のページにも付けたいのとおもっています。 同じスクリプトを書くよりも上記スクリプトを3個所で使いまわせたら大変便利なのですが、 可能でしょうか、自分では出来そうで答えが出せませんでした。 要するに外部ファイル内の変数や上記のようなスクリプトを取り出したり加工したりしたいんです。 どなたか無知な自分にアドバイスいただけると幸いです。

    • ベストアンサー
    • PHP
  • PHP+MySQLによるINSERTについて

    質問させていただきます。 先日からPHPよりSQLテーブルへの値の追加を試しているのですが、なかなかうまくいきません。いろいろなサイトで資料を探しましたが、それでもできませんでした。 //問題個所 $sql = "INSERT INTO whatsnew(date,title,body) VALUES('.$ThisTime.','.$Title.','.$Body.')"; $result = mysql_query($sql); date、title、bodyは(dateも含め)すべてTEXTです。ちなみにエラーが出るのではなく、何事もなかったかのようになりました(直後にif(!$result){print 'INSERT Error!';}を挿入するとINSERT Error!と表示される)。 どうすればいいか教えていただければ幸いです。

    • ベストアンサー
    • MySQL
  • PHPで日付の入力内容をチェックするには

    PHP初心者です。 テキストボックスに入力された発売日をチェックしてMySQLのDATATIME形式の発売日のフィールドにデータを突っ込むプログラムを組んでいるのですが 1、DATATIMEは4-2-2の形式なので、この通りかチェックしたい 2、発売日が不明な場合は空欄でもOKにしたい 3、入力はされているが4-2-2の形式以外の場合はエラーメッセージを出したい 4、入力された数値が4-2-2の形式でも存在しない日付の場合もエラーメッセージを出したい 以上のことを踏まえて if ($_POST['sale'] == '') { $error['sale'] = 'black'; <input type="text" name="sale" size="10" id="sale"> <?php $sale = mb_convert_kana($_REQUEST['sale'], 'a', 'UTF-8'); if (preg_match("/^\d{4}\-\d{2}\-\d{2}$/", $sale)) { echo htmlspecialchars($_POST['sale'], ENT_QUOTES, 'UTF-8'); } else if ($error['sale'] == 'blank') { echo htmlspecialchars($_POST['sale'], ENT_QUOTES, 'UTF-8'); } ?> 1、2までは何となくできたのですが3のエラーメッセージを出す場合CSSで文字の色を変えたいので <p class="error">* 発売日は 空欄 もしくは 2010-01-01 の形式でご記入ください</p> HTMLでこれを入れる場合、どのようにプログラムを組めばよいのでしょうか? 単純に考えれば if ( ) { } else if ( ) { } else { } みたいな感じになると思うのですがそうするとPHPの中にHTMLを記述しないといけなくなります。 自分はまだPHPの中にHTMLを記述する方法は知りません。 また、4の機能も付ける場合どのようにプログラムを組めばよいかわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpのパス指定

    初めてphpを触っています。 いくつかの処理を外部ファイルにしたいのですが パスの指定が悪いのか、同じ階層に置いたり、いろいろ試してもfatal error ばかりです。 どこが悪いのか、教えていただけないでしょうか? サンプルとして、moto.phpのなかのincludeフォルダー内の外部ファイル:func.phpを実行することとします。 moto.php <?php require "./include/func.php"); $a = 2; $b = 1; $c = $a - $b * $a; echo return_word($a); echo "<br>"; //改行 echo return_word($b); echo "<br>"; //改行 echo return_word($c); ?> func.php <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> コマンドラインから php moto.php を実行すると <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> Fatal error: Call to undefined function return_word() in C:\xxxxxx\php\moto.php on line 9 となってしまいます。 外部ファイルは見えているようなのに、どうして関数がundefined になってしまうのでしょうか? phpの基本的なことなのかもしれませんが よろしくアドバイスお願いできればと思います。

    • ベストアンサー
    • PHP
  • PHP4でXML

    こんにちは。PHPでXMLファイルを書き換えたいのですが、サーバ環境がPHP5ではありません。以下のようにHTMLと同じ方法でphpファイルを読み込むことは不可能なのでしょうか?だとしたら他に良い方法はありますか?困っています。どなたか助けてください。よろしくお願いします。 <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>○○1</title> <link>http://○○</link> <description>ウェブサイトに掲載されている最新の情報を掲載しております。</description> <language>ja</language> <copyright>Copyright (c) 2007 ○○, Inc. All Rights Reserved.</copyright> <pubDate><?php include("../rss/date.php"); ?></pubDate> <item> <title>ニュースリリース</title> <link>http://○○</link> <description><?php include("../rss/news.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> <item> <title>商品一覧ページ</title> <link>http://○○</link> <description><?php include("../rss/prodact.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> <item> <title>沿革</title> <link>http://○○</link> <description><?php include("../rss/corporation.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> </channel> </rss>

    • 締切済み
    • XML
  • PHPでMySQLのDBに接続

    PHP,MySQLが使えるレンタルサーバーを借りているのですが, PHPでMySQLに接続し、php_dbを選択をするようにしたいのですが、 この時DBファイルはどこに置けばいいのでしょうか? 現在はMySQLの管理コマンド(?)とは別にpublic_htmlの中に PHPフォルダを作り、そこにDBファイルを入れています。 PHPのスクリプトは <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>練習</title> <meta http-equiv="content-language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head><body> <?php $con = mysql_connect(); if (!$con) { echo ("Error:MySQLに接続できませんでした。<br />"); } else { echo ("接続ID=$con<br>\n"); } $selectdb = mysql_select_db("php_db" ,$con); if (!$selectdb) { echo ("Error:データベースを選択できませんでした"); } else { echo ("データベースphp_dbを選択しました。"); } ?> </body></html> としています。 MySQLには接続ができるのですが、php_dbには接続ができません。 php_dbのおき場所を変えるのか、ファイルの指定が間違っているのか その他、どの要に変更をしたらよいのでしょうか? お願いします。 環境はレンタルサーバーがLINUXでPHPのバージョンなどはわからないんです・・・!! 開発がOSがW2kでFTPで転送してます。

    • ベストアンサー
    • PHP
  • aフォルダ内のPHP文章を一階層したのbフォルダで使うには?

    こんにちわ。 せっかく書いたPHP文章をほかのフォルダでも(一階層したでも)使い回したいと思っています。同じ文章を書いて貼り付けるよりは効率がいいと考えました。 ↓これを使いまわしたいのです。 <?php $a = file("../jikan.php"); if ( $a> date(h)) include "oshirase.html"; else include "sonota.html"; ?> ただ階層やフォルダが変わってしまうと../jikan.phpの位置が変わってしまいします。../jikan.phpが../../jikan.phpとしなければならなかったりするわけです。 htmlの方はこちらのスクリプトを使うところはすべて 指定した時間のみoshirase.htmlが出るようにしたいのでこのままでいいのです。 fileで読み込むと配列に入れられてしまうし file get contentsだと取り込んでechoするとPHP文章ごと表示されてしまうしうまく変数にとりこんでjikanの階層のみ../を../../など度置換し実行させる方法をずばり知りたいです! よろしくお願い致します!!

    • ベストアンサー
    • PHP
  • PHPについて教えてください。

    こんにちは。いつもお世話になります。shingetsuです。先日もPHPについて質問させていただいたのですが、また別のことで行き詰ったのでよろしければアドバイスをいただければと思います。よろしくお願いします。 if(!$_POST['name'] OR !$_POST['passwd'] OR !$_POST['address'] OR !$_POST['tel'] OR !$_POST['email']){ echo ("空欄があります。すべて記入して下さい。"); }else{ echo ("登録ありがとうございます。"); } というプログラムで、「登録ありがとうございます。」という箇所を別のPHPに誘導できるリンクにしたいのですが、どのような方法がありますでしょうか。 HTMLを使えば可能なわけですが、PHPとなるとどうなるのかわからなくなりました。簡単なヒントなどでもよろしいので教えてください。お願いします。

    • ベストアンサー
    • PHP
  • upload.php内のページ転送について

    header Locationの転送について教えてください。 PHPファイル内で画像プレビューを表示させ ページ転送を行いたいです。 しかし、プレビューが表示される部分に 転送先の<header>(html5)の内容が表示されてしまいます。 どこが悪くてどう直せば良いのでしょうか? どなたか教えてください。 <?php header("Location: http://www.********.com/"); ?> <?php //前にアップロードされた写真のファイル名 $postPhotoName = $_POST["postPhotoName"]; $result = false; if($_FILES['img']['name'] == "") { die("ファイルがないぜよ。"); }else{ //アップロードされたファイルの情報を取得 $fileName = basename(date("U")."-".$_FILES['img']['name']); $fileType = $_FILES['img']['type']; $fileTmpName = $_FILES['img']['tmp_name']; if(!preg_match("/jpeg/",$fileType)){ unlink($fileTmpName); die( "jpegじゃないぜよ。"); }else{ //ファイルの保存 if (!move_uploaded_file($fileTmpName, 'thumbimg/' . $fileName)) { die('保存にしっぱいしたぜよ。'); } else { //サムネイル作成 include('class.image.php'); list($width, $height, $type, $attr) = getimagesize('thumbimg/'.$fileName); $thumb = new Image('thumbimg/'.$fileName); $thumb->name('thumb-'.basename($fileName,".jpg")); if($width>$height){ if($width > 380) $thumb->width(380); }else{ if($height > 400) $thumb->height(400); } $thumb->save(); $result = true; } } } if($result == true){ ?> <img src="<?php echo 'thumbimg/thumb-'.$fileName;?>"> <input type="hidden" value="<?php echo $fileName?>" name="postPhotoName" id="postPhotoName"> <?php }

    • 締切済み
    • PHP
  • JavaScriptの条件文の応用

    JavaScriptの条件文の応用について、アドバイスをお願いします。 if文は、ある条件を満たす時だけ命令を実行します。 if~else文は、ある条件を満たす時だけ命令を実行し、それ以外の場合はelse以下の命令を実行します。 if~else if~else文は、if~else文のある条件を複数用意したものです。 switch文は、if~else文を更に複数用意したものです。 それでは、ある条件"だけ"を満たす時だけ命令を実行させたい場合、どのように条件文を書けばいいのでしょうか。 具体的には、スレッド型掲示板で、「返信なし親記事だけ:空白」の時だけ投稿日時を表示するようにさせ、「返信あり親記事:oya」の時には投稿日時を表示させないようにしたいのです。 そして、返信がある場合には、投稿日時の欄に「最後のレス:end」を表示させるようにしたいのです。 掲示板は、http://bbs.sekkaku.net/bbs/23.htmlです。 20時間ぐらいあれこれやっているのですが、妙案が浮かびません。例えば、以下のような書き方もしています。 この書き方の場合、投稿日時は返信ありの場合も親記事の投稿日時が表示され、返信の投稿日時は、別の欄(返信数)に表示されてしまいます。 しかし、少し書き方を変えると、親記事の投稿日時が一切表示されず、返信の投稿日時は、別の欄(返信数)に表示されたままです。 【BASE】の関連部分 <SCRIPT type="text/javascript"> <!-- var mode = "$mode"; if (mode != " "){ document.write('$date_year/$date_mon/$date_day($date_week2) $date_hour:$date_min'); } // --> </SCRIPT> 【RES】の関連部分 <SCRIPT type="text/javascript"> <!-- mode = "$mode"; if (mode != "end"){ document.write('$date_year/$date_mon/$date_day($date_week2) $date_hour:$date_min'); } // --> </SCRIPT>

専門家に質問してみよう