• ベストアンサー

ファイルに書き込むためのPHPを教えてください

いつもお世話になります。PHPの初心者です。 フォームの一部($text)からデータを受け取って、ファイル(log.cgi)に書き込むPHPを作りましたが、うまく作動しません。 どなたかお分かりになるかた教えてください。 //保存用ログファイル define('DE_LOGFILE', 'log.cgi'); $logtext = @file(DE_LOGFILE); //ログに書き込む $handletext = @fopen(DE_LOGFILE, "w") or _error_page(DE_LOGFILE.'に書き込めません'); fwrite($handletext, $text); @fclose($handletext);

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

  • ベストアンサー
回答No.3

@でエラー出力を避けているので、@を取ってみれば原因が掴みやすいです。 恐らく、パーミッションエラー(権限がない)だと思いますが。 該当ディレクトリのパーミッションを変更してみて下さい。

future-boy
質問者

補足

ご回答頂きましてありがとうございます。 @をとってみてもエラー表示がされませんでした。 パーミッション777と755でやってみましたが、やはり同じ結果でした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

#3です。 エーラを全く出さないようPHPの設定も可能ですが、恐らく問題はそこではないかもしれませんね。別のところに問題があるかもしれません。 以下ピント外れだったら読み飛ばして下さい。 > フォームの一部($text)からデータを受け取って echo $text; これでフォームの内容が表示されますか? 表示されないようでしたら、ひょっとしてフォームからのデータ受け取りに問題があります。フォームからの変数は、 var_dump($_REQUEST); あたりで確認出来ます。 古いドキュメントでは、register_globals = on 設定なので、<input type="text" name="text" />の場合に単純に$text として表している場合がありますが、セキュリティ上問題があるのでpostの場合$_POST["text"]、getの場合$_GET["text"]の中に格納されます。念のため。

全文を見る
すると、全ての回答が全文表示されます。
  • Hardking
  • ベストアンサー率45% (73/160)
回答No.2

動作環境がUNIX系OSならば 書き込み保存するディレクトリーの 書き込み権限は書き込み可となっているでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

