• ベストアンサー

ファイル操作について

作りたいものとして、あるサーバーから元となるファイルをコピーして、そのコピーしたファイルの特定の文字列を置換したものを上書きしたいのですが。 現在、サーバーからサーバーへのコピーまではうまくいってるのですが、そのファイルを読み込んで値を書き換えて保存というところができません。 $all=fread(fopen($file,"rb"),filesize($file)); これだと読み込んで書き込むという処理にはならないのでしょうか?

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • bonyamk
  • ベストアンサー率29% (49/166)
回答No.1

素直に・・・ $fdat = file($file_in); foreach($fdat as $v) { //文字列を変える処理 } こんな感じでどうでしょう?

aiurai54
質問者

お礼

ありがとうございます。 参考にさせていただきます。

関連するQ&A

  • ファイルの読み込みについて

    いつも大変お世話になっています。 例えば以下のような関数があったとします。 function out_file($file_path) { $_handle = @fopen($file_path, "r"); $_dat = @fread($_handle, @filesize($file_path)); @fclose($_handle); return $_dat; } 【質問1】 $file_path の示すファイルが 10M のファイルだとして、10人のクライアントがアクセスしてきたとしたら、サーバーのメモリは 100M 食われてしまうのでしょうか?それとも10M?(まさか、0M?) 【質問2】 ファイルは読み取り専用で開いていますが、大量のクライアントが同時アクセスしてくるとしても flock など無くて正常に動くのでしょうか? それとも、やはり排他制御する必要はあるでしょうか? 10人同時アクセス時のこの関数の挙動がイマイチイメージできません。 以上です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • FILE オープンについて

    いつもお世話になります。 今ファイルデータ検索処理を検討しております。 今、search.txtには、 検索対象となるファイルパスが記載されています。 [search.txt] /home/hoge/SAMPLE1.jpg /home/hoge/SAMPLE2.jpg search.txtをfopen()し、1行ずつfgets()して、 得られるファイルパスより、そのファイルを fopen()して解析する処理がしたいですが、 fgets()より得られたファイルパスをfopen()し、 fread()するとセグメンテーションエラーになります。 どのようにしたらいいのでしょうか? 現状のコードを下記します。 FILE *fp; char *com1 = "/home/hoge/search.txt"; FILE *confp; char buf1[1024]; char buf2[1024]; int i =0; fp = fopen(com1, "r"); while( fgets(buf1, sizeof(buf1), fp )){ confp = fopen(buf1, "rb"); //*.JPGファイルをオープン //下記fread()でセグメンテーションエラー size_t size = fread( buf2, sizeof(char), 1024, confp ); for( i = 0; i<1024; i++ ){ if( (buf2[i] == 0xff) && (buf2[i+1] == 0xe0) ){ printf("%02x\n",buf[i+5]); } } } fclose(fp); fclose(confp); 上記のように、search.txtをfopen()し、読み込んだファイルパスを fopen()して、fread()読み込みをする方法を 教えて下さい。 どうぞよろしくお願い致します。

  • fread

    fread関数を使用し、下記のように 同じファイルに上書きしているのですが。。。。 freadで取得したデータの全角コロンを半角コロンに置き換える。 その後、全角空白を半角空白におきかえる。 そのおきかえたデータを同じファイルの上書きする。 どうもコロン(:)のところがうまく書き変えられていません。。。。 おきかえた後に、print文で出力すると置き換えられているのですが、、、 この現象がわかる方教えていただけませんか?? $body=fread(fopen($fileName, "r"),filesize($fileName)); $txt=str_replace(":", ":",$body); $txt=mb_convert_kana($txt, "s","SJIS"); $fp = fopen($fileName, "w"); chmod($fileName,0777); flock($fp, LOCK_EX); fputs ($fp, $txt); flock($fp, LOCK_UN); fclose($fp);

    • ベストアンサー
    • PHP
  • ファイル末尾10バイトを削る

    ファイルを開き、末尾10バイトを削り、上書きする というプログラムを作成しています。 とりあえず、以下のようなソースが出来ました。 ------------------------------------------------------------------ ifp = fopen( "openfile.dat", "rb"); ofp = fopen( "outfile.dat", "wb" ); fseek( ifp, -10, SEEK_END ); pos_end = ftell( ifp ); fseek( ifp, 0, SEEK_SET ); for( pos_now = ftell( ifp ) ; pos_now < pos_end; pos_now = ftell( ifp )){    rCnt = fread( pbuf, sizeof( char ), 1, ifp );    f( rCnt == EOF ) break;    fwrite( pbuf, sizeof( char ), 1, ofp ); } fclose( ifp ); *(openfile削除) *(リネーム処理:outfile.dat -> openfile.dat) 以下略 ------------------------------------------------------------------ ソースにあるとおり、 ファイルを開く -> ファイルの末尾10バイト目を記憶する。 -> アウトファイルを開く -> 記憶した位置までコピーする -> オープンファイルの削除 -> リネーム処理 という順番で処理を行っています。 本来は、 ファイルを開く -> ファイルの末尾10バイト目にEOFをいれる -> ファイルを閉じる みたいな感じでやるつもりだったのですが、うまくいきませんでした。 後者のやり方や「私ならこうする!」等アドバイスがありましたら、是非お聞かせください。 よろしくお願いします。

  • PHPによるファイル操作

    ファイルに格納されています一行分だけを追加変更する場合はどうしたらいいのでしょうか。 fileの内容は、 [wada] path = /home/wada writeable = yes guest ok = no max connections = 5 oplocks = True valid users = wada になっており、valid users = wada  を valid users = wada , kubo のように追加変更するプログラムの記述が、現状では、 $file = fopen("/etc/file.conf","r+"); while (!feof ($file)){      if(fgets($file, 4096) == "valid users = wada"){ if文によって取得された文字列を変更する処理(,kuboを追加する処理); } } fclose ($file); で、このvalid userd = wadaだけを引っ張り出して、追加変更する記述部分をご教授よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 複数ファイルを連続でダウンロード

    はじめまして 複数ファイルのダウンロードについて質問します。 チェックボックスで複数のファイル(PDFファイル)を選択して ダウンロードができるようにしたいのです。 自分でも色々調べて、「PEAR」モジュール「File_Archive」を使い 選択した複数ファイルを圧縮してダウンロードできるようにしました。 しかし、要望として圧縮ファイルにはせず、 PDFファイルを選択した数だけ順番にダウンロードできるようにしたいのです。 自分でも「header関数」を使いダウンロードできるようにソースを書いてみましたが 一つ目のファイルしかダウンロードできず、2つ目からのダウンロードが始まりません。 【ソースの例】*********************************** //DOWNLOAD&nbsp;1 $file_location&nbsp;=&nbsp;"/mnt/bisei_nfs/test1.txt"; $filename&nbsp;=&nbsp;"test1.txt"; /*&nbsp;ファイルダウンロード処理&nbsp;*/ $filesize&nbsp;=&nbsp;filesize(&nbsp;$file_location&nbsp;); header(&nbsp;"Accept-Ranges:&nbsp;none"&nbsp;); header(&nbsp;"Content-Length:&nbsp;$filesize"&nbsp;); header(&nbsp;"Content-Disposition:&nbsp;filename=\"$filename\""&nbsp;); header(&nbsp;"Content-Type:&nbsp;text/octet-stream"&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IE $fp&nbsp;=&nbsp;fopen(&nbsp;"$file_location",&nbsp;"rb"&nbsp;); @fpassthru(&nbsp;$fp&nbsp;); //DOWNLOAD&nbsp;2 $file_location&nbsp;=&nbsp;"/mnt/bisei_nfs/test2.txt"; $filename&nbsp;=&nbsp;"test2.txt"; /*&nbsp;ファイルダウンロード処理&nbsp;*/ $filesize&nbsp;=&nbsp;filesize(&nbsp;$file_location&nbsp;); header(&nbsp;"Accept-Ranges:&nbsp;none"&nbsp;); header(&nbsp;"Content-Length:&nbsp;$filesize"&nbsp;); header(&nbsp;"Content-Disposition:&nbsp;filename=\"$filename\""&nbsp;); header(&nbsp;"Content-Type:&nbsp;text/octet-stream"&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IE $fp&nbsp;=&nbsp;fopen(&nbsp;"$file_location",&nbsp;"rb"&nbsp;); @fpassthru(&nbsp;$fp&nbsp;); ***************************************************** 順番にダウンロードするには、どうしたらよいのでしょうか?

    • ベストアンサー
    • PHP
  • ファイルのコピー

    ファイルのアップロードプログラムを作成しています。 HTML側で<input type="file" name="UserFile"> とし、アップロードボタンを押すとphp側で値を受け取るようなプログラムにしています。 値はうまく渡っているのですが、コピーができません。 コピーするPHPは以下のようなプログラムです。 $file = tempnam("/tmp","upload_"); if (copy($all_data['UserFile'],$file)) { print "ファイルコピー成功。 $all_data['UserFile'] -> $file<BR>\n"; } else { print "ファイルコピー失敗。 $all_data['UserFile'] -> $file<BR>\n"; } エラー内容は Warning: Unable to open 'percent.txt' for reading: No such file or directory となってます。 $all_data['UserFile']にはpercent.txtです。 どなたか、お分かりになる方がいましたら、 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • PHPで特定のサイト上の文字列の出現個数を調べたい

    PHP初心者です。 PHPである特定のサイト上のindex.htmlのファイルを解析してその中にある、ファイルxxx.gif の個数を調べてその合計を出したいのですが なかなかうまくいきません。 以下自分なりに作ってみました。 <?php $file_name = "http://www.xxx.com/index.html"; $string1 = fread($file, filesize($file_name)); $string2 = "xxx.gif"; $count =substr_count($string1, string2); echo "<P>".$count; ?> どなたかご教授お願いいたします。

    • ベストアンサー
    • PHP
  • fopenでファイルがオープンできません

    $fp = fopen(TEST_FILE, "w") としてオープンしようとすると Warning: fopen(mybasic9.txt): failed to open stream: No such file or directory と、オープンしようとしたファイルがない、と出ます そして、そのファイルをあらかじめ作っておくと OKです。 しかし fopen(TEST_FILE, "w") は該当ファイルがあればそれをオープンし 無ければ、新しく作成する、とFopenの仕様に出ています。 これは、今使っているサーバーの問題でしょうか 何か、避ける方法はないでしょうか よろしくお願いします

    • 締切済み
    • PHP
  • ファイル操作

    コンパイラ:VisualC++6.0 ファイル操作について質問です。 書き込みは出来ますが、書き込みの追記の仕方が分かりません。(毎回上書きされる) #include<stdio.h> int main(void){ FILE* fp; char write[100]; fgets(write,sizeof(write),stdin); fp=fopen("../test.txt","w"); if(fp==NULL){ printf("エラー"); return 0; } fprintf(fp,"%s",write); fclose(fp); return 0; } よろしくお願いします。

専門家に質問してみよう