2015-12-31 2 views
3

Я пытаюсь прочитать 3 МБ-файл в PHP. Я использую fopen, чтобы получить дескриптор, и fread, чтобы прочитать его. Но когда я вызываю fread после чтения ~ 1/2 файла, он перестает читать, а моя функция распаковки выдает ошибку, говоря, что она получает 0 байт. Есть идеи?PHP fopen не получает весь файл

Это моя бинарная функция чтения:

function binaryReadUShort($f){ 
     return unpack("S",fread($f,4))[1]; 
     } 

И это код для чтения высот. $ fh - это дескриптор файла.

for($y = 0; $y < $size; $y++){ 
     for($x = 0; $x < $size; $x++){ 
     $height = binaryReadUShort($fh); 
     $height = $height/65535; 
     $height = $height * 255; 

     $color_alloc = imagecolorallocate($img,$height,$height,$height); 
     imagesetpixel($img,$x,$y,$color_alloc); 
     } 
    } 

Кроме того, размер файла() возвращает правильное количество байтов в файле, и я сделала тест, в котором я насчитал байты, которые я читал. Я подтвердил, что НЕ пытаюсь прочитать конец файла.

+1

Как вы открываете файл? Можете ли вы добавить этот код и к своему вопросу? – Cristik

+0

'ReadUShort/fread (.., 4)' - Короткий, состоящий из 4 байтов, вы абсолютно уверены в этом? – VolkerK

+0

попробуйте 'Q' как первый параметр' unpack'? –

ответ

1

Без дополнительной информации, которую я считаю, что догадка, что вы хотите прочитать 2-байтовые беззнаковые шорты - >

fread($f,2) 
+0

Wow я слепой! Вот и все: P – aaro4130

Смежные вопросы