2011年4月20日水曜日

HTMLフォームからの送信

<html>
<head>
<title>10日でおぼえるPHP5入門教室(アンケート)</title>
</head>
<body>
<h1 style="background:#cccccc">
10日でおぼえるPHP5入門教室(アンケート)</h1> 
<form method="POST" action="sendmail.php">
<input type="hidden" name="_email" value="k.narita@naritan.com" />
<input type="hidden" name="_subject" value="10日でおぼえるPHP5入門教室" />
<input type="hidden" name="_result"
  value="<?php print($_SERVER['PHP_SELF']);?>" />
<table border="0">
 <tr>
 <th align="right">名前</th>
 <td><input type="text" name="名前" size="20" maxlength="30" /></td>
 </tr><tr>
 <th align="right">E-Mail</th>
 <td><input type="text" name="_from" size="50" maxlength="255" /></td>
 </tr><tr>
 <th align="right" valign="top">自由記入欄</th>
 <td><textarea name="内容" cols="50" rows="5"></textarea></td>
 </tr>
</table>
<input type="submit" value="送信" />
<input type="reset" value="クリア" />
</form>
</body>
</html>

※$_SERVER['PHP_SELF']とは、実行中のスクリプトのドキュメントルートに対する相対パス
※PHPスクリプトなどで、自身にフォームを送信したい場合などにactionにこの変数を設定することが多いらしい。

<?php
$header_info="From: ".$_POST['_from']."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion();
$body="".$_POST['_subject']."\n\n";
foreach($_POST as $key=>$value){
 if(!strstr($key,"_")){
  $body.="".$key."".$value."\r\n";
 }
}
mb_send_mail($_POST['_email'],$_POST['_subject'],$body,$header_info);
header("Location: ".$_POST['_result']);
?>
mb_send_mail(宛先、件名、本文、追加ヘッダ)

2011年4月18日月曜日

ランダム機能を使っておみくじを作成

<?php
 // おみくじデータの用意
$sample=array("大吉","中吉","小吉","吉","凶");
$kekka =array(
 "大吉"=>"ラッキー!今日は超ハッピー!!",
 "中吉"=>"良かった。今日も元気に頑張りましょう。",
 "小吉"=>"小さな幸せを大事にネ。",
 "吉"  =>"今日も無難に良い1日を…",
 "凶"  =>"今日はおとなしくすごしましょう。");
  // おみくじのシャッフル
shuffle($sample);
?>
<html>
<head>
<title>今日の運勢は?</title>
</head>
<body>
<h1 style="background:#cccccc">今日の運勢は?</h1>

<div style="font-size:14pt;font-weight:bold">
 <?php echo($sample[0]);?>
</div>
<div>
<?php echo($kekka[$sample[0]]);?>
</div>
</body>
</html>

cookieの利用で2回目のアクセスで復元

<html>
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<form method="POST" action="cookie_rec.php">
E-Mailアドレス:
<input type="text" name="email" size="30" maxlength="50"
 value="<?php print($_COOKIE['email']); ?>" />
<input type="submit" value="送信" />
</form>
</body>
</html>


<?php
 setcookie("email",$_POST['email'],time()+(60*60*24*90));
?>
<html>
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>

クッキー"email"を保存しました。
</body>
</html>

setcookie()は、その他のヘッダ情報と共に送信するクッキーを定義します。
ほかのヘッダ情報と同様に、クッキーは、スクリプトによる他のあらゆる出力よりも
前に送信される必要があります(これはHTTPプロトコルの制約です)。
<html><head> タグはもちろん空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。
タイムスタンプ:60秒×60分×24時間×90日により有効期限90日に設定しています。

2011年4月17日日曜日

switch文をif文に置き換えてみる


<?php
switch($_GET['category']){
case "PHP" :
$result="関数主体の手軽に使えるサーバサイド技術です";
break;
default :
$result= "クエリ情報categoryを指定してください";
}
echo ($result);
?>

↓↓↓↓↓↓↓

