将PHP数组写入文件会生成二进制而不是纯文本

时间:2012-10-30 16:50:01

标签: php

我正在尝试使用纯文本(非二进制)将数组或对象写入文件,但每当我遍历数组并查看文件时,我会收到二进制文件。

$this->user$this->temp_files['in_file_name']会先传入函数。

$user_array = (array)$this->user;
$data = "";

foreach ($user_array as $key => $value) {
    $data .= "$key $value\n";
}

file_put_contents($this->temp_files['in_file_name'], $data);

如果我只是将一个字符串传递给$data,它将以纯文本形式写入文件,但是当我遍历对象或数组时,我会收到二进制文件。有没有办法在文件中获取此数组的纯文本版本?

$this->user是一个数据库行,作为来自Ion_Auth的对象,由:

调用
$this->user =$this->ion_auth->user($this->user_id)->row();

以下是文件输出的一部分

  

4461 7465 2054 7565 7364 6179 204f 6374 6f62 6572 2033 302c 2032 3031 3269 6420 320a 6970 5f61 6464 7265 7373 207f 0000 010a 7573 6572 6e61 6d65 2062 7261 6e64 6f6e 2062 6f73 7765 6c6c 0a70 6173 7377 6f72 6420 6539 3936 3630 6665 3039 3535 6663 3862 3431 6639 3838 3066 3639 6131 6664 6635

用户数组的var_dump是:(出于数据安全原因,我更改了一些值)

array (size=22)
  'id' => string '2' (length=1)
  'ip_address' => string '��' (length=4)
  'username' => string 'brandon' (length=15)
  'password' => string 'changed' (length=40)
  'salt' => null
  'email' => string 'brandon@changed.net' (length=27)
  'activation_code' => null
  'forgotten_password_code' => null
  'forgotten_password_time' => null
  'remember_code' => string 'changed' (length=40)
  'created_on' => string '1337702147' (length=10)
  'last_login' => string '1351607850' (length=10)
  'active' => string '1' (length=1)
  'first_name' => string 'Brandon' (length=7)
  'last_name' => string 'changed' (length=7)
  'company' => string 'changed' (length=17)
  'phone' => string '804-814-changed' (length=12)
  'store' => string 'mechanicsville' (length=14)
  'delivery' => string '1' (length=1)
  'receiveEmails' => string '1' (length=1)
  'customerType' => string 'business' (length=8)
  'user_id' => string '2' (length=1)

如果我对文件执行file_get_contents,则可以正确回显,但我希望文件以纯文本形式存储。

1 个答案:

答案 0 :(得分:2)

解码您发布的十六进制字节会显示正确的数据。所以我会猜测:PHP正在完美地编写文件,但IP地址(127.0.0.1)中的原始空字节会混淆用于打开文件的操作系统或编辑器,认为这不是文本文件,因此它会在十六进制编辑器视图中显示它。尝试在其他编辑器中打开文件,或将'ip_address'字段另存为文本。