ファイルを白紙にする方法とは?

このQ&Aのポイント
  • ファイルを一時的に白紙にする処理方法について教えてください。
  • 特定のファイルに書き込みをする前に、一旦ファイルを空にする方法を知りたいです。
  • ファイルを消さずに中身を消したい場合、どのような方法がありますか?
回答を見る
  • ベストアンサー

ファイルを白紙にする

ファイルを白紙にする ファイルを白紙にする 既にアップされている特定のファイルに書き込みをする際、(処理の度に中身が完全に描き変わる必要があるので)一旦白紙にしたいのですが、処理方法が思いつきません。ファイルそのものを一旦消すのは避けたいです。 php 5,Win環境 if (($kakikomi = fopen($kakikomilog, "r+")) !== FALSE) { if (is_writable($kakikomilog)){ if((flock($kakikomi,LOCK_EX))!==false){ $a = file_get_contents($kakikomi); if(strlen($a)>0){ 中身を消す処理 } } } fclose($kakikomi); } また、この後に@fwriteで$kakikomilogに内容を書き込みたいのですが、以下のような疑問があります。 ・8つの項目を書き込みたいのですが、ほとんど単語や数字のうち、ひとつだけは改行を含む文章です。タブかカンマ区切りの方が後の利用がしやすいでしょうか?(長さは5KB程度) この書き込まれた内容はメール送信で使われます。このため、書き込み処理が終わった後に、たとえば$honbunに格納され、sendで送信される、という流れです(メール本文に戻された際、きちんと改行あsれていれば問題ない)。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • cotae_bb
  • ベストアンサー率53% (51/95)
回答No.1

こんにちは fopen($kakikomilog, "w") で開けばファイルサイズを0にして開くのですが、 これではだめでしょうか? 後半は ・HTMLメールにする ・添付ファイルにする などの方法もあります。 タブやカンマで区切って問題ないのであればそちらでも良いと思います。

picicate
質問者

お礼

fopenのwはうっかりしてました。ありがとうございます。 本文の改行保持はPHPMailerライブラリ使用なのでテキストメールです。 (送信段階で使用) str_replaceで<br>にでも一旦変換して保持させます。ありがとうございました。

