• ベストアンサー

文字の置き換え

ファイルを読み込み、特定の文字を置き換え書き出したいです。 $search = "あいうえお";//置き換え前 $replace = "アイウエオ";//置き換え後 $fp = fopen("index.php", w); $file = file($fp); foreach($file as $key => $val){ $prg = str_replace($search,$replace,$file); fwrite($fp,$prg); } fclose($fp); 上記だとファイルサイズが0になってしまいます。 どのようにすればよいのでしょうか。

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

  • ベストアンサー
  • Nii
  • ベストアンサー率48% (79/162)
回答No.2

※補足で修正 $search = "あいうえお";//置き換え前 $replace = "アイウエオ";//置き換え後 $file = file("index.php"); $fp = fopen("index.php", w); foreach($file as $key => $val){  $prg = str_replace($search,$replace,$val);  fwrite($fp,$prg); } fclose($fp); か $search = "あいうえお";//置き換え前 $replace = "アイウエオ";//置き換え後 $file = file("index.php"); $prg = str_replace($search,$replace,$file); $fp = fopen("index.php", w); foreach($prg as $key => $val){  fwrite($fp,$val); } fclose($fp);

cefirosp
質問者

お礼

うまく出来ました、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#30334
noname#30334
回答No.1

>$file = file($fp); ここが違いますね。ファイルポインタではなく、ファイルパス。

参考URL:
http://manual.xwd.jp/function.file.html
cefirosp
質問者

お礼

勘違いしていました、ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP[ereg_replace]1文字の置き換え

    現在「abcdefga1u2r3」などランダムな文字列の中から aをcにcをaにbをvにといった文字列の置き換えを検討しています。 結果:「cvadefgc1u2r3」となってほしいのですが 下記のコードですと 「avadefga1u2r3」と置き換えた文字を さらに置き換えてしまいます。 結果と同様に同時に置き換えて完結できるプログラムは どのように書けばよろしいのでしょうか。 ================= $rcd = "abcdefga1u2r3"; for($i=0;$i<sizeof($rcd);$i++){ $rcd[$i] = ereg_replace("a", "c", $rcd[$i]); $rcd[$i] = ereg_replace("c", "a", $rcd[$i]); $rcd[$i] = ereg_replace("b", "v", $rcd[$i]); $result[$i]=$rcd[$i]; $i=$i+1; } $fp = fopen("text.txt","w"); foreach($result as $newdata){ fwrite($fp, $newdata); } fclose($fp);

    • ベストアンサー
    • PHP
  • 文字列の置き換えについて

    下記のようなテキストファイルを読み込みます。 【お名前】 {@name} 【フリガナ】 {@kana} 【年齢】 {@age} そしてphpでこのようにしました。 $test = array( 'name' => '名前太郎', 'kana' => 'ナマエタロウ', ); $file = 'body.txt'; $body = file_get_contents($file); foreach ($test as $key => $val) { if ( is_array( $val ) ) { foreach ( $val as $val2 ) { $body = preg_replace( "/{@$key}/u", implode(',', $val), $body ); } } else { $body = preg_replace( "/{@$key}/u", $val, $body ); } } echo $body; 結果は、@nameと@kanaは配列にある通りの文字列に変わりますが@ageは そのまま表示されてしまいます。 $testの配列で該当するパターンがない場合には@hogeの値を空白にしたいのですが どうすればいいでしょうか? foreachを$testで行っているのでループ内ではできないような気がしています。 いい方法があれば教えてください!

    • ベストアンサー
    • PHP
  • mb_ereg_replaceについて

    マルチバイトでの置き換えについて質問です。現在は以下のように str_replaceで置き換えしており文字化けはないのですがマルチバイト 対応のmb_ereg_replaceで実行したほうがいい事を知りました。 以下現在のソースです。 // 検索文配列 $search = array("{#aaa#}", "{#bbb#}", "{#ccc#}"); // 置き換え文配列 $replace = array("あああ", "いいい", "ううう"); // 置き換え $str = str_replace($search, $replace, $str); 単純にstr_replaceをmb_ereg_replaceにしてみたのですがエラーに なってしまいました。 置き換えしたい文字が複数あるのでできれば検索文字、置き換え文字を 配列として使用したいのですがどうすればいいのでしょうか? ちなみにですが文字コードはutf-8です。

    • ベストアンサー
    • PHP
  • 新規ファイルを作成する

    にはどうしたらいいのでしょうか? <?php $file='gomi.dat'; $in=isset($_POST['in'])?$_POST['in']:'bad'; if(file_exists("$file")) { $a=file("$file"); foreach($a as $value) { echo "$value<br/>"; } } $fp=fopen("$file","w"); // <-------------- fwrite($fp,"$in\n"); fclose($fp); ?> <form method="post" action="<?= $_SERVER['PHP_SELF'] ?>"> <input type="text" name="in"/> <input type="submit" value="send"/> </form> は動きませんが $fp=fopen("$file","w"); // <-------------- を $fp=fopen("$file","r+"); // <-------------- としてあらかじめ空の gomi.dat (モード777)を作っていれば動きます どうしたら $fp=fopen("$file","w"); // <-------------- にしても動くようになるでしょうか?

    • ベストアンサー
    • PHP
  • CSVファイルを更新する処理

    CSVに追加や削除、一覧表示、更新をする処理を書いたのですが 更新処理だけうまくいかずに躓いています。 readメソッドのreturn $files;のところで下記の syntax error, unexpected '$files' (T_VARIABLE)というエラーが出てしまいます。 なぜエラーが出ているか教えていただけるとありがたいです。 <?PHP function con($hantei, $num, $name, $age, $address){ $data = [ $num, $name, $age, $address ]; $datas = [$data]; // 追加 if($hantei === 'add'){ $fp = fopen('data.csv', 'a'); foreach($datas as $data) { $line = implode(',' , $data); fwrite($fp, $line . "\n"); } fclose($fp); //更新 } elseif ($hantei === 'update') { function read() { $FILENAME = 'data.csv'; $file = fopen($FILENAME, 'r'); while($data = fgetcsv($file)) { $files[] = $data; }   fclose($file);   return $files; } function replace($num, $name, $age, $address) { // read() $files = read(); $arr = array(); foreach($files as $key => $el) { // [0][a, b, c, d] // [1][a, b, c, d] if ($el[0] == $num) { // $arr[0][0] = $num ... $arr[$key] = array($num, $name, $age, $address); } else { $arr[$key] = array($el[0], $el[1], $el[2], $el[3]); } }    return $arr; } replace(); function write($arr){   $FILENAME = 'data.csv'; $file = fopen($FILENAME, 'w');   foreach ($arr as $v) {    fputcsv($file,$v); }    fclose($file); } $arr = replace($num, $name, $age, $address); write($arr); //削除 } elseif ($hantei === 'dalete') { $file = file('data.csv'); unset($file[$num]); file_put_contents('data.csv', $file); //一覧表示 } elseif ($hantei === 'list') { $fp = fopen('data.csv', 'r'); $readed = fread($fp, filesize('data.csv')); print_r($readed); fclose($fp); } } con('update', 1, 'name', 3, 'address');

    • 締切済み
    • PHP
  • スクリプトの書き方その3

    いつもお世話になります。 XOOPSのコードを読んでいるんですが、沢山の方が関与しているので、 スクリプトの書き方もまちまちです。 そのせいで、素人の私は完全に混乱状態になっています。 ※ PHPマニュアルのサイトでは、preg_xxxっていうのは、 /$str/ とういうように、/(スラッシュ)を使っているので、 !, %, | ? が出てくると、何が正しい書き方なのか全くわかりません。 質問 (1) preg_replace("[\r\n]", "", $str) と preg_replace("/[\r\n]/", "", $str) は同じですか? 質問 (2) preg_replace('!<[^>]*?>!', ' ', $string) と、 preg_replace('/<[^>]*?>/', ' ', $string) は同じですか? 質問 (3) (preg_match('!\W(\w+)$!s', $search, $match) と (preg_match('/\W(\w+)$/s', $search, $match) は同じですか? 質問 (4) preg_replace('?/\*.+\*/?sU', '', $val) の ?とはどういう意味ですか? preg_replace('/\*.+\*/sU', '', $val) と同じですか? それとも、 preg_replace('/?/\*.+\*/?/sU', '', $val) と同じですか? 質問 (5) preg_replace("%(?<!\\\\)'%", "\\'", $string) の、%とはどういう意味ですか? preg_replace("/(?<!\\\\)'/", "\\'", $string) と同じですか? それとも、 preg_replace("/%(?<!\\\\)'%/", "\\'", $string) と同じですか? 迷惑かけますが、どうか、教えて下さい。 よろしくお願いします。

    • 締切済み
    • PHP
  • 数字を入れたい(初心者です)

    XXX に 1~90までの数字を入れたいです $search ='全<FONT color=\'#000\'>&nbsp;'; $replace =''; $search2 ='&nbsp;</FONT> '; $replace2 =''; $blogXXX = file_get_contents("http://abc/index.cgi?category=XXX"); $blogXXX = mb_convert_encoding($blogXXX, "UTF-8", "Shift_JIS"); $blogXXX = mb_strrchr($blogXXX,'全<FONT color=\'#000\'>'); $blogXXX = str_replace(strstr($blogXXX,"件"),"",$blogXXX); $blogXXX = str_replace($search,$replace,$blog.$i); $blogXXX = str_replace($search2,$replace2,$blogXXX); そして echo "$blog1" などとしたいです どのように書けばよろしいでしょうか

    • 締切済み
    • PHP
  • PHP5のsimplexml_load_fileで取得した結果をファイルに書き込みたい

    よろしくお願いします。 PHP5でSimpleXMLを利用して得られた結果をファイルに書き込む、つまりキャッシュを保存したいのですが、以下のようにやっても作成されるファイルは空のままです。ディレクトリモードは755です。 $url = "http://hoge.co.jp/index.php?a=123"; $cache_file = md5($url); $xml = simplexml_load_file($url); $fp = fopen($cache_file, 'w'); fwrite ($fp, $xml); fclose($fp); どうかご教授よろしくお願いします。

    • 締切済み
    • PHP
  • 配列をmb_ereg_replaceで一気に置き換えるには?

    お世話になります。 mb_ereg_replace関数を使い文字の置き換えを行っているのですが、置き換 えるものが多く、1回で置き換えられないかと思い、質問をさせて頂き ます。 // 検索文配列 $search = array("__tome__", "__hame__", "__hoge__"); // 置き換え文配列 $replace = array("$tome", "$hame", "$__hoge__"); // 置き換え $str = mb_ereg_replace($search, $replace, $str1); とやると Warning: mb_ereg_replace() expects parameter 2 to be string, array given in on line というエラーが出てしまい、うまく置き換える事が出来ません。どのようにすればうまく置き換えられるでしょうか? ご教授のほどよろしくお願いします。

    • ベストアンサー
    • PHP
  • phpでhtmlファイルを出力する際にURLを書く

    phpでサイトを作ると同時にそのサイトをhtmlファイルとして書き出すプログラムを作成しようと思ってます。 しかし、URLの書き出しがうまく行きません。以下のようなコードなのですが、下の最初の行がエラーになってしまいます。文法が間違っているようなのですが、どこがおかしいかわかる方、教えて下さい。 ちなみに、$html .= '$val['itemCaption'] . '<br />'と最初の右辺を削除すれば問題なく動きます。 $html .= '<a href="' . $val['itemUrl'] . '">' . $val['itemName'] . '</a><br />' . '$val['itemCaption'] . '<br />' . '<img src="' . $val['smallImageUrl'] . '"><br />' . '<hr>'; } } $fp = fopen($Keyword . ".html" , "w"); fwrite($fp, "$html"); fclose($fp);

    • ベストアンサー
    • PHP