<?php
if($_GET['category']=="PHP"){
$result="関数主体の手軽に使えるサーバサイド技術です";
}elseif($_GET['category']=="JSP"){
$result="Javaベースの高機能なサーバサイド技術です。";
}elseif($_GET['category']=="ASP"){
$result="Windowsの代表的なサーバサイド技術です。";
}else{
$result="クエリ情報categoryを指定してください。";
}
echo ($result);
?>

確認URLは、http://localhost/ファイル名.php?category=PHP
関数主体の手軽に使えるサーバサイド技術ですと表示されればOK。

変数を活用してみる

<?php
$url="http://www.google.co.jp";
$memo=" インターネット検索エンジンの一つ - google ( $url ) ";
echo ($memo);
?>

表示:インターネット検索エンジンの一つ - google ( http://www.google.co.jp )
変数$memoには変数$urlが含まれているいる場合、ダブルクォーテーションで囲まれている場合は
変数として解釈されます。
シングルクォーテーションに置き換えると
表示:インターネット検索エンジンの一つ - google ( $url )
となります。
※ダブルクォーテーション内で変数を利用する場合、前後に空白を含めないと結果が表示されない
場合があることがわかった。

ベンチマークを測定してみる。

CrystalMark2004R3にて測定してみました。
ベンチマーク環境
CPU Intel(R) Core(TM)2 Quad CPU    Q9550  @ 2.83GHz
マザーボード Gigabyte Technology EP45-DQ6
グラフィックボード ATI Radeon HD 4350 512 MB
メモリー バルク DDR2 533 512MB×2
HDD SATA 500.1GB  Hitachi
光学ドライブ LG DVDRAM GSA-H62N
電源 メーカー不明 450W
OS Windows XP Professional Service Pack 3

http://crystalmark.info/
ローカルおよびネットワーク上のハードディスク、USBメモリ、メモリカード、RAMディスクなど、ドライブとして認識されているストレージのデータ転送速度を測定!!
[2011/02/01] CrystalDiskMark 3.0.1a -新しいディスクベンチマークソフトでも測定。

クエリ情報で、出力する文字を切り替えてみよう

3/30に覚えたswitch分岐処理の復習。
<html>
<head>
<title>クエリ情報を取得する</title>
</head>
<body>
<?php
switch($_GET['category']){
 case "PHP" :
  $result="関数主体の手軽に使えるサーバサイド技術です。";
  break;
 case "JSP" :
  $result="Javaベースの高機能なサーバサイド技術です。";
  break;
 case "ASP" :
  $result="Windowsの代表的なサーバサイド技術です。";
  break;
 default :
  $result="クエリ情報categoryを指定してください。";
}
print($result);
?>
</body>
</html>

xamppで確認してみよう。
URL:http://localhost/~/query.php?category=PHP
URL:http://localhost/~/query.php?category=JSP
※クエリ情報は大文字と小文字を区別を区別するので注意。
クエリ情報は、複数を「&」にて連結可能
例:URL:http://localhost/~/query.php?category=JSP&id=123
$_GETも$_POSTも同様。

フォーム情報取得を作成

取得したいフォームページを作成
送信先の設定に注意。action="送信先.php"
<head>
<title>フォーム情報を取得</title>
</head>
<body>
<form action="output.php" method="POST">
お名前:
<input type="text" name="name" size="20" maxlength="30">
<input type="submit"  value="送信">
</form>
</body>
</html>

送信先.phpページを作成
inputで設定したファイル名と統一することに注意!
<html>
<head>
<title>フォーム情報を取得する</title>
</head>
<body>
こんにちは、<?php print($_POST['name']); ?>さん!
</form>
</body>
</html>

作成完了したら、localにて確認。
こんにちは、「入力された文字」さん! と表示されればOK。

パスワードを入力させる時、伏せ文字にする場合typeをpasswordに設定する。
その他、チェックボックス"checkbox"、ラジオボタン"radio"、プルダウンメニューselectなどに置き換えることで送信フォームのアレンジが可能となります。
通信内容をトレースするためのツール(IE)
http://www.blunck.info/iehttpheaders.html
表示からエクスプローラーバーのieHTTPHeadersを選択するのみ。

2011年4月11日月曜日

フォームをつかってみる

フォームを使っての、PHPでの値の受け取りと記入漏れのチェック方法
isset関数での、ラジオボタンやチェックボックスのチェックが選択されているか確認するのに用いられる。

strlen関数は、isset関数ではチェックが不十分なので、入力場所に入っている
値の長さを取得することでチェックをします。
※日本語は1文字は2バイトとして数えます。

is_numeric関数は、数値文字列であるかを調べるのに使えます。
さらに、strlen関数と組み合わせて、設定桁数達しているか調べるのに利用できます。

preg_match関数は、上記の数値や桁数のパスワードやメールアドレスを、パターンマッチでチェックできます。


<?php
//-------------------------------------------------------
// ■ 初期値設定
//-------------------------------------------------------
$kname = "";
$mail = "";
$pw = "";
$ken = "1";
$seibetsu = "1";
$flg = array("0","0");
$postflg = "0";
//-------------------------------------------------------
// ■ POSTされたとき
//-------------------------------------------------------
if ($_SERVER["REQUEST_METHOD"]=="POST"){
 $postflg ="1";
 //--------------------------------
 // □ 登録
 //--------------------------------
 if (isset($_POST["submit"])){
  //------------------------------------------------------
  // □ $_POSTから値を取得
  //------------------------------------------------------
  $kname = htmlspecialchars($_POST["kname"], ENT_QUOTES); //会員名
  $mail = htmlspecialchars($_POST["mail"], ENT_QUOTES); //メールアドレス
  $pw = htmlspecialchars($_POST["pw"], ENT_QUOTES); //パスワード
  $biko = htmlspecialchars($_POST["biko"], ENT_QUOTES); //備考
  $ken = $_POST["ken"];     //件
  if (isset($_POST["seibetsu"])){    //性別(1:男,2:女)
   $seibetsu = $_POST["seibetsu"];
  }
  if (isset($_POST["flg"])){    //フラグ(0:表示フラグ,1:画像表示フラグ)
   foreach($_POST["flg"] as $key =>$value){
    $flg[$key] = $value;
   } 
  }
  $pic_name = $_FILES["pic"]["name"];    //ローカルファイル名 
  $pic_tmp = $_FILES["pic"]["tmp_name"];    //テンポラリファイルの名前 
  //------------------------------------------------------
  // □ 全角文字を半角に変換
  //------------------------------------------------------
  $mail = mb_convert_kana($mail,"as");
  //------------------------------------------------------
  // □ チェック
  //------------------------------------------------------
  //会員名
  if (strlen($kname)==0){
   echo "会員名が未入力です<br>";
  }
  //メールアドレス
  if (!preg_match("/^[^@]+@([-a-z0-9]+\.)+[a-z]{2,}$/", $mail)){
   echo "メールアドレスに誤りがあります<br>";
  }
  //パスワード
  if (!preg_match("/^[0-9]{1,5}$/",$pw)){
   echo "パスワードに誤りがあります<br>";
  }
  //ファイル
  $path = getcwd();
  if (isset($_ENV["OS"]) && preg_match("/window/i", $_ENV["OS"])){
   $path .= "\\";
  }else{
   $path .= "/";
  }
  if (strlen($pic_name)>0 && strlen($pic_tmp)>0){
   if (is_uploaded_file($pic_tmp)) {
    if (!move_uploaded_file($pic_tmp, $path .basename($pic_name))){
     echo "ファイルのアップロードに失敗しました<br>";
    }
   }
  }

 }
}
?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=euc-jp">
<title>●:5-1 フォームを扱う</title>
</head>
<body>
<h2>フォーム送信テスト</h2>
<?php
//--------------------------------------------------
// ■ 送信された内容を表示
//--------------------------------------------------
if ($postflg=="1"){
 if ($flg[0]=="1"){
  //-------------------------------------
  // ■ 表示フラグがオンの時表示
  //-------------------------------------
  echo "<b>送信された内容</b><br>";
  echo "会員名:$kname<br>";
  echo "パスワード:$pw<br>";
  switch($ken){
   case "1":
    $ken ="北海道";
    break;
   case "2":
    $ken ="青森県";
    break;
   case "3":
    $ken ="秋田県";
    break;
   case "4":
    $ken ="岩手県";
    break;
  }
  echo "住所:$ken<br>";
  if ($seibetsu=="1"){
   echo "性別:男<br>";
  }else{
   echo "性別:女<br>";
  }
  echo "Email:$mail<br>";
  $biko_br = nl2br($biko);
  echo "備考:<br>";
  echo $biko_br;
  echo "<br>";
  //画像
  if (strlen($pic_tmp)>0){
   echo $path .basename($pic_name) ."にアップロードしました";
   if ($flg[1]=="1"){
    echo "<br><img src=\"" .basename($pic_name) ."\">";
   }

  }else{
   echo "ファイルはアップロードされませんでした";
   if (strlen($pic_name)>0){
    echo "(ファイルサイズが30KBを超過しています)";
   }
  }
 }else{
  //-------------------------------------
  // ■ 表示フラグがオンの時
  //-------------------------------------
  echo "送信した内容は表示されません";
 }
}
?>
<hr>
<b>会員登録フォーム)</b><p>
<form action="<?=$_SERVER["PHP_SELF"]?>" method="POST" enctype="multipart/form-data">
<table border="1" width="600" cellspacing="0" cellpadding="0">
<?php
//--------------------------------------------------
// □ 会員名
//--------------------------------------------------
?>
<tr>
<td align="center" width="150" bgcolor="#b2ce77">会員名</td>
<td align="left" width="450">
&nbsp;<input type="text" name="kname" value="<?=$kname?>" size="40">
</td>
</tr>
<?php
//--------------------------------------------------
// □ 住所
//--------------------------------------------------
?>
<tr>
<td align="center" width="150" bgcolor="#b2ce77">住所</td>
<td align="left" width="450">
&nbsp;<select name="ken">
<option value="1"<?if ($ken=="1"){echo " selected";}?>>北海道</option>
<option value="2"<?if ($ken=="2"){echo " selected";}?>>青森県</option>
<option value="3"<?if ($ken=="3"){echo " selected";}?>>秋田県</option>
<option value="4"<?if ($ken=="4"){echo " selected";}?>>岩手県</option>
</select>
</td>
</tr>
<?php
//--------------------------------------------------
// □ 性別
//--------------------------------------------------
?>
<tr>
<td align="center" width="150" bgcolor="#b2ce77">性別</td>
<td align="left" width="450">
&nbsp;<input type="radio" name="seibetsu" value="1"<?if ($seibetsu=="1"){echo " checked";}?>>男性
&nbsp;<input type="radio" name="seibetsu" value="2"<?if ($seibetsu=="2"){echo " checked";}?>>女性
</td>
</tr>
<?php
//--------------------------------------------------
// □ メールアドレス
//--------------------------------------------------
?>
<tr>
<td align="center" width="150" bgcolor="#b2ce77">メールアドレス</td>
<td align="left" width="450">
&nbsp;<input type="text" name="mail" value="<?=$mail?>" size="30">
</td>
</tr>

