- ベストアンサー
ファイルの書込みができません 教えてください
- ファイルの書き込みを作成しているが、テキストに書き出されない
- プログラムに何か問題があると思われるが、具体的な原因がわからない
- ファイルの書き込みが完了していると表示されるが、テキストには反映されていない
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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 "ファイルの書込完了"; } で、ファイルが開けなかった原因は、ディレクトリのパーミション設定がおかしいのだとおもいますので、確認してみてください。
その他の回答 (1)
- kalze
- ベストアンサー率47% (522/1092)
何も表示されなかったということですが、エラーはどうでていますか? とりあえず、元々のスクリプトでは、ファイルを本当に開けたのかどうかチェックしてないので、成功・失敗にかかわらず「ファイルの書込み完了」と表示されますよといいたかっただけなので、例示したスクリプト以外にもチェック方法はありますよ。 とりあえずシングルクォーテーションの囲むのは間違っています。 シングルクォーテーションの扱いを考えれば至極当然なのですが・・・。 ファイルを本当に開けているかどうかチェックするようにすれば、別に私の例示したスクリプトにこだわらなくてもよいですよ。 (動作チェックはしてあるんですけどねぇ) 例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がセーフモードかどうか含めた環境は?
補足
kalzeさんのPHPの部分を移したのですが。実行してみたら何も表示されなかったので。 if( false == ($fh=fopen($file_name,"w+"))) の部分に if(false == '($fh=fopen($file_name,"w+"))') とシングルコーテイションを付け加えたところ 「ファイルの書込完了」表示されました。 「ファイルの書込完了」が表示されてるという事はファイルを開いて 書き込んでいるという事ですよね?