[PHP-users 5675] fgetcsv on solaris

NAKAYAMA Masahiro php-users@php.gr.jp
Mon, 25 Feb 2002 07:05:08 +0900


仲山@慶応大学です。


EUC-JP で書かれた日本語の文書を fgetcsv で読み込むと、一部の文字が欠け
てしまいます。状況としては以下の通りです。

0.  環境は、Solaris8 上の Apache 1.3.23 + php-4.1.1 です。
1.  "" でくるむと問題ない。
2.  fgets してから explode すると問題ない。
3.  httpd を動かす時に LANG=ja になっていたので LANG=C で上げ直すと
    欠け方が微妙に変わる。


ソースを当たってみたのですが、ext/standard/file.c の fgetcsv で 
isspace((int)*tptr) となってる部分を、
isspace((unsigned char)*tptr) と unsigned char でキャストすることで
文字が欠けないようになりました。

どうやら、isspace(3) で上位バイトが Solaris の locate 関係と絡んで悪さ
をしていると推測しているのですが、他にレポートも見あたらないので、何か
他の問題に依存する問題の気もしています。
# 少なくとも Linux と FreeBSD 上で動いている PHP ではこの問題はありま
# せんでした。

4.1.1 に対する修正差分を以下に置いておきます。
もし同様の症状があるようでしたらお試しください。
http://www.sfc.wide.ad.jp/~masa/tmp/file.c

正しい修正なら本家に送るべきなのですが、何より他の環境でのレポートが欲
しいです。上手く動いた、動かない等の報告が頂けるとありがたいです。


-- 
NAKAYAMA, Masahiro <masa@sfc.wide.ad.jp>
PGP: 0x18770102(DH/DSS) [A0F4 5293 2906 7BE9 E0FC  4264 6992 C64A 1877 0102]