ファイルの書込みができません 教えてください

このQ&Aのポイント
  • ファイルの書き込みを作成しているが、テキストに書き出されない
  • プログラムに何か問題があると思われるが、具体的な原因がわからない
  • ファイルの書き込みが完了していると表示されるが、テキストには反映されていない
回答を見る
  • ベストアンサー

ファイルの書込みができません 教えてください

今 ファイルの書き込みを作成しているのですが。以下のプログラムではテキストの方に書き出しされません。何処が悪いのかわかりません。 わかる方教えてください。 <html> <head> <title>file2</title> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> </head> <body> <?php $file_name="file2.txt"; $fh=fopen($file_name,"w+"); fwrite($fh,"1行目です?n2行目です"); fclose($fh); print "ファイルの書込完了"; ?> </body> </html> ファイルの書込完了とはでるのですが。

  • tadon
  • お礼率42% (3/7)
  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • kalze
  • ベストアンサー率47% (522/1092)
回答No.1

fopen時に例外処理を施していませんが、パーミションの設定が間違っているのではいでしょうか? $file_nameで指定しているファイルが置かれる場所、そのファイルにphpスクリプトの書き込み権限がないのでしょう。 書かれているスクリプトでは、ファイルオープン時の例外処理が施されていないので、ファイルのオープンに成功しようが失敗しようが「ファイルの書込完了」と画面には表示されます。 普通は、fopen時に本当にファイルが開けたかどうかチェックするようにします。 php部分だけ以下記述 $file_name="file2.txt"; if( false == ($fh=fopen($file_name,"w+"))){ print "$file_nameを開けませんでした"; }else{ fwrite($fh,"1行目です?n2行目です"); fclose($fh); print "ファイルの書込完了"; } で、ファイルが開けなかった原因は、ディレクトリのパーミション設定がおかしいのだとおもいますので、確認してみてください。

tadon
質問者

補足

kalzeさんのPHPの部分を移したのですが。実行してみたら何も表示されなかったので。 if( false == ($fh=fopen($file_name,"w+"))) の部分に if(false == '($fh=fopen($file_name,"w+"))') とシングルコーテイションを付け加えたところ 「ファイルの書込完了」表示されました。 「ファイルの書込完了」が表示されてるという事はファイルを開いて 書き込んでいるという事ですよね?

その他の回答 (1)

  • kalze
  • ベストアンサー率47% (522/1092)
回答No.2

何も表示されなかったということですが、エラーはどうでていますか? とりあえず、元々のスクリプトでは、ファイルを本当に開けたのかどうかチェックしてないので、成功・失敗にかかわらず「ファイルの書込み完了」と表示されますよといいたかっただけなので、例示したスクリプト以外にもチェック方法はありますよ。 とりあえずシングルクォーテーションの囲むのは間違っています。 シングルクォーテーションの扱いを考えれば至極当然なのですが・・・。 ファイルを本当に開けているかどうかチェックするようにすれば、別に私の例示したスクリプトにこだわらなくてもよいですよ。 (動作チェックはしてあるんですけどねぇ) 例1) $file_name="file2.txt"; $fh=fopen($file_name,"w+"); if( $fh ){ fwrite($fh,"1行目です?n2行目です"); fclose($fh); print "ファイルの書込完了"; }else{ print "$file_nameを開くのに失敗しました"; } 例2) $file_name="file2.txt"; $fh=fopen($file_name,"w+") or print "$file_nameを開くのに失敗しました"; fwrite($fh,"1行目です?n2行目です"); fclose($fh); print "ファイルの書込完了"; ※例2の方のor後は実際には関数化して、その後の処理に行かないようにするのが正しいのですが、面倒なので割愛。なのでファイルを開くのに失敗しましたの表示後も処理が続くので、その後ファイルの書込み完了という表示もでます まぁやり方は質問者さんがやりたい方法でよいとおもいますので、本当にファイルが開けているのかチェックしてみてください ちなみにPHPのバージョンとPHPがセーフモードかどうか含めた環境は?

