- ベストアンサー
fopen()関数
こんにちは。 PHPで、fopen()関数を使用し、別ファイルにでーたを保存しているのですが、 fopen ("ファイル名", "a"); とやると、ファイルに追記されますよね。 この追記を、ファイルの一番最初に行いたいのです。 一番最初に書き込みをできるということで、 fopen ("ファイル名", "r+"); なども試してみたのですが、 その追記された文字数だけ最初側の文字が消えてしまい、追記は無理でした。 rewind()関数も使用したのですが、ダメでした。 何方か、ファイルの最初に、既に書き込まれている文字を消さずに追記する方法をご教授くだされば幸いです。
- ri19960913
- お礼率34% (33/95)
- PHP
- 回答数2
- ありがとう数4
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$lines = file("ファイル名"); $fp = fopen("ファイル名","w"); fputs($fp,書き込み内容); for($i = 0; $i < 99; $i++) fputs($fp, $lines[$i]); fclose ($fp); でいけると思います。 一度ファイルに書き込み内容を書いてから、 今までのデータを再び書き込むといった感じです。
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
基本的なファイル操作ではファイルの先頭や途中に挿入という高度な機能は使えません。 現在のファイル内容を全て読み込んで記憶し追加データを書き出した後に記憶したデータを追記することになります。
お礼
アドバイス、ありがとうございます!
関連するQ&A
- [c言語] fopenでの追記
c言語についてです。 すでにあるテキストファイルに追記したい場合、ファイルの一番下の行から追記されてしまうのですが、 最初から追記ができるようにするにはどうすればいいのですか。 ※ FILE *fin=fopen=("hoge.log","a"); や FILE *fin=fopen=("hoge.log","a+"); で開いてます。 ( rewind(fin)は無理でした。 ) よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- PHPのfopen関数について質問です。
PHPマニュアル http://www.php.net/manual/ja/function.fopen.php 上記ページの >> Windows ベースのシステムでは \r\n を使用します。 マッキントッシュベースのシステムでは \r を使用します。 間違った改行コードでファイルに書き込むと、 他のアプリケーション上でそのファイルを開いた際に変な風に見えてしまいます。 Windows上では、\nを\r\nに透過的に変換する text-mode変換フラグ('t')が提供されます。 それに対し、'b'を使って強制的にバイナリモードにすることもできます。 その場合データの変換はされません。 このフラグを使用するには、'b' または 't'を mode引数の最後に追加してください。 とある様にPHPにおいてfopen関数の第二引数のモードに付加する場合のバイナリモードとは windows系プラットフォームにおいて書き込む文字列内に[¥n]というバイトがあった場合、プラットフォームにあわせて 自動的に書き出す際に¥r¥nに変換されるから・・・・。 という意味ですよね。 例えば、あるバイナリファイルに奇跡的に[¥n]というバイトがなかった場合、fopen("test.jpg","rw");でもよいということですよね?
- ベストアンサー
- PHP
- fopen関数について
----------------------------------------- #include<stdio.h> #include<stdlib.h> int main() { FILE *fp; char filename[80],ss[256]; printf("ファイル名="); gets(filename); if((fp=fopen(filename,"r"))==NULL){ printf("ファイルをオープンできません.\n"); exit(1); } while(fgets(ss,256,fp)!=NULL){ printf("%s",ss); } puts(""); fclose(fp); return 0; } ----------------------------------------- 初心者な内容の質問ですいません。 以上のプログラムでまず、「gets(filename);」により、「filename[80]」の配列に「aaa.txt」という文字列を格納し、そのファイルをfopenで読もう込もうとしています。 そこで、 if((fp=fopen(filename,"r"))==NULL) の部分に疑問があるのですが、「filename」という配列名だけで中身の「aaa.txt」と何故認識できるのでしょうか? 配列名ということで、先頭アドレスのみの情報しかないと思いました。 教えていただければ嬉しいです。
- ベストアンサー
- C・C++・C#
- fopenが動作しない
PHPで、別のファイルで取得したファイル名をもとに fopenを使ってファイルを開こうとしているのですが、 どうしてもうまくいきません。 具体的な症状は以下のとおりです。 a.phpの中で、 … $file[2] = "hoge02.xml"; … のように、配列にファイル名を代入します。 これを b.php で require_once('a.php'); とした後 print_r($file); とすると Array([0] => … [2] => "hoge02.xml" [3]…) のように表示されるところまでは確認できました。 しかし、 $file0 = $file[2]; $fp = fopen("$file0", 'r'); とすると Warning: fopen( "hoge02.xml" ) [function.fopen]: failed to open stream: Invalid argument in [b.php の絶対アドレス] とエラーが出てしまい、実行することが出来ません。 そこで、 //$file0 = $file[2]; $file0 = "hoge02.xml"; $fp = fopen("$file0",'r'); とすると実行することが出来ました。 作成しているシステム上、fopenの1つ目の引数には変数または配列を使いたいのですが、 エラーが発生してどうしてもうまくいきません。 自分なりにも似たようなエラーがないか調べたのですが、 それらしいものを見つけることが出来ず、お手上げ状態です。 どなたか解決策をご存じないでしょうか。 ご教授の程、よろしくお願い致します。
- 締切済み
- PHP
- fopen()関数を使用し、最後から二行目に保存する
こんにちは。 PHPで、データをfopen()関数を使用し、 <?php ・ ・(途中略) ・ ?> のうちの、?>の一つ上の行にデータを保存したいのですが、 可能ですか? 要は、ここです。 <?php ・ ・ ・ $data = "●●"; // ←ここ ?> 今のところ、最後の行に保存する方法しか知らないので・・・。 $dataopen = fopen ("./data.php", "a"); fwrite ($dataopen, "$data = $_POST["data"];"); fwrite ($dataopen, "\n"); fclose ($dataopen); どうか、ご教授くだされば幸いです。
- 締切済み
- PHP
- file関数とファイルポインタ
ファイルの内容を(書き換えるために一旦)読み込む時に、 fgets関数と違ってfile関数は fopen関数を使わなくても済む、ということで 便利なので使ってみようと思っているのですが、 ちょっと躓いています。 set_file_bufferやflock、rewindが必要なのですが、 これらはどれも引数にファイルポインタを使います。 fopen関数を使っていないのでコレがないのですが、 どうすればいいのでしょうか? fopenのあとにfileを使う? fopenを使わなくても閉じる時にはfcloseが必要? でもfcloseもファイルポインタを使うし… よろしくお願いします。
- ベストアンサー
- PHP
- stream_get_contentsの代替関数
あるファイルの文頭18バイトを削除し、その後の部分を保存するスクリプトを考えています。 ======== 例) $fp = fopen("aaa.send","r+"); fread($fp, 18); //18バイト読み飛ばす $data=stream_get_contents ($fp);//PHP5 ftruncate ($fp, 0);//中味の削除 rewind($fp); //ポインタのリセット(巻き戻し) fwrite($fp, $data); ======== しかしながらサーバー環境のPHPが4.3.8のためstream_get_contents関数が使えません。 同じような意味を持つ関数をご存知の方がいらっしゃいましたらご教授願います。
- ベストアンサー
- PHP
お礼
ありがとうございます! 最初に保存させることができました! 本当にありがとうございます。感謝です!