プロが教える店舗&オフィスのセキュリティ対策術

【PHP】csvファイルへの書き出し(1行追加or1行上書き)について

はじめて利用させていただきます。
現在、PHPにて書き出し処理を作成している者ですが、csvファイルへの書き出しの際に先頭行にスペースが大量に入ってしまい、困っています。
自分なりに調べてみたのですが、原因がわかりません。詳しい方からのアドバイスをお願いしたいです。

【行っている処理】
1.csvファイルを1行ずつ読み込み、配列に格納
2.既存のデータに同じ名前の人が存在する場合は、その行の配列の内容を変更(存在しない場合は配列の末尾に1件追加)
4.現在ファイルにあるデータを削除(丸めこみ)し、配列データを書き書き出し

【ソース】(書き出し処理に問題があると思ったため、それ以外の部分は割愛させていただきます)
<?php
$filename = 'data.csv';
$file = fopen($filename, "r+" );

$name = array();

if(flock($file,LOCK_SH)){
while( $data = fgetcsv( $file, 1000, "," ) ) {
  //配列に格納
}

//配列の内容変更or新規に一行追加処理

//現在のファイル内のデータを削除(まるめこみ)
ftruncate($file, 0);

//1行分のデータをカンマ区切りで結合し、書き出し
for($i = 0; $i < $count; $i++){
$ins = $name[$i];
$ins .= ',';
$ins .= $number[$i];

//書き込み失敗時のエラー
if(fwrite($file, "$ins\n" ) === FALSE){
print("ファイル書き込みに失敗しました");
}else{
//処理なし
}
}

//ファイルロック解除
flock($file, LOCK_UN);
}else{
print("ファイルロックに失敗しました");
}

【csvファイルの中身(処理実行前)】
佐藤,1234
田中,12345
中村,9876

【csvファイルの中身(処理実行後)】
                      佐藤,1234
田中,12345
中村,9876

以上です。
よろしくお願いします。

A 回答 (1件)

「ftruncate($file, 0);」の後に「rewind($file);」か「fseek($file, 0);」を追加して、


ファイルポインタを先頭に戻せばよいと思います。
    • good
    • 0
この回答へのお礼

教えて頂いたようにプログラムを修正したところ、書き込みが正常に行えるようになりました。
ありがとうございます^^

お礼日時:2010/10/02 18:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!