3

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

$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对文件执行操作,它可以正确回显,但我希望文件以纯文本形式存储。

4

1 回答 1

2

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

于 2012-10-30T19:02:34.543 回答