2014年2月6日0件のコメント今日はファイル操作。関連テキストファイルへの書き込みまずはコードから。引数:ファイル名かURL第二引数:第一引数へのアクセス形式。末尾に追記する形で書き込まれる。ファイルが存在しない場合は新規で作成する。フラグを指定することが強く推奨されます。」とあるので、特段の事情が無い限りbをつける。fwrite(またはfputs)ファイルへの書き込み処理を行う。exit=dieと同じようにfwriteもfputsも同じ。マニュアルでfputsの項目がfwriteの項目へのリンクをしているのでこちらを使ってみた。引数:fopenを使って作成したファイルシステムポインタリソース。ファイルのどの位置?というところまで読み込んでいる。第二引数:書き込みたい文字列。今回は入力値と日時を書き込んでいる。fclose引数が指しているファイルを閉じる。fopenなどの関数によって正常にオープンされたファイルに限る。ヘッダを送信するLocationは特別なヘッダでリダイレクトステータスコードを返すため、これを使って入力フォームへリダイレクト(自動転送)している。今回のphpファイルには出力するものが何もないため利用している。headerは全ての出力の前にコールしなければならない。今回はheaderの前にページに何か出力しているわけでは無いので7行目だが問題ない。$_SERVERサーバー情報および実行時の環境情報を有するスーパーグローバル変数。HTTP_HOSTでサーバのホスト名、dirnameにPHP_SELF(現在実行中のファイル名)を引数として渡すことで親ディレクトリのパスを返している。今回はホスト名/フォルダ名/ファイル名を渡すことでURLの表示を実現している。実行結果4人前入力してみた。複数ユーザーの同時アクセスが起きるとファイル更新に不具合が起きる場合がある。メッセージ:んなわきゃないと入れて同時送信したとする。間違いないんなわきゃないと混ざって書き込まれてしまうことがある。※今回はsleepを使って同時送信状態を再現している。flockファイルロックを行う。引数:fopen()で開いたファイルシステムポインタリソース。第二引数:ロックの種類。LOCK_EXと(共有または排他的)ロックを開放するLOCK_UNを使う。その他に共有ロック(読み込み中の書き込み禁止)のLOCK_SHがある。http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/input_data.html');ファイルを読み込むファイルの読み込んでリスト化したページを作ります。警告やエラーの表示を抑制するための演算子。今回はfopenの前についている@がそれに当たる。ファイルが開けなかったら自前の警告文をexitで発行している。fgetcsvファイルポインタから行を取得し、CSVフィールドを処理する。引数:fopen()等で正常に開かれたファイルポインタ第二引数:最大文字長。ファイル内で最も長い行よりも大きい必要がある。そのため、ある程度入力値は制御しなければならない。加えてこの引数は省略すれば最大長の制限は無くなるが若干動作が遅くなるらしい。第三引数:区切り文字(1文字のみ)csvを名乗っているがカンマ区切りの処理しか出来ない訳では無い。今回はタブ区切りのファイルを処理している。似た関数でfgets()があるがこちらは1行分(改行文字を検出した瞬間終了する)の取得となる。区切りを解釈しないのでデータを分割して使いたい場合は自分で分解する必要がある。「ごはん」についてはじめまして。