phpの初歩的な質問です。


$filepath = "./test.dat";

$fh=fopen($filepath,"w");
fwrite($fh,"hello");
fclose($fh);
print "ファイルの書込完了";

としていますがファイルにhelloが書き込まれません。
php及びtest.dat自体のパーミッションは777にしております。
ファイルの更新日時は変更されているのでファイルに対してのアクションはあるようですが書き込まれない原因を教えていただけると助かります。恐らく初歩的な見落としをしているんだと思いますが。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/05/24 12:08:12
  • 終了:2010/05/31 12:10:07

回答(4件)

id:ttakao No.1

RON回答回数276ベストアンサー獲得回数312010/05/24 15:30:56

ポイント23pt

fclose の前にflush()してみては?

http://php.hushlog.com/2008/06/flush.php

id:quocard

ありがとうございます。

下記で試してみました。

$fh=fopen($filepath,"a");

fwrite($fh,"hello");

flush();

fclose($fh);

としても出力には何も変化がありませんでした。

ここに書いたものを適当なレンタルサーバーに入れたら正常にファイルに出力はされていました。

何かコード以外の差が影響しているようですが何が影響しているのかがまだ特定出来ておりません。

2010/05/24 17:47:13
id:lucia123 No.2

lucia123回答回数5ベストアンサー獲得回数02010/05/24 20:49:20

ポイント23pt

PHPエラーは発生していませんか?

そのスクリプトの先頭で、

ini_set("display_errors", "On");

と書いてみると、普段抑止されているエラーメッセージも表示されるかもしれません。

http://manual.xwd.jp/function.ini-set.html

出力ファイルのパスを、フルパスで書いてみる

/tmp/test.dat

ファイルオープンで失敗しているかどうか確認する

if( ! $fh = fopen($filepath, "a")){

echo "ファイルオープンエラー¥n";

}

id:gekikawa No.3

gekikawa回答回数110ベストアンサー獲得回数112010/05/26 20:40:51

ポイント22pt

パーミッションが777とされていらっしゃるので共有レンタルサーバ

ではない環境ですよね?


http://php.net/manual/ja/function.fwrite.php

fwrite()をお使いなので、上記マニュアルによるとWindows環境ならば

$fh=fopen($filepath,"wb");

とバイナリ指定をする必要があります。


Linux環境だと...ちょっと原因が想像できません。


私だったらfwrite()ではなくfputs()を使うかな?と思いました。

id:quocard

環境依存があったのでfwriteとしてましたがfputsでもいいかもしれないです。

どうやら環境に問題がありそうですが、今後はfputsを使う形でいきたいと思います。

2010/05/31 00:13:31
id:humiya_r No.4

humiya_r回答回数23ベストアンサー獲得回数02010/05/29 15:01:15

ポイント22pt

$filepath = "./test.dat";

if(@touch($filepath)){

//ここでエラーがでたら設置しているディレクトリの書き込み権限がない @chmod('./',0777);

}else{

echo 'ファイルの作成に失敗しました';

}

if(@chmod($filepath,0666)){

//ここでエラーがでたらPHPがセーフモードとかで動いてるとか基本的なアクセス権がない可能性があります

}else{

echo 'アクセス権の変更に失敗しました';

}

if(@file_put_contents($filepath,"hello")){ //実際に書き込む

echo 'ファイルの書込完了;

}else{

echo '書き込みに失敗しました';

}

じゃダメ?

fopenってもう使いませんよ・・・

http://php.s3.to/man/function.file-put-contents.html

id:quocard

PHPのバージョンを気にしなくていいなら私もfile_put_contents使いたいんですがそうもいかないことも多くて。

ちょっとこちらで試してみます。

ありがとうございました。

2010/05/31 00:12:38

コメントはまだありません

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

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

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

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