おおむね問題なさそうですがなにか問題か疑問でもありますか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP5のsimplexml_load_fileで取得した結果をファイルに書き込みたい

    よろしくお願いします。 PHP5でSimpleXMLを利用して得られた結果をファイルに書き込む、つまりキャッシュを保存したいのですが、以下のようにやっても作成されるファイルは空のままです。ディレクトリモードは755です。 $url = "http://hoge.co.jp/index.php?a=123"; $cache_file = md5($url); $xml = simplexml_load_file($url); $fp = fopen($cache_file, 'w'); fwrite ($fp, $xml); fclose($fp); どうかご教授よろしくお願いします。

    • 締切済み
    • PHP
  • 新規ファイルを作成する

    にはどうしたらいいのでしょうか? <?php $file='gomi.dat'; $in=isset($_POST['in'])?$_POST['in']:'bad'; if(file_exists("$file")) { $a=file("$file"); foreach($a as $value) { echo "$value<br/>"; } } $fp=fopen("$file","w"); // <-------------- fwrite($fp,"$in\n"); fclose($fp); ?> <form method="post" action="<?= $_SERVER['PHP_SELF'] ?>"> <input type="text" name="in"/> <input type="submit" value="send"/> </form> は動きませんが $fp=fopen("$file","w"); // <-------------- を $fp=fopen("$file","r+"); // <-------------- としてあらかじめ空の gomi.dat (モード777)を作っていれば動きます どうしたら $fp=fopen("$file","w"); // <-------------- にしても動くようになるでしょうか?

    • ベストアンサー
    • PHP
  • chmod()で所有者が変わってしまう

    Perlでは新規ファイルを作成してchmod()で属性を変更しても所有者は変わりませんでした。 FFFTPでは、 □/public_html/testdir 名前      属性   所有者 logwrite.cgi  705   1234 log200402.log  700   1234 となるのですが、PHPではFFFTPが、 □/public_html/testdir 名前      属性   所有者 logwrite.php  705   1234 log200402.log  700   99 のように、所有者が変わってしまうのです。 PerlからPHPの移植がうまくいっていないのです。 logwrite.phpのその処理の部分は $fp = fopen($logfile, "w"); fwrite($fp, $logdata); fclose($fp); chmod($logfile, 0700); です。このあとPHPで所有者を99から1234に変更できれば よいのですが、方法が分かりません。 そうでなくとも、所有者が1234のままで chmod($logfile, 0700);が完了できれば問題ありません。 Perlではchmod()で所有者が変わらなかったのに、 PHPではchmod()によって所有者が変わってしまって 元の所有者に戻せなくて困っています。

    • 締切済み
    • PHP
  • CSVデータを読み込み、ファイルにカテゴリを分けて書きこむ

    CSVファイル例 01,0101,○○○,○○○□□,010101, 01,0102,○○○,○○○■□,010102, 02,0201,○○○,○○○□□,020101, ・・・・・ というファイルがあったとすると、 1番目の「01」「02」と、分けて別のファイルに保存がしたいです。 書き込み自体は出来るようなのですが、なぜかループが、番号ごとに1回しかされずに、 log/01.cgi 01<>0101<>○○○<>○○○□□<>010101 log/01.cgi 02<>0201<>○○○<>○○○□□<>020101 となってしまい、全ての生成したファイルには1行しか格納されていません。 ちなみに、csvファイルは1万行近くあります。 ソースはこのような感じです。 $log = "△△△.csv"; # ログ名 $lines = file("$log"); foreach ($lines as $l) { $line = explode(",",$l); $push_line = $line[0]."<>".$line[1]."<>".$line[2]."<>".$line[3]."<>".$line[4]."<>\n"; $LOG[$line[0]] .= $push_line; $cate = $line[0].",,".$line[1]; # サブカテゴリ用 $LOG[$cate] .= $push_line; # カテゴリ用ログを保存 } なお、csvファイルは、 01・・・ 02・・・ 01・・・ 03・・・ のようになっているため、全ての行を読み込むことはしていると思います。 しかし、ログファイルにはなぜか1行分しか書き込まれていません。書き込みの文は以下になります。 foreach($LOG as $key => $value){ $explode = explode(",,",$key); if($explode[0]){ $logfile = "./log/".urlencode($explode[0]).".cgi"; } $file = fopen("$logfile", 'w'); flock($file,LOCK_EX); fwrite($file, $value); flock($file,LOCK_UN); fclose($file); 解決法が分かる方、回答のほどよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでのファイル操作

    Phpで一覧画面を作成しています。 フォームからの情報をリストごと各行でテキストファイルに書き込ませています。 管理画面で削除、変更を行いたいんですが、特定のファイルの行数を削除できないので困っています。 $garls_list = file("./dat/garls_list.php"); $fp = fopen("./dat/garls_list.php", "w"); foreach ($garls_listt as $dat_line => $new_list) { if ($dat_line == $_POST["list"]) { // 何も書き込まない→この行を削除したと同一 } else { fwrite($fp, $new_list); } } fclose($fp); これだとファイルが真っ白になってしまいます。 詳しい方がいらっしゃいましたらご教授お願いします。 . グレード この質問に補足する.

    • 締切済み
    • PHP
  • PHPから書き換え

    尻取りゲーム用に書いたPHPスクリプトの一部ですが CGIに書き換える方法がよくわかりません。 教えていただけませんでしょうか。 ============================================ if(isset($_POST['shiritori'])){ $rest = mb_substr($shiritori, -1, 1, "SJIS"); $hajime = mb_substr($shiritori, 0, 1, "SJIS"); if(($name != "") && ($shiritori != "")){ if($hajime == $key){ setcookie("name", $name, $expire); $key = file($keyfile); $fp = fopen($keyfile, "w"); fputs($fp,$rest); fclose ($fp); $word = "".$shiritori."<hr>"; $lines = file($logfile); $fp = fopen($logfile, "w"); fputs($fp,$word); for($i = 0; $i < $logmax-1; $i++) fputs($fp, $lines[$i]); fclose ($fp); } } else{ print"記入漏れはありませんか<br>"; print"次は<b>" .$key. "</b>から始まる語です。<br>"; } ============================================ どうぞよろしくお願いします。

    • 締切済み
    • CGI
  • 送信ボタンでカウントアップ

    HTMLを表示して、ボタンを押すと数字がカウントされていく仕組みを作りたく悩んでいます。 <html> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <body> <?php $logfile = "./kinen.log"; if( $fn = @fopen($logfile, 'r') ) { $counter = trim(fgets($fn)); fclose($fn); } print( $counter . "本禁煙成功しました<br>"); print( ++$counter . "人目のお客様です<br>"); ?> <form> </form> <?php if( $fn = @fopen($logfile, 'w') ) { fwrite( $fn, $counter); fclose($fn); } ?> </body> </html> リロードで正常にカウントアップされていきますが、ボタンを押して動くようにはできないものでしょうか。 初心者なもので。。宜しくお願い致します。

    • ベストアンサー
    • 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
  • 無料ホームページの鯖でPHPでfwrite出来ない

    無料ホームページのサーバに"php"というフォルダをアップし、その中に"write.php", "text.txt","read.php"というファイルを作って実行させたのですが、 "write.php"で、 $file = "text.txt"; $fp = fopen($file, "w"); if ($fp == FALSE) { print "ファイルオープン失敗<br />"; } else { fwrite($fp, $text); fclose($fp); } を実行しても"text.txt"の内容が変わらない(空のまま)のですが、何がいけないのでしょうか? "text.php"のパーミッションは666で、"php"フォルダは707です。 考えられる原因をご教授下さい、お願いします。

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

    今 ファイルの書き込みを作成しているのですが。以下のプログラムではテキストの方に書き出しされません。何処が悪いのかわかりません。 わかる方教えてください。 <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> ファイルの書込完了とはでるのですが。

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • プリンターXK80でコピーを取ると、全面が黒くなってしまいます。
  • ヘッドクリーナーを使ったり、インクを一度外して付け直したりしても改善されません。
  • 結露の可能性も考えましたが、一日中なのでそれはありえない状況です。
回答を見る

専門家に質問してみよう