PHP vol.18

  • ファイルの読み書き
  • 一行掲示板を作る(1)

ファイルの読み書き

  • fopen/fclose
fopen (パス,オプション);
//ファイルを読む
$fp = fopen (パス,'r');
$contents = fread($fp,バイト数); //指定したバイト数まで読む 
$line = fgets($fp); //一行
//ファイルを書き込む
$fp = fopen (パス,'w');
$contents = fwrite($fp,バイト数); //指定したバイト数まで読む
$line = fputs($fp) //一行
//ファイルを閉じる
fclose($fp);
fopenのモード
r 読み込み専用
w 書き込み専用
書き込み
<?php
$member_list = array(1 => "araki",
                     2 => "enomoto",
                     3 => "fukata"
                     );
$fp = fopen("member_list.txt","w");
foreach ($member_list as $num => $value) {
fputs ($fp,$num." ".$value."\n");
}
fclose($fp);
?>
実行結果
$ php 01.php
$ cat member_list.txt
1 araki
2 enomoto
3 fukata
書き込み
<?php
$fp2 = fopen("member_list.txt","r");
while (!feof($fp2)) {
    $line = fgets($fp2);
    echo $line;
}
fclose($fp2);
?>
実行結果
$ php 02.php
1 araki
2 enomoto
3 fukata
追記
<?php
$member_list = array(4 => "obata");
$fp = fopen("member_list.txt","a");
foreach ($member_list as $num => $value) {
fputs ($fp,$num." ".$value."\n");
}
fclose($fp);
?>
実行結果
$ php 03.php
$ php 02.php
1 araki
2 enomoto
3 fukata
4 obata
一行掲示板を作る(1)
  • いまいち動きがおかしい。
  • はじめの行の表示無効化ができない。

等の問題を抱えています。

<?php
$filepath = './data_bbs.txt';
$fgc = file($filepath);
$scrname = $_SERVER['SCRIPT_NAME'];
if (!empty($_POST['name'])&&!empty($_POST['comment'])){
$bbsid = count($fgc);
$fp = fopen($filepath,'a+');
$w_date = date("n/j(D) G:i:s");
$uhost = $_SERVER['HTTP_HOST'];
$delete_check = 0;
$bbsd = array($bbsid,$_POST['name'],$_POST['comment'],$w_date,$uhost,$delete_check."\n");
$add_bbs = implode(",",$bbsd);
fputs($fp,$add_bbs);
fclose($fp);
header("Location: $scrname");
}
if (!empty($_POST['delete'])) {
    $fp = fopen($filepath,'w');
    foreach($fgc as $value) {
        list($bbsid,$name,$comment,$date,$host,$delete_check) = explode(",",$value);
        if ($bbsid == $_POST['delete']) {
            $delete_check_id = 1;
            $value = $bbsid.",".$name.",".$comment.",".$date.",".$host.",".$delete_check_id."\n";
        }
        fputs($fp,$value);
    }
    fclose($fp);
    $scrname = $_SERVER['SCRIPT_NAME'];
    header("Location: $scrname");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>linebbs</title>
<style type="text/css">
<!--
    #header {
    text-align: center;
    }
-->
</style>
</head>
<body>
<div id="header">
<h1>linebbs</h1>
<p>名前と内容を入力して「発言」ボタンを押してください。</p>
<form method="post" action="">
    名前:<input type="text" name="name" />
    内容:<input type="text" name="comment" />
    <input type="submit" value="発言" />
</div>
</form>
<hr />
<?php
krsort($fgc);
foreach ($fgc as $key => $value) {
    list($bbsid,$name,$comment,$date,$host,$delete_check) = explode(",",$value);
    if ($delete_check==0) {
    echo '<form method="post" action="">';
    echo "名前:".$name." ";
    echo "内容:".$comment." ";
    echo "( ".$date." ) ";
    echo "host:".$host." No.".$key;
    echo '<input type="hidden" name="delete" value="'.$bbsid.'" /><input type="submit" value="削除" /></form>';
    echo "<br />\n";
    }
}
?>
</body>
</html>