関連するQ&A

  • php+mysql

    phpからdbに簡易掲示板作成 タイトル、本文書き込み後入力データを下に表示 タイトル 本文 書き込み日時 このように表示させるようにしてますが if ( isset( $_POST['send'] )===true { ここでエラーが出てしまいます。 何が違うのか助言お願いします。 DB側テーブル構成 id subject honbun kakikomi です <?php $link = mysql_connect('localhost','ogawa','taku1106','ogawa'); if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )===true { $subject =$_POST['subject']; $honbun =$_POST['honbun']; $kakikomi =$_PSOST['kakikomi']; if ( $subject !=='' && $honbun !=='' && $kakikomi !=='' ) { $query = " INSERT INTO ogawa ( " ."subject," ."honbun," ."kakikomi" .") VALUES ( " . "'" . mysqli_real_escape_string( $link, $subject ) ."', " . "'" . mysqli_real_escape_string( $link, $honbun ) . "'," . "'" . mysqli_real_eacape_string( $link, $kakikomi) . "'" ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysqli_query($link,$query); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = "SELECT id,subject,honbun,kakikomi FROM ogawa"; $res = mysql_query($link,$query); $data = array(); while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].''.$val['kakikomi'].'<br>'; } ?> </body> </html>

    • ベストアンサー
    • MySQL
  • php+MYSQL

    タイトル 本文 書き込み後保存を押すと 下に書き込み保存されていく形です タイトル 本文 書き込み日時 タイトル 本文 書き込み日時 エラー自体は出てないのですが書き込みが反映されません val_dunpで調べたところ resource(7) of type (mysql result) > このように出てきましたなにか文自体に必要なものがないのでしょうか? <?php $link = mysql_connect('localhost','user','pass'); if (!$link) { die('接続に失敗しました。'.mysql_error()); } $db_selected = mysql_select_db('ogawa',$link); if(!$db_selected) { die('データベース選択に失敗しました。'.mysql_error()); } $res = mysql_query('SELECT * FROM test'); if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; $kakikomi = $_POST['kakikomi']; if ( $subject !=='' && $honbun !=='' && $kakikomi !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," ."kakikomi," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun )."'," . "'" . mysql_real_escape_string( $link, $kakikomi)."'," ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($query,$link); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT id,subject,honbun,kakikomi FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].''.$val['kakikomi'].'<br>'; } ?> </body> </html>

  • 条件文について

    PHPのサンプルを勉強していると 簡単な構文でも「if」などの条件文が 必要以上に使われ故意に複雑にしているように見えます。 -------------------------------------- if(!empty($name) || !empty($naiyou)){ $keijiban = "keijiban.txt"; $fp = fopen($keijiban, "a"); if($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print "ファイル書き込みに失敗しました"; } flock($fp, LOCK_UN); }else{ print "ファイルロックに失敗しました"; } } fclose($fp); } ----------------------------------------- 上記は正しいサンプル構文になるようで、 流れは大体理解できるのですが そんなところまで条件分岐をしなくてはいけないのかな? と思ってしまいます。 初学者の私が上のサンプルと同じ内容の構文を書くとしたら 以下のように条件分岐をできるだけ 少なくして考えてしまいます。 ----------------------------------------- if(!empty($name) || !empty($naiyou)){ $fp = fopen("keijiban.txt", "a"); flock($fp, LOCK_EX); fwrite($fp, $data); flock($fp, LOCK_UN); fclose($fp); }else{ print "エラー"; } ----------------------------------------- 条件分岐をできるだけ多く使うことは 必要なのでしょうか? 条件分岐で詳細に分けるのは どのような利点が具体的にあるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 【PHP】csvファイルへの書き出し(1行追加or1行上書き)について

    【PHP】csvファイルへの書き出し(1行追加or1行上書き)について はじめて利用させていただきます。 現在、PHPにて書き出し処理を作成している者ですが、csvファイルへの書き出しの際に先頭行にスペースが大量に入ってしまい、困っています。 自分なりに調べてみたのですが、原因がわかりません。詳しい方からのアドバイスをお願いしたいです。 【行っている処理】 1.csvファイルを1行ずつ読み込み、配列に格納 2.既存のデータに同じ名前の人が存在する場合は、その行の配列の内容を変更(存在しない場合は配列の末尾に1件追加) 4.現在ファイルにあるデータを削除(丸めこみ)し、配列データを書き書き出し 【ソース】(書き出し処理に問題があると思ったため、それ以外の部分は割愛させていただきます) <?php $filename = 'data.csv'; $file = fopen($filename, "r+" ); $name = array(); if(flock($file,LOCK_SH)){ while( $data = fgetcsv( $file, 1000, "," ) ) {   //配列に格納 } //配列の内容変更or新規に一行追加処理 //現在のファイル内のデータを削除(まるめこみ) ftruncate($file, 0); //1行分のデータをカンマ区切りで結合し、書き出し for($i = 0; $i < $count; $i++){ $ins = $name[$i]; $ins .= ','; $ins .= $number[$i]; //書き込み失敗時のエラー if(fwrite($file, "$ins\n" ) === FALSE){ print("ファイル書き込みに失敗しました"); }else{ //処理なし } } //ファイルロック解除 flock($file, LOCK_UN); }else{ print("ファイルロックに失敗しました"); } 【csvファイルの中身(処理実行前)】 佐藤,1234 田中,12345 中村,9876 【csvファイルの中身(処理実行後)】                       佐藤,1234 田中,12345 中村,9876 以上です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルへの書き込み

    フォームに入力されたデータをCSVファイルに書き込みたいのですが、以下のようにすると追加で書き込みはできるのですが、ずっと改行されずに1行に書き込まれてしまうので、新しいデータを入れる際に改行されるようにしたいのですが、どのようにすればいいでしょうか? $fp = fopen(TEST_FILE,"a") or die("ファイルを開けません\n"); flock($fp, LOCK_EX); fputs($fp, "aaa")."\n"; flock($fp, LOCK_UN); fclose($fp);

    • ベストアンサー
    • PHP
  • phpのlock処理について

    phpのlock処理について 頻繁に書き込みされるファイルが飛ばないようにロックをしているのですが、 (アクセスログを保存) phpのロック処理を調べていると 一方ではこれでよい、もう一方ではこれでは意味がないなど 色々な事が書かれており、いまいち理解できません。 wモードで開くと強固なロックは不可能なのでしょうか。 以下のようにしているのですが ロックの意味はないでしょうか。 //ロック専用ファイルを開く $flock=fopen("lock.txt","w"); //ロック専用ファイルをロック flock($flock,LOCK_EX); //書き込むファイルを連結して代入 $lineall = implode('', $lines); //書き込み用のファイルを開く $fp=fopen($log_file,"w"); fwrite($fp, $lineall); fclose($fp); //ロック用ファイルのロック解除 flock($flock, LOCK_UN); fclose($flock); プログラムが1から私が作成したものではなく、 ちょくちょく消えてしまうことからロック処理をしたいのと 処理の問題でwモードでの書き込みでないとどうもゴミが入ってしまうようですので (r+でやってみましたが空行などのゴミが沢山入ってしまいました) wモードでの強固なロック方法があればと思うのですが・・・。 お手数をおかけしますがご教授いただけますと幸いです。

    • ベストアンサー
    • PHP
  • ファイルにデータを書き込むときにもとのデータを消去

    データを1個のファイルに保存しているのですが、データを更新するときに現在書き込まれている中身を一度消去してから書き込みたいのですが、どのような方法がいいのでしょうか。 $fo=@fopen($book,"r+") or die(); flock($fo, LOCK_EX); ~読み込んで書き込み用のデータ処理~ fseek($fo, 0); fwrite($fo, $buff); flock($fo, LOCK_UN); fclose($fo); と、していますが、先頭に追加されるだけで、これまでのデータが残ったままです。 一度ファイルをまっさらにするか、一度ファイルを削除して新規に作成しようかとも思いましたが、アクセス数が多くなる予定なので、あまり良い方法ではないと考えています。 このような場合、一般的にどうすればいいかご教授願えればと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mb_convert_encodingとUTF

    mb_convert_encodingでUTF-8>JIS変換行う場合 $fileにファイル内容全部が読み込まれた状態で、mb_convert_encoding($file, "JIS", "UTF-8")とした場合、$fileの冒頭に?という文字化けが残ります。 これを削除もしくは表示させないようにするにはどうしたらよいのでしょうか? if(($buf = mb_convert_encoding(file_get_contents("$file"), "jis","utf-8"))<>""){ $file = tmpfile(); fwrite($file, $buf); rewind($file); if((flock($file,LOCK_EX))!==false){ while(!feof($file)){ $str = fgetcsv($file,1000,","); <処理~~~~> } } fclose($file); }

    • ベストアンサー
    • PHP
  • phpのファイル操作について

    ファイル操作について、上手く作動しなくて困っています。 PHPは今勉強している最中で、ほとんど初心者です。 ページを開いたときに、テキストファイルに書き込む操作をしたいのですが、うまくいきません。 ローカルホストで試したときには、きちんと書き込むことができるのですが、 借りているサーバーで試すと、”ファイル書き込み失敗”と出てしまいます。 http://ribbon.to/ こちらのサーバーを借りています。 原因がわからないので、少しでもいいのでお力をいただきたいです。 よろしくお願いします。 ここからPHPです $folder = "hoge"; if (!file_exists($folder)) { mkdir($folder,0733); } $filename = "$folder/".date("m").".txt"; $fh = @fopen($filename, "a"); if ($fh == FALSE) { exit("ファイル書き込み失敗"); }else { // 排他ロック flock($fh, LOCK_EX); // メッセージ作成 $msg = date("Y/m/d H:i:s"); // 書き出し fputs($fh, $msg); // ロックを解除 flock($fh, LOCK_UN); // ファイルを閉じる fclose($fh); }

    • 締切済み
    • PHP
  • PHPのテキストファイルを使った簡素な掲示板

    テキストファイルを使って 簡単な掲示板での書き込み、読み出しのサンプルを練習しています。 書き込み、書き出しは何とかできるようなのですが フォームに何も記入していない状態で送信ボタンを押したり 再読み込みをすると 「さん」の部分だけファイルに書き込まれ、 そして出力されてしまいます。 ------------------------------------------------------------- <div class="obi">このページに関するコメントをどうぞ</div> <div id="form"> <form method="post" action=""> <p><input type="text" name="name">【名前】</br> <textarea name="kakikomi" cols="60" rows="5"></textarea></br> <input type="submit" value="送信"></p> </form> </div> <?php $data = file_get_contents("keiji.txt"); $name = htmlspecialchars(@$_POST["name"]); $kakikomi = htmlspecialchars(@$_POST["kakikomi"]); if(isset($name)){ $name = "$name さん"; $data = '<strong>'.$name.'</strong>&nbsp&nbsp'.$kakikomi.'<hr><p>'.$data.'</p>'; file_put_contents("keiji.txt", $data); echo "<p>$data</p>"; }else{ exit; } ------------------------------------------------------------- フォームに何も記入しなかった場合 テキストファイルになにも書き込みされないようにするには どこを修正したらよいのでしょうか? 難しい構文ではなく初心者でも分かりやすい方法があれば お教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう