PHPでの質問です。


data.datというファイルにデータを記録する初歩的なものを作成しました。

index.html
 <form method="POST" action="regist.php">
 <input type=text name="other" value="abc">
 <input type=submit value=" 書き込み ">
 </form>

regist.php
 $data = $_POST["other"];

 $filename = "./data.dat";
 $file = fopen($filename,"w");
 fputs($file,$data);
 fclose($file);

としているのですがdata.datには何も記録されません。
var_dumpで出力すると$dataにデータが入っているのは確認できます。
試しに$_POSTの部分を直接"abc"とするとdata.datに記録されています。

恐らく初歩的な事と思いますが、なぜdata.datにabcと記述されないのか原因があればアドバイスいただければと思います。

回答の条件
  • 1人3回まで
  • 登録:2008/06/09 15:52:51
  • 終了:2008/06/11 20:14:12

回答(3件)

id:KeyKey No.1

KeyKey回答回数29ベストアンサー獲得回数42008/06/09 16:41:24

ポイント27pt

エラーはでていないですか?

error_reporting("E_ALL");

を書いて実行してみてください。

「failed to open stream」といったエラーが出ているならパーミッションの設定に問題があると思います。

例えばディレクトリは「0777」ファイルは「0666」となります。

(環境により異なります)

また、fopenによってファイルが作成された場合、パーミッション「0644」などで作成され、以降同じプログラムを実行してもファイルが更新できない恐れがあります。

ファイルが存在しないときはfcloseの後に

chmod($filename, 0666);

を実行して書き込めるパーミッションに変更するようにしてみてください。

id:quocard

早速の回答ありがとうございます。

エラーは特に出ていないようです。

<input type=text name="other" value="abc">

上記を複数加えたところdata.datには改行だけが追加されておりました。

文字列とみなされていないとも考えられますが、要素とabcを比較しても同一であることから

原因がよくわかりません。

2008/06/09 17:27:37
id:lets_skeptic No.2

lets_skeptic回答回数13ベストアンサー獲得回数22008/06/09 17:36:10

ポイント27pt

regist.phpに以下の記述が抜けていますが、その他プログラム&HTML自体に問題はありません(ここに添付したものと全く同一のものならば)。

<?php

?>

こちらでも実行しましたが、パーミッションの設定さえきちんと行っていれば、ファイルへの書き込みは行われます。

そうすると、次に考えられるのは文字コードの問題です。HTMLファイルとphpファイルの文字コードを確認し、想定のものになっているか確認するのがいいかと思います(ASCIIなので問題が起こることは考えにくいんですけれども…)。

id:quocard

回答ありがとうございます。

原因については改行コードが問題のようでした。

ちゃんとした改行コードに訂正したところ修正されました。

2008/06/11 20:13:10
id:shintabo No.3

shintabo回答回数45ベストアンサー獲得回数102008/06/10 00:42:56

ポイント26pt

<?php

var_dump($_POST);

$data = $_POST['other'];

$filename = "./data.dat";

if ($file = fopen($filename,"w")) {

fputs($file,$data);

fclose($file);

} else {

echo "error";

}

?>

/* これだとOKなので、var_dumpを出力した結果と、完全なソースを教えてください */

/* 余談ですが、エラーは必ずフックした方がいいと思います < if ($file = fopen みたいな */

id:quocard

回答ありがとうございます。

問題は改行コード部分に問題がありました。

文字コードは問題なかったのですが、改行コードがSJISのものになっていたようです。

2008/06/11 20:13:58
  • id:tezcello
    いくつか確認したいです。

    var_dump($_POST['other']) の結果は、string ですよね? array では無いですよね?

    $count = fputs($file,$data);
    var_dump($count);
    のようにして、書き込んだバイト数をチェックしてみてください。
    入力した文字数と合っていますか?

    問題無いはずですが念の為
    $count = fwrite($file, $data, 1024);
    でも確認してみてください。

    関係ないかも知れませんが、送信ボタンにも一応名前を付けておいた方が良いのでは?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません