[PHP-users 35287] Windows7 でファイルが読み出せない

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35287] Windows7 でファイルが読み出せない

mio-2
矢嶋と申します。


Winows7 Starter
XAMPP 1.7.3 / PHP5.3.1
で実験した結果です。

scandir() で取り出したファイル名を使っても、
申請.txt 等の 5c を含むファイル名は file_exists() で false となります。

Windows Vista Business SP2
XAMPP 1.6.3a / PHP5.2.3
では正常でした。
他にもバージョンは確認できませんが、 Windows 2000 や XP でも動いていました。
( scandir() を readdir() に代えるなどしています )



★★★ 再現コードは以下の通りです。

htdocs/5C/ に、
        index.php
        申請.txt
        申.txt
        請.txt
を置く。

htdocs/5C/index.php は、
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 始め
<?php

echo getcwd() ;

echo "<table border='1' cellspacing='0' cellpadding='3'>\n" ;
$files = scandir('.') ;
foreach( $files as $file ) {
        echo "  <tr>\n" ;
        echo "    <td>&nbsp; ", $file, " &nbsp;</td>\n" ;
        echo "    <td>&nbsp; ", @filesize($file), " &nbsp;</td>\n" ;
        echo "    <td>&nbsp; ", ( file_exists($file) ?  'O' : 'X' ), " &nbsp;</td>\n" ;
        if( ! file_exists($file) )  @touch($file) ;
        echo "    <td>&nbsp; ", ( file_exists($file) ?  'O' : 'X' ), " &nbsp;</td>\n" ;
        echo "    <td>&nbsp; ", preg_replace('/../','\0 ',bin2hex($file)), " &nbsp;</td>\n" ;
        echo "    <td>&nbsp; ", htmlspecialchars(realpath($file)), " &nbsp;</td>\n" ;
        echo "  </tr>\n" ;
}
echo "</table>\n" ;
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 終わり

その他のファイルは、中身は任意。(目印の為に空でない方が良い)

http://localhost/5C/ でアクセスすると、
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 始め
C:\xampp\htdocs\5C
  .             0  O  O  2e                          C:\xampp\htdocs\5C
  ..         8192  O  O  2e 2e                       C:\xampp\htdocs
  index.php   704  O  O  69 6e 64 65 78 2e 70 68 70  C:\xampp\htdocs\5C\index.php
  申.txt      558  O  O  90 5c 2e 74 78 74           C:\xampp\htdocs\5C\申.txt
  申請.txt    558  O  O  90 5c 90 bf 2e 74 78 74     C:\xampp\htdocs\5C\申請.txt
  請.txt      558  O  O  90 bf 2e 74 78 74           C:\xampp\htdocs\5C\請.txt
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 終わり
の様な内容が返される筈ですが、
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 始め
C:\xampp\htdocs\5C
  .             0  O  O  2e                          C:\xampp\htdocs\5C
  ..         8192  O  O  2e 2e                       C:\xampp\htdocs
  index.php   704  O  O  69 6e 64 65 78 2e 70 68 70  C:\xampp\htdocs\5C\index.php
  申.txt           X  O  90 5c 2e 74 78 74          
  申請.txt         X  O  90 5c 90 bf 2e 74 78 74    
  請.txt      558  O  O  90 bf 2e 74 78 74           C:\xampp\htdocs\5C\請.txt
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 終わり
となってしまいました。


OS の問題の様な気もしますが...
回避策等の情報が見つけられないでいます。

どなたかご存知ありませんか?

_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35288] Re: Windows7 でファイルが読み出せない

kondo
近藤です。

回避策ではないですが、WindowsXP上でPHP5.3.2を入れてやってみましたが、
同じ現象になりました。

> OS の問題の様な気もしますが...

Winows7 Starterだからという問題ではないようです。
Windowsだとなる?PHP5.3.1以降でなる?のかまではわかりません。

連続的に実行するとfile_existsの申.txt検索結果が申申.txtでTRUEを
返しているように思えます。
(同様に申請.txtが申申請.txtでTRUEを返しているように思えます。)

_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35289] Re: Windows7 でファイルが読み出せない

mio-2
矢嶋です。


> 近藤です。
>
> 回避策ではないですが、WindowsXP上でPHP5.3.2を入れてやってみましたが、
> 同じ現象になりました。

追試、ありがとうございます。


> > OS の問題の様な気もしますが...
> Winows7 Starterだからという問題ではないようです。
> Windowsだとなる?PHP5.3.1以降でなる?のかまではわかりません。

コピーしただけの XAMPP の旧バージョンが動かなかったので、
Windows7 で古いバージョンのを動かしての実験ができず、
判断が曖昧なままになっています。

別のソフトで、メニュからファイルを消しても実際には残ったままとなるのがありまして…
それでOS側を疑ったのです。


> 連続的に実行するとfile_existsの申.txt検索結果が申申.txtでTRUEを
> 返しているように思えます。
> (同様に申請.txtが申申請.txtでTRUEを返しているように思えます。)

これは、実行するたびに
        if( ! file_exists($file) )  @touch($file) ;
の効果でファイルが増えていきます。
「無い」と言われるなら作ったらどうなるかを確認する為のコードです。

ファイル名を指定しての情報取得や操作で 5c 問題を引き起こしている様です。


# 昔にも良く似た現象がありました。
# ・ AccessVBA で、受取ったファイル名で操作できない
# この時は、ファイル名中の全角を勝手に半角化して使われた為に、
# アクセスできないファイルが生じていました。

_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35290] Re: Windows7 でファイルが読み出せない

kondo
近藤です。

> > 連続的に実行するとfile_existsの申.txt検索結果が申申.txtでTRUEを
> > 返しているように思えます。
> > (同様に申請.txtが申申請.txtでTRUEを返しているように思えます。)
>
> これは、実行するたびに
> if( ! file_exists($file) )  @touch($file) ;
> の効果でファイルが増えていきます。
> 「無い」と言われるなら作ったらどうなるかを確認する為のコードです。

ファイルが次々に増えるのはわかってますが、Oが増えているのに気づきました。
1回目で申.txtがXで申申.txtが作られ、2回目でOになって申申.txtはXで、
3回目になると申申.txtがOで申申申.txtがOで...となります。

> ファイル名を指定しての情報取得や操作で 5c 問題を引き起こしている様です。

5c問題ですね。
UTF-8やEUCだと問題がおきないと思います。
ちなみに、Linux側でわざとSJISコードのファイル名の申請.txtを作りましたが、
PHPのバージョンが5.1.6だったためか問題は起こらなかったです。

_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35291] Re: Windows7 でファイルが読み出せない

jun kuwamura
くわむらです

 Windows7  Home Edition で PHP 5.2 での動作報告までです。

PostgreSQL Windows版をインストールすると利用可能になる
スタックビルダーからApache+PHPをインストールしています。
バージョンは Apache/2.2.15 (Win32) PHP/5.2.12 ですが、
問題なさそうでした。

お使いのphpは構成時のオプションに、"--enable-zend-multibyte=yes"
が指定されてますでしょうか?もしかすると、php-5.3の問題なのかも
しれませんね。

--
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\test\5C
  .    0    O    O    2e    C:\Program Files
(x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\test\5C
  ..    4096    O    O    2e 2e    C:\Program Files
(x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\test
  index.php    756    O    O    69 6e 64 65 78 2e 70 68 70  
 C:\Program Files
(x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\test\5C\index.php
  申.txt    6    O    O    90 5c 2e 74 78 74    C:\Program
Files (x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\test\5C\申.txt
  申請.txt    6    O    O    90 5c 90 bf 2e 74 78 74  
C:\Program Files
(x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\test\5C\申請.txt
  請.txt    6    O    O    90 bf 2e 74 78 74    C:\Program
Files (x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\test\5C\請.txt
--



2010/7/13  <[hidden email]>:

> 近藤です。
>
>> > 連続的に実行するとfile_existsの申.txt検索結果が申申.txtでTRUEを
>> > 返しているように思えます。
>> > (同様に申請.txtが申申請.txtでTRUEを返しているように思えます。)
>>
>> これは、実行するたびに
>>       if( ! file_exists($file) )  @touch($file) ;
>> の効果でファイルが増えていきます。
>> 「無い」と言われるなら作ったらどうなるかを確認する為のコードです。
>
> ファイルが次々に増えるのはわかってますが、Oが増えているのに気づきました。
> 1回目で申.txtがXで申申.txtが作られ、2回目でOになって申申.txtはXで、
> 3回目になると申申.txtがOで申申申.txtがOで...となります。
>
>> ファイル名を指定しての情報取得や操作で 5c 問題を引き起こしている様です。
>
> 5c問題ですね。
> UTF-8やEUCだと問題がおきないと思います。
> ちなみに、Linux側でわざとSJISコードのファイル名の申請.txtを作りましたが、
> PHPのバージョンが5.1.6だったためか問題は起こらなかったです。
>
> _______________________________________________
> PHP-users mailing list  [hidden email]
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>



--
 Jun Kuwamura
rC Cn
  ^
  ~
_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35292] Re: Windows7 でファイルが読み出せない

kondo
近藤です。

> PostgreSQL Windows版をインストールすると利用可能になる
> スタックビルダーからApache+PHPをインストールしています。
> バージョンは Apache/2.2.15 (Win32) PHP/5.2.12 ですが、
> 問題なさそうでした。
>
> お使いのphpは構成時のオプションに、"--enable-zend-multibyte=yes"
> が指定されてますでしょうか?もしかすると、php-5.3の問題なのかも
> しれませんね。

Windows用のインストーラパッケージをダウノードしてインストールしたもので、
phpinfo()では、
mbstring
Multibyte Support => enabled
ですね。

私も、php5.3のバグのような気がしてますが...
ちなみに、Linuxで試したバージョンと同じバージョンのphp5.1.6の
Windows版バイナリを見つけたので試してみたところ、WindowsXP上では
やはり問題なかったです。


_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35295] Re: Windows7 でファイルが読み出せない

mio-2
In reply to this post by mio-2
矢嶋です。

「 PHP 5.3 のバグらしい」との情報で、とりあえず満足です。
使える環境を探して運用いたします。

皆様、どうもありがとうございました。

_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

Re: [PHP-users 35295] Re: Windows7 でファイルが読み出せない

Tatsuya Shirai
This post was updated on .
白井と申します.
少し古いディスカッションでしたが,この問題はPHP5.3.5のWindows版でも改善されていないようでしたので投稿させて頂きました.
私の場合は DirectoryIteratorのisFile()が,ファイル名中に5Cを含む日本語ファイル名の場合に,ファイルであるにも関わらずfalseを返す問題に遭遇しています.

WindowsXP SP3上のPHP5.2.8では問題なく,PHP5.3.5では発生します.
やはりPHP5.3系系のバグとしか思えません.

mio-2 wrote
矢嶋です。

「 PHP 5.3 のバグらしい」との情報で、とりあえず満足です。
使える環境を探して運用いたします。

皆様、どうもありがとうございました。
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35631] Re: Windows7 でファイルが読み出せない

Yasuo Ohgaki
大垣です。

内部エンコーディングにはShift_JISなどのISO-8859-1非互換の文字エンコーディング
は使えません。例えば、EUC-JP、UTF-8に設定すると直るはずです。

--
Yasuo Ohgaki
[hidden email]



2011/10/20 Tatsuya Shirai <[hidden email]>:

>
> 白井と申します.
> 少し古いディスカッションでしたが,この問題はPHP5.3.5のWindows版でも改善されていないようでしたので投稿させて頂きました.
> 私の場合は
> DirectoryIteratorのisFile()が,ファイル名中に5Cを含む日本語ファイル名の場合に,ファイルであるにも関わらずfalseを返す問題に遭遇しています.
>
> WindowsXP SP3上のPHP5.2.8では問題なく,PHP5.3.5では発生します.
> やはりPHP5.3系系のバグとしか思えません.
>
>
> mio-2 wrote:
>>
>> 矢嶋です。
>>
>> 「 PHP 5.3 のバグらしい」との情報で、とりあえず満足です。
>> 使える環境を探して運用いたします。
>>
>> 皆様、どうもありがとうございました。
>>
>>
>
> --
> View this message in context: http://old.nabble.com/-PHP-users-35287--Windows7-%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E8%AA%AD%E3%81%BF%E5%87%BA%E3%81%9B%E3%81%AA%E3%81%84-tp29136372p32674027.html
> Sent from the Php Japan - PHP-users mailing list archive at Nabble.com.
> _______________________________________________
> PHP-users mailing list  [hidden email]
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>
_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

Re: [PHP-users 35287] Windows7 でファイルが読み出せない

kiyoto
In reply to this post by mio-2
石田と申します
同じく5C問題で悩んでおりましたが
addslashes()を使いなんとか目的を達成できました
$sjisName=adslashes('申請書.pdf');
5Cをクオートする
環境
windows server 2008 r2
php 5.5
iis7.5
zend.multibyte=On
zend.script_encoding=UTF-8

NGな関数もありました。
copyはrenameで代用
fopenはaddslashesでOKでした

悩んだ人のために書き込みます!