<?php
//--------------------------------------------------
// □ パスワード
//--------------------------------------------------
?>
<tr>
<td align="center" width="150" bgcolor="#b2ce77">パスワード</td>
<td align="left" width="450">
&nbsp;<input type="password" name="pw" value="<?=$pw?>" size="30"><br>
&nbsp;5文字以下の半角数字を入力して下さい。
</td>
</tr>
<?php
//--------------------------------------------------
// □ 画像ファイル
//--------------------------------------------------
?>
<tr>
<td align="center" width="150" bgcolor="#b2ce77">画像ファイル</td>
<td align="left" width="450">
&nbsp;<input type="hidden" name="MAX_FILE_SIZE" value="30000">
&nbsp;<input type="file" name="pic" size="40">
</font>
</td>
</tr>
<?php
//--------------------------------------------------
// □ フラグ
//--------------------------------------------------
?>
<tr>
<td align="center" width="150" bgcolor="#b2ce77">フラグ</td>
<td align="left" width="450">
&nbsp;<input type="checkbox" name="flg[0]" value="1"<?if ($flg[0]=="1"){echo " checked";}?>>内容を表示する
&nbsp;<input type="checkbox" name="flg[1]" value="1"<?if ($flg[1]=="1"){echo " checked";}?>>画像を表示する
</td>
</tr>
<?php
//--------------------------------------------------
// □ 備考
//--------------------------------------------------
?>
<tr>
<td align="center" width="150" bgcolor="#b2ce77">備考</td>
<td align="left" width="450">
&nbsp;<textarea name="biko" cols="60" rows="10"><?=$biko?></textarea>
<input type="hidden" name="no" value="abc">
</td>
</tr>
</table>
<br>
<?php
//--------------------------------------------------
// □ 登録ボタン
//--------------------------------------------------
?>
<input type="submit" name="submit" value="   登録する   ">
</form>
</body>
</html>


