[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись бинарных файлов
at0m1x
Как правильно записывать и считывать бинарные файлы на PHP?
Ниже код, который выдает такую ошибку:


Warning: unpack(): Type I: not enough input, need 4, have 1


Т.е. не срабатывает ф-я feof. Хотя достигнув конца файла она должна остановить цикл. Возможно, при записи бинарного файла нужно самому записывать и символ EOF?


//id,login,email,phone
$users = [
[
1, 'user1', 'user1@mail.com', 786214569851],
[
2, 'user2', 'user2@mail.com', 786214569852],
[
3, 'user3', 'user3@mail.com', 786214569853],
];


$bin = '';
foreach ($users as $values) {
list($id, $login, $email, $phone) = $values;
$loginLength = strlen($login);
$emailLength = strlen($email);

$bin .= pack("I2a{$loginLength}Ia{$emailLength}I", $id, $loginLength, $login, $emailLength, $email, $phone);
}

$handle = fopen('users.bin', 'wb');
fwrite($handle, $bin);
fclose($handle);

//---------------------

$users = [];
$handle = fopen('users.bin', 'rb');
while(!feof($handle)) {
$data = fread($handle, 4);
$data = unpack('Iid', $data);
$result['id'] = $data['id'];

$data = fread($handle, 4);
$data = unpack('Ilength', $data);
$loginLength = $data['length'];

$data = fread($handle, $loginLength);
$data = unpack('a*login', $data);
$result['login'] = $data['login'];

$data = fread($handle, 4);
$data = unpack('Ilength', $data);
$emailLength = $data['length'];

$data = fread($handle, $emailLength);
$data = unpack('a*email', $data);
$result['email'] = $data['email'];

$data = fread($handle, 4);
$data = unpack('Iphone', $data);
$result['phone'] = $phone;

$users[] = $result;
}
fclose($handle);

print_r($users);
die;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.