質問させて下さい。
共有サーバーで複数のドメインを管理・運営しており、各ドメインのindex.htmlの内容を書換えたいと考えております。
サーバーのディレクトリ構造はこんな感じ。
public_html
|
|- sample1.com(フォルダ)
| |
| + index.html(Shint_JIS)
|
|- sample2.com(フォルダ)
| |
| + index.html(Shint_JIS)
|
|- sample3.com(フォルダ)
| |
| + index.html(Shint_JIS)
|
|- sample4.com(フォルダ)
| |
| + index.html(Shint_JIS)
|
+-un_txt.php(実行ファイル EUC-JP)
この上記構成にある、un_txt.phpというファイルにアクセスすることで、各フォルダ内にあるindex.html内の内容を書換えたいと思っているのですが、PHPはEUCで指定しており、書換えたい各htmlファイルはShift_JISとなっているためか、実行すると文字化けが発生してしまいます。
以下は現時点てのスクリプト、そのままですが、どこがおかしいのかご指摘頂くことは可能でしょうか?
<?php
$text_data = array("ホームページ", "アイフォン", "スマートフォン");
$array = scandir("./");
mb_convert_variables("EUC-JP", "SJIS", $array);
for($i=0; $i<count($array); $i++){
$name = trim($array[$i]);
$dir_name = "./".$name;
$html = "./".$name."/index.html";
if(is_readable($html)){
@chmod($html, 0606);
$addstr = file_get_contents($html);
$fp=@fopen("$html","r");
$no = '';
if($fp){
$main = "";
while (!feof($fp)){
$no++;
$main .= fgets($fp,1000);
}
}
for($m=0; $m<count($text_data); $m++){
$txt = $text_data[$m];
$no_txt = " ";
//$text_data配列に登録されているキーワードを削除。
//削除出来ないため、$no_txt では半角スペースを与えている。
$main = strtr($main, $txt, $no_txt);
}
$main = mb_convert_encoding($main,"SJIS","EUC-JP");
$fp=fopen($html, "w");
fputs($fp,$main);
fclose($fp);
}
}
以上、お忙しい中恐縮ですが、お知恵を頂戴出来れば幸いです。
宜しくお願い申し上げます。
No.1ベストアンサー
- 回答日時:
>$main = mb_convert_encoding($main,"SJIS","EUC-JP");
EUC-JPからSJISにして書き込もうとされているようですが、そもそも(SJISのファイルを読んでから)EUC-JPにしてもいないのに戻すというのが謎です。またfile_get_contentsで読んだまま$addstrを放置しているのもちょっと意図がわかりませんし、こういう置換の用途にはstrtrは使いにくいのではとも思います(マニュアルでどういう関数なのかを確認すれば、まず使わないと思うのですが。
http://jp.php.net/manual/ja/function.strtr.php
>from と to の長さが異なる場合、長い方の余分な文字は無視されます。 返される文字列の長さは、もとの str と同じになります。
マルチバイト関数を使っていないのであれば、先に$text_dataをSJISにしてしまってもいいように思います。
<?php
$text_data = array("ホームページ", "アイフォン", "スマートフォン");
mb_convert_variables('SJIS', 'EUC-JP', $text_data);
$array = glob('*', GLOB_ONLYDIR);
foreach ($array as $dir) {
$file = $dir . "/index.html";
if (!is_readable($file)) { die('not readable ' . $file); }
if (!is_writable($file)) { die('not writable ' . $file); }
$source = file_get_contents($file) or die('cannot read ' . $file);
foreach ($text_data as $text) { $source = str_replace($text, '', $source); }
file_put_contents($file, $source) or die('cannot write ' . $file);
}
shimix様
ご親切なアドバイスをありがとうございます。
また的確なご指摘をありがとうございます。
このソースですが他のソースからの流用だったため、file_get_contentsなど一部が残ったままとなっていました。
質問投稿後、見直すことで文字化けも直っておりましたが、shimix様のスマートなソースを参考に勉強させて頂こうと思います。
この度はご親切なアドバイスをありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP4対応のサーバーではinclude...
-
index.phpって何ですか? 具体...
-
PHPで新しいウインドウで開く命...
-
onedrive にexcelファイルをア...
-
PHP8を使うと、大量のWarningが...
-
PHPで特定のURLにジャンプす...
-
imagejpegで表示されない。
-
VBAのコードを教えてください
-
CFileDialogの最初のディレクト...
-
これの対応OSを教えて下さい。p...
-
透過PNGが透過されない!!
-
手作業で埋め込んだ、UserForm1...
-
拡張子php画像をjpg画像等に変...
-
PHPからメールを送る@さくらイ...
-
phpでPEAR::DBを使っているので...
-
phpでダイアログがどうしても出...
-
PHP関数 mb_strlenでエラーになる
-
静的HTMLにRDFを表示させる方法...
-
MySQLの配置が変わったため、db...
-
(初歩)PHP5 クオーテーション...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
社内イントラネットのHPにアク...
-
file_get_contents()の動きが読...
-
HPを開くとダウンロードページ...
-
phpのheader関数でページ移動さ...
-
jsファイルがうまく読み込めない
-
includeで読み込んだ内容を変数...
-
phpコードの戻り値をhtmlファイ...
-
VScode文字の色の変更について
-
CSSが反映されない場合がある
-
PHPでの複数ファイル出力
-
HYMLファイルの書換えに伴う文...
-
ヒアドキュメントの中で別ファ...
-
トップページURLのみで下層ペー...
-
phpで大量のhtmlを任意の順番で...
-
Smartyを使ってhtmlファイルを...
-
phpでAuthorizationヘッダを追加
-
public_htmlと同じ階層にあるフ...
-
PHPファイル内でCSSが反映されない
-
かなり重い処理をする方法
-
PHPをhtmlに読み込んだファイル...
おすすめ情報