使用file()时的随机换行符

时间:2014-04-06 16:36:54

标签: php database file line-breaks

我正在创建一个flatfile数据库,在我用来向现有表添加字段的函数之一中,我使用file()来获取表,第一行总是包含字段表格,所以我可以轻松地将新字段附加到预先存在的字段

public function addFields($table_fields) {
    // Make sure he opened a connection to the table
    if(empty($this->table_name)) throw new Exception('There is no connection to a table opened.');

    // Make sure table_fields is an array
    if(is_array($table_fields) === FALSE) throw new Exception('TABLE_FIELDS must be an array');

    // Build the data
    $table_data = file($this->table_name);
    $table_header = $table_data[0].self::$field_deliemeter;
    $table_header .= implode(self::$field_deliemeter, $table_fields);
    $table_data[0] = $table_header;
    // Put the data in the table
    file_put_contents($this->table_name, implode(self::$linebreak, $table_data));
    }
}

问题在于,使用此

将字段名添加到预先存在的字段名后
    $table_data = file($this->table_name);
    $table_header = $table_data[0].self::$field_deliemeter;
    $table_header .= implode(self::$field_deliemeter, $table_fields);
    $table_data[0] = $table_header;

第一个0的索引似乎包含一个换行符,即使file()应该删除,因为文件因换行符而崩溃

所以例如,如果我的表是

Name    Email   Password    IP  Login_Date
somename    someemail   123 123 123

然后通过这样做

来运行课程
$db = new FlatDB;
$fields = array("Last_Click");
$db->openTable('Test');
$db->addFields($fields);

变成这个

Name    Email   Password    IP  Login_Date
    Last_Click
Ali ali-trixx@live.com  123 123 123

如您所见,它在第一行之后添加了一个随机换行符,我不知道它为什么会这样做,因为file()应该删除换行符

注意:$ field_deliemeter是" \ t"

有谁知道为什么会这样做?

在插入之前运行print_r($table_data),我得到了这个

Array ( [0] => Name Email   Password    IP  Login_Date Last_Click [1] => somename   someemail   123 123 123 )

1 个答案:

答案 0 :(得分:1)

为什么会这样做,因为file()应该删除换行符”?

仅在您使用FILE_IGNORE_NEW_LINES时。检查file()

$table_data = file($this->table_name, FILE_IGNORE_NEW_LINES);
  

返回数组中的文件。数组的每个元素对应于   文件中的一行,新行仍然附加。失败后,   file()返回FALSE。

     

注意:结果数组中的每一行都包含行结尾,   除非使用FILE_IGNORE_NEW_LINES,否则你仍然需要使用rtrim()   如果你不希望行结束存在。