テスト送信したメールをブラウザでメール受信

先ほどメール送信した項目をブラウザでメール出力してみました。
メールサーバーに接続/切断するには、imap_open()、imap_close()関数を使用します。
imap_open(メールボックス,ユーザー名,パスワード,)
メールボックスには、「{ホスト名:ポート番号/プロトコル}メールボックスパス」の形式で指定します。
メールボックスパスには、ユーザーの個人メールボックスを表す「INBOX」が使用できるとのこと。

imap_close()関数は、接続しているメールサーバー切断します。
切断に成功するとIMAPストリームを返し、失敗するとFALSEを返します。

if ($mailcnt > 0){ チェックした結果、メールの受信数が一以上だったら、
受信したメール数だけループ処理します。

imap_header関数で、メールヘッダー情報のオブジェクトを取得します。
imap_fetchbody関数で、メール本文を取得します。ISO-2022-JPからUTF-8に
変換しています。

サンプルコード
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>テスト送信したメールをメール受信</title>
</head>
<body>
<table border="1" cellpadding="5" cellspacing="0" bordercolor="#666666">
<tr bgcolor="#EEEEBB">
<td align="center">No.</td>
<td align="center">件名</td>
<td align="center">名前</td>
<td align="center">E-MAIL</td>
<td align="center">受信日時</td>
<td align="center">内容</td>

</tr>
<tr>
<?php
//------------------------------------
// メールの受信設定
//------------------------------------
$mbox = imap_open("{ホスト名:110/pop3/notls}INBOX", 
"メールアカウント", "パスワード");
if ($mbox){
 $mboxes = imap_check($mbox);
 $mailcnt = $mboxes->Nmsgs;
 if ($mailcnt > 0){
             for ($i = 1;$i <= $mailcnt;$i++){
                 $header = imap_header($mbox, $i);
   $title = htmlspecialchars(mb_decode_mimeheader($header->subject));
   
   $fromdate= $header->date; 
   $from = $header->from; 
   $mailbox = $from[0]->mailbox;
   $email = $from[0]->mailbox."@".$from[0]->host;
   $namae = mb_decode_mimeheader($from[0]->personal);
  
   $content = imap_fetchbody($mbox,$i,1,FT_PEEK);
   $content=$charset .htmlspecialchars(mb_convert_encoding
  ($content,"UTF-8","ISO-2022-JP"));

?>
<tr>
<td align="center"><?= $i ?></td>
<td align="left"><?= $title ?></td>
<td align="left"><?= $namae ?></td>
<td align="left"><?= $email ?></td>
<td align="left"><?= $fromdate ?></td>
<td align="left"><?= $content ?></td>

</tr>
<?php
  }
 }
 imap_close($mbox);
}else{
        echo "メールボックスに接続できませんでした。";
}
?>

</table>
<br><?=$mailcnt ?>件のメールを受信しました<p>

</body>
</html>

下記のようなエラーが表示された場合。
/notlsを追加でエラーが回避され受信成功しました。
$mbox = imap_open("{ホスト名:110/pop3/notls}INBOX",
/notls サーバがそれをサポートしていたとしても、
セッションで start-TLS による暗号化を使用しません。

先日のメール送信をテストしてみました。

送信する文字コードをUTF-8設定してます。
subject = タイトルです。
content = メール本文です。
送信される文章を自由に変更してみてください。

<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>メール送信サンプル</title>
</head>
<?php
//====================================================================
// 4-8 ?
//====================================================================

$mailto = "自分のアドレス";
$subject = "タイトルですよ";
$content = "内容をいれます\nあいうえお\nかきくけこ";
$mailfrom = "From:自分のアドレス";
$mailfrom="From:" .mb_encode_mimeheader("ケント") ." <k.narita@naritan.com>";
if (mb_send_mail($mailto,$subject,$content,$mailfrom)){
 echo "送信完了しました";
}else{
 echo "失敗しました";
}
?>

送信完了しますと、下記のようにoutlookに送信されてきます。

2011年4月8日金曜日

xamppでPHPのフォームからメール送信できない。

メールフォームを作成してみようと思い、まず簡単なメール送信してみようと思って
早速、xamppで実行・・
送信完了しました。成功!!
outlookで確認いくら送受信しても送られてこないなぜ????
ネットで検索
xamppの左メニューにある、Mercury Mailで送信テストが紹介されていたので
送信者、受信者を自分のアドレス、件名、メッセージは適当に。
送信成功と表示!!
outlookで確認いくら送受信してもまたもや、送られてこないなぜ?
調べた結果、php.iniファイル、sendmail.iniに設定が必要なことが
分かった。



php.iniの設定変更【下記参照】C:\xampp\apache\bin\php.ini

■php.ini
[mail function] セクション
sendmail_path = "C:\xampp\sendmail\sendmail -t"
以外はすべてコメントアウトする。

sendmail.iniの設定変更【下記参照】C:\xampp\sendmail\sendmail.ini

■sendmail.ini
[sendmail] セクション
smtp_server= ISPのSMTPサーバ名
smtp_port=587
smtp_ssl=auto
default_domain= ISPのメールドメイン
auth_username= ISPのメールアカウント
auth_password= 上記のメールパスワード
force_sender= 上記アカウントのメールアドレス
hostname= localhostname or computername

■Mercury 起動しない

上記の修正でメール送信ができました。

2011年4月4日月曜日

前回のファイルをフォルダに入れてみよう

前回のファイルを作成したフォルダの中に保存させてみよう!
前回のフィルの読込・書込み方法では、ディレクトリ指定がされていないので、ファイルはプログラムと同じ階層に保存されているのがわかると思います。
※ファイルサイズ表示をしたい場合=filesize(ファイル名)
※ファイルの更新時間表示をしたい場合=date(“Y/m/d H:i:s”,filemtime(ファイル名))

これを違う場所に作成させたい場合は、mkdir関数を使用すると便利です。

TRUE/FALSE= mkdir(ディレクトリ名,パーミッション(デフォルト:0777))
前回のファイルに追加でフォルダ作成のコマンドを打ち込むだけです。

<head>
<meta http-equiv=”Content-type” content=”text/html; charset=euc-jp”>
<title>ファイルの読み書き方法</title>
</head>
<?php
// □ フォルダの作成
$folder = "test";
if (!file_exists($folder)){
mkdir($folder,0755);
}
// □ ファイルの作成
//hh(XX時)をファイル名にする
$filename = "$folder/" .date("H") .".txt";
//追加書き込みモードで開く(ファイルが無いときは作成)
$fh = @fopen($filename,"a");
if (!$fh){
//メッセージを出してスクリプトを終了
exit("ファイル書き込みのオープンで失敗しました");
}else{
//排他ロック
flock($fh,LOCK_EX);
//乱数を保存と日付と区切り文字(.” ==> “)
$msg = date("Y/m/d H:i:s") ." ==> ";
//1から9999までの乱数と改行(¥n)
$msg.= rand(1,9999) ."\n";
//書き出し
fputs($fh,$msg);
//ロックを解除
flock($fh,LOCK_UN);
//ファイルを閉じる
fclose($fh);
}
// □ ファイルを読む
//file_exists関数でファイル名またはディレクトリを確認。
//あればTUREなければFALSE
if (file_exists($filename)){
//読み取りモードで開く。
//@マークは式の前につけるとエラーメッセージを無視します。
$fh = @fopen($filename,"r");
if (!$fh){
//メッセージを出してスクリプトを終了
exit("ファイル読み込みのオープンで失敗しました");
}else{
while(!feof($fh)){
//一行ずつ(改行記号まで)最後まで読み込み
$temp = fgets($fh);
//内容を出力
if ($temp>""){echo str_replace("\n","<br>","★$temp");}
}
//ファイルを閉じる
fclose($fh);
}
}
?>

太文字の部分を修正するだけで、ディレクトリが作成され、そのフォルダの中にファイルが保存されます。

2011年4月1日金曜日

ファイルの読み込み書き込み方法

時刻と乱数データーを書き込み、読み込んむ表示方法
ブラウザーの更新により、同じフォーマットで行が増えて、時刻と乱数が変化するプログラム
※アクセスカウンターやファイルの記録、アクセスログの取得に活用できます。

fopen・・・ファイルを開く
fputs・・・テキスト書き込む
fgets・・・テキストを読む
fclose・・・ファイルを閉じる

<head>
<meta http-equiv=”Content-type” content=”text/html; charset=euc-jp”>
<title>ファイルの読み書き方法</title>
</head>
<?php
// □ ファイルの作成
//hh(XX時)をファイル名にする
$filename = date(“H”) .”.txt”;
//追加書き込みモードで開く(ファイルが無いときは作成)
$fh = @fopen($filename,”a”);
if (!$fh){
//メッセージを出してスクリプトを終了
exit(“ファイル書き込みのオープンで失敗しました”);
}else{
//排他ロック
flock($fh,LOCK_EX);
//乱数を保存と日付と区切り文字(.” ==> “)
$msg = date(“Y/m/d H:i:s”) .” ==> “;
//1から9999までの乱数と改行(¥n)
$msg.= rand(1,9999) .”\n”;
//書き出し
fputs($fh,$msg);
//ロックを解除
flock($fh,LOCK_UN);
//ファイルを閉じる
fclose($fh);
}
//———————————————
// □ ファイルを読む
//file_exists関数でファイル名またはディレクトリを確認。
//あればTUREなければFALSE
if (file_exists($filename)){
//読み取りモードで開く。
//@マークは式の前につけるとエラーメッセージを無視します。
$fh = @fopen($filename,”r”);
if (!$fh){
//メッセージを出してスクリプトを終了
exit(“ファイル読み込みのオープンで失敗しました”);
}else{
while(!feof($fh)){
//一行ずつ(改行記号まで)最後まで読み込み
$temp = fgets($fh);
//内容を出力
if ($temp>”"){echo str_replace(“\n”,”<br>”,”★$temp”);}
}
//ファイルを閉じる
fclose($fh);
}
}
?>

ファイルのモード
r  ・・・読込のみでオープン
r+ ・・・読込/書出し用にオープン
w  ・・・書出しのみでオープン  一行のみ表示
w+ ・・・読込/書出し用でオープン
a ・・・追加書出しのみでオープン 複数行表示
a+ ・・・読込/追加書出し用でオープン

LOCK_SH ・・・解放されるまで他の書き込みNG、読込はOK
LOCK_EX ・・・解放されるまで他の書き込み、読込もNG
LOCK_UN ・・・解放