人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Windows + php 5.3.x で "表.txt" を読み書きする方法がありましたら教えてください。

以下にだめだった例を書きます。

>|php|
<?php
// 表.txt は存在する状態で
mb_internal_encoding('SJIS');

echo filesize('表.txt')); // これはOK。ファイルサイズが表示される

echo file_get_contents('表.txt'); // 失敗: failed to open stream: No such file or directory
// "表表.txt" が存在する場合は、その内容が表示される

file_put_contents('表.txt', '表も無敵だ'); // "表表.txt" が作成されてしまう
||<


●質問者: gaeeyo
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:echo open PHP SJIS Stream
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● mattn
●77ポイント

http://www.php.net/ URLダミー

ご存知かと思いますが、Shift_JISにおいて「表」は「0x95 0x5c」というバイト列で構成されています。

これを前提に

<?php
mb_internal_encoding('SJIS');
echo filesize('表.txt')); // これはOK。ファイルサイズが表示される
echo file_get_contents('表.txt');
?>

のfilesizeが動いてfile_get_contentsが動いていないのであれば、file_get_contentsのバグとしか考えられません。

おそらくfile_get_contentsがリモートコンテンツも取得出来る為、何かしらURLに関するエスケープが悪さをしているのだと思います。

バグが直るのを待つか、workaround的な物を見つけるしかありません。

"\x95\x5c.txt" と書いてみたり、何か設定で回避出来るかやってみましたが、mbstring.internal_encodingやmbstring.script_encoding等を変えてみても「表表.txt」が出来る結果には変わらなかったので、おそらく設定で直る物ではないかと思います。

◎質問者からの返答

グハァ。 ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