関連するQ&A

  • ファイル書き込みの適切なタイミングについて

    ↓fwrite()で、ファイル書込を行いたいのですが、 http://jp.php.net/manual/ja/function.fwrite.php データを、 1行づつファイルに書き出すのと、 1行づつ変数に貯めておき、fclose()の直前で、 1度にファイルへ書込むのとどちらが メモリ効率や書込速度に優れているのでしょうか?

    • ベストアンサー
    • PHP
  • ファイルの読み書きについて教えてください。

    フォームから投稿されてきた内容を、テキストファイルに書き込むphpを作っているのですが、 flock関数で、誰かが書き込んでいるときに他の人が書き込めないようにファイルをロックしたいと思っています。 以下のソースでLOCK_EXとLOCK_UNは正しく動作するでしょうか。 いまいち不安で困っています。 //ポストされてきた内容が$nameに入ります $name = $_POST['name']; $fh=fopen("test.txt","a+"); flock($fh, LOCK_EX); fwrite($fh,"$name \n"); flock($fh, LOCK_UN); fclose($fh); どなたか詳しい方教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • array_filterで空行が消えない。

    こんばんは。 訪問者が入力した検索ワードのデータをとっているのですが、 プログラムの問題か、ファイルの所々が空行になっています。 で、空行を消そうとarray_filterを使って一括で削除しようとしても消えませんでした。 ファイルのデータは何の変化もありませんでした。 ちなみにphpのプログラムは以下のとおりです。 <html> <head> </head> <body> <?php $array = array_filter(file('xteria.txt')); $fh = fopen("file3.txt","w"); for($x=0;$x<4000;$x++){ echo $array[$x]; fwrite($fh,$array[$x]); } fclose($fh); ?> </body> </html> 調べていたら、空行という名前の値が入っているとか何とか記事がありましたが、 さっぱりです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpでテキストファイルへ書き込み

    HTMLでのテキストエリアに記述された内容をPHPを利用して、テキストファイル化したいと考えています。 具体的には、画像上をクリックし、座標値(xとy)をテキストエリアに表示させます。 その表示された座標値をテキストファイルに保存したいと考えています。 以下がソースコードです。 ----- sumple.php ------------------------------ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <SCRIPT type="text/javascript"> function xyget(e){ var box = document.getElementById("xy"); box.value += e.clientX + "\n" + e.clientY + "\n"; } </SCRIPT> </head> <body> <br>画像上をクリック<br> <form name="picture"> <div><img src="sumple.jpg" onclick="xyget(event)" id="pic"></div> <b>座標値</b> <form action="sumple.php" method="POST"> <textarea name="xy" rows="5" cols="5"></textarea> <input type="submit" value="完了"> </form> <?php $content = $_POST['xy']; if ($content) { $fp = fopen('sumple.txt', 'w'); fputs($fp, $content); fclose($fp); print "書き込み完了しました。"; } ?> <br> </body> </html> ---------------------------------------------- テキストファイルはあらかじめ作成してあり、テキストエリアに座標値もちゃんと表示できています。 ですが、完了ボタンを押してもテキストファイルに書き込みがされず、困っています。 お願いします。

    • ベストアンサー
    • PHP
  • PHPでのファイルオープンの仕方について

    いつもこちらで勉強させていただいております。 初歩的な質問になるかもしれませんが、ご教授いただけたら幸いです。 windows7にて、VMware playerという仮想PCを作成するソフトを使い、Ubuntu(Linax)上でPHPの学習を行っております。 聞きたいこととしては、以下のプログラムを実行すると、 OPENエラー test.txt  と表示されるのはなぜなのか、ということです。 <html> <head> <title> ファイルにデータを書き込む </title> </head> <body> <?php $file_name = "test.txt"; $file = fopen($file_name, "a") or die("OPENエラー $file_name"); flock($file, LOCK_EX); $string = "文字列を書き込む"; fputs($file, $string); flock($file, LOCK_UN); fclose($file); ?> </body> </html> 参考書に載っていたプログラムそのまま書いたつもりですが、何がダメなのかが解りません。 設定ファイルか何かに特別なことをしなければいけないのでしょうか? 初歩的な質問になるかもしれませんが、聞ける人がいなく困っております。どなたかご存知の方がいらっしゃったら、教えて下さい。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • HTMLの生成について

    PC画面のTEXTAREAに入力した内容で 携帯用(3キャリア対応)の画面を作成したいです。 一応、それっぽいファイル(HTML)を作成するところまでできました。 こんな感じで問題ないでしょうか? 注意すべき点などありましたら教えてください。 よろしくお願いします。 【test.php】 <? //ファイルの保存場所 $path = "./htmlfile/info/"; //ファイル名称 $name = date("YmdHis").".html"; $head = "<meta http-equiv='Content-Type' content='text/html; charset=shift_jis'>"; if($_POST){ $detail = nl2br(mb_convert_encoding($_POST["detail"], "SJIS", "UTF-8")); $html = <<<HTMLFILE <html><head>$head</head><body><div>$detail</div></body></html> HTMLFILE; //ファイル作成 $filename=$path.$name; touch($filename); //ファイルオープン $fp = fopen($filename,"w"); //ファイル書込み fwrite($fp,$html); //ファイルクローズ fclose($fp); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ファイル生成</title> <body> <table align = "center" cellspacing="0"> <form name="form1" action="test.php" method="post"> <tr> <b>携帯サイト内容</b><br> <textarea cols="20" rows="10" name="detail"><?= $_POST["detail"] ?></textarea> </tr> <tr> <input type="submit" name="con" value="ファイル生成"> </tr> </form> </table> </body> </html>

    • ベストアンサー
    • PHP
  • html テキストボックスに文字が残って困っています。

    html php 初心者ですよろしくお願いいたします。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Pragma" content="no-cache"> <title>ひとこと掲示板</title> </head> <body> <form method="get" action="bbs_form.php"> <input type="text" name="content" size="60"> <input type="submit" value="送信"> </form> <hr> <?php $contents = file_get_contents('aaaa.txt'); print($content); $content = htmlspecialchars($_GET['content']); if ($content) { $contents = "$content<hr>\n$contents"; $fp = fopen("aaaa.txt", "a"); @fwrite( $fp, "$content"."/"); fclose($fp); } $c=0; for($a = 0 ; $a != 10000 ; $a++){ $ss = mb_substr($contents,$c,1); if($ss == "/"){ print("<br><hr />"); } else{ print($ss); } $c++; } $content = ""; ?> </body> </html> このプログラムでテキストボックスに値を入力します。 そしてf5で更新を押すとキャッシュがのこってるせいなのか、 入力していないはずのテキストボックスに値がのこりつづけます。 その値を消してクリアにしたいのですが、 いい方法はありませんでしょうか? よろしくお願いいたします。

  • phpプログラミングについて

    php初心者です。 ファイルをダウンロードして保存するプログラムを作成しています。 ダイアログを表示させる形式をとっているのですが、保存されたファイルが正しく開けないんです。 ワードの場合だとファイルが壊れ、テキストファイルの場合、htmlのコードが一緒に入ってしまいます。 以下にソースコードと、ファイルの表示結果も載せるので、アドバイスお願いします。 [download.php] <html> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"> <title>testdownload</title> </head> <body> テキストリンクの場合<br> <a href = "sample.php">sampleファイルをダウンロードする</a> <br><br> フォームボタンの場合<br> <form method = "post" action = "sample.php"><input type = "submit" value = "download"></form> </body> </html> [sample.php] <html> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"> <title>downloadphp</title> </head> <body> <?php $path_file = "./test2.txt"; $path_file = mb_convert_encoding($path_file,"Shift_JIS","AUTO"); /* ファイルの存在確認 */ if (!file_exists($path_file)) { die("Error: File(".$path_file.") does not exist"); } /* オープンできるか確認 */ if (!($fp = fopen($path_file, "r"))) { die("Error: Cannot open the file(".$path_file.")"); } fclose($fp); /* ファイルサイズの確認 */ if (($content_length = filesize($path_file)) == 0) { die("Error: File size is 0.(".$path_file.")"); } /* ダウンロード用のHTTPヘッダ送信 */ header("Content-Disposition: attachment; filename=\"".basename($path_file)."\""); header("Content-Length: ".$content_length); header("Content-Type: application/octet-stream"); /* ファイルを読んで出力 */ if (!readfile($path_file)) { die("Cannot read the file(".$path_file.")"); } ?> </body> </html> [test2.txt] これはテストです。 [ダウンロード後のtest2.txt] <html> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"> <title>downloadphp</title> </head> <body> これはテストです。 </body> </html> 以上、よろしくお願いします。

    • 締切済み
    • PHP
  • fwrite の文法が間違っていますか?

    どうしてもエラーになってしまいます どこが間違っているかお教え頂けませんでしょうか 宜しくお願い致します $fp_i = fopen($indexphp, "w"); fwrite($fp_i, "<html>\n<head>\n"); fwrite($fp_i, "<title>title</title>\n"); fwrite($fp_i, "<meta http-equiv=\"content-type\" content=\"text/html; charset=Shift_JIS\">\n"); fwrite($fp_i, "</head>\n"); fwrite($fp_i, "<body>\n"); fwrite($fp_i, "<?php\n"); fwrite($fp_i, "$txt = 'test'\n"); fwrite($fp_i, "print'($txt)';\n"); fwrite($fp_i, "?>\n"); fwrite($fp_i, "</body>\n"); fwrite($fp_i, "</html>");

    • ベストアンサー
    • PHP
  • CGIで外部ファイルに書き込みができません

    Perl初心者です。 外部テキストファイルに、HTMLのフォームで入力した情報を書き込み、それを読み込んでHTMLで表示するコードをつくろうとしているのですが、外部ファイルに書き込みができません。(読み込みはできます) コードは以下のとおりです。 #! /usr/bin/perl use strict; my $self = "test.cgi"; my $str = <>; my $filename = "log.txt"; open FH,">$filename"; print FH $str; close FH; my $body; open FH,"<$filename"; my $str2 = <FH>; $body = $str2; close FH; print "Content-type: text/html\n\n"; print <<Q; <html> <head><title>jjj</title></head> <body> <form action = "$self" method = "POST"> <input type = "text" name = "data01" /> <input type = "text" name = "data02" /><br> <input type = "submit" value = "soushinn" /> <hr/> $body </form> </body> </html> Q 環境はMac OS 10.4.11、Apacheを起動して、ローカルでテストしています。 パーミッション等、いろいろ試しましたが、なぜ書き込めないのかよく分かりません。 どなたか原因を教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう