こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

php4、php5によるimplode()、file()の動作の違い?

お世話になります。
SJISのファイルで、
//----コメント
//あああ
//---------------
あああ,いいいいいいいいいいいいい
ううううう,えええええええええええええ

のようなファイルを作成して
$csv へこSJISファイルのファイルパスを設定し、
$FielList = mb_convert_encoding(@implode('', @file($csv,FILE_SKIP_EMPTY_LINES)), "UTF-8", "SJIS");
$RowData = split("\r\n",$FielList);
foreach($RowData as $Value) {
$FName=trim($FName);$Cmnt=trim($Cmnt);
echo '$FName='.$FName.'<br> $Cmnt='.$Cmnt.'<br>';
}
と、その内容を見ると
php5では、
$FName=//あああ
$FName=//---------------
$FName=あああ
$Cmnt=いいいいいいいいいいいいい
$FName=ううううう
$Cmnt=えええええええええええええ
と、想定の結果が得られます。
しかし、php4だと、
$FName=//あああ//---------------
となってしまい、どうもcsvファイルの内容が\r\nにより仕切られて配列とならないようです。
そこで、
$FielList = mb_convert_encoding(@implode('###', @file($csv,FILE_SKIP_EMPTY_LINES)), "UTF-8", "SJIS");
$RowData = split("###",$FielList);
とすれば、php4,php5でも動作します。
また、
$FielList = mb_convert_encoding(@implode('', @file($csv,FILE_SKIP_EMPTY_LINES)), "UTF-8", "SJIS");
$RowData = split("\n",$FielList);
とすると、php4で予想の結果が返されますが、
php5では、echo で何も表示されなくなります。
ません。

php4、php5による
\r\nの扱いの違い
implode()の動作の違い
file()の動作の違い
だと思うのですが、どのように違うのかがわかりません。
このあたりのことをおわかりの方、
implode('###',@file(・・・ )
と記述しなくても
implode('',@file(・・・ )
と記述することによりphp4、php5で同じように動作する方法がわからないでしょうか。
よろしくお願いいたします。

投稿日時 - 2009-02-06 12:59:05

QNo.4694020

困ってます

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

php4と5で動作が違うようなソースとは思えないけど、foreach で表示している変数名が違うので、ちゃんとデータの確認が出来てるのか疑問ですけど。
わざわさくっつけて分解するより mb_convert_variables() (php4.0.6以降)で配列のまま変換した方がいいと思う。内部では、implode,explodeを行っていますので同じことですが。
$RowData = file($csv,FILE_SKIP_EMPTY_LINES);
mb_convert_variables("UTF-8", "SJIS", $RowData ) ;
var_dump($RowData );

それから、デバッグ中は、エラー出力するようにした方がよいです、本当の問題が@により隠蔽されてるかもしれません。

投稿日時 - 2009-02-07 00:32:54

補足

hrm_mmmさん、今日は。
できました。
>$RowData = file($csv,FILE_SKIP_EMPTY_LINES);
>mb_convert_variables("UTF-8", "SJIS", $RowData ) ;
と、したところ、PHP4、5でダンプにも差がなくなりました。
どうもありがとうございました。

投稿日時 - 2009-02-09 12:22:44

お礼

hrm_mmmさん、お早うございます。レスありがとうござ益す。
>php4と5で動作が違うようなソースとは思えないけど
そうですか。
>mb_convert_variables()
このような関数が合ったのですね。
知らなかったものですからimplode,explodeを行いました。
早速試してみます。
でも、php4のサーバは、職場からでないとアクセスできません。
今日明日は、休みなので月曜に早速アップして試してみます。
結果ご報告させていただきます。
ありがとうございました。

投稿日時 - 2009-02-07 08:20:34

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問