2014-02-03 3 views
4

Есть ли способ определить, поврежден ли файл gz в PHP?PHP: Как проверить, поврежден ли файл gz?

настоящее время я использую http://www.php.net/manual/de/function.gzread.php#110078 для определения размера файла и прочитать весь файл * с помощью

$zd = gzopen ($file, "r"); 
$contents = gzread ($zd, $fzip_size); 
gzclose ($zd); 

К сожалению, некоторые GZ файлы повреждены и последние 4 байта не представляют реальную длину файла GZ , Пока число отрицательно, я могу сказать, что что-то не так, но иногда оно положительное (и очень большое), что приводит к ошибке из памяти. Как я могу проверить заранее, если файл поврежден?

  • Я читаю весь файл, потому что я не нашел рабочий способа чтения файла строка за линией, не зная размер самой длинной строки - что привело (в некоторых случаях) для линий, которые не были завершены ,
+0

проверить это http://unix.stackexchange.com/questions/15157/how-to-check-if-a-file-is-corrupt-or-not – Naeem

+1

Вы должны использовать ' "радиоканал" ', а не' 'r" 'при открытии. Тогда у вас может не возникнуть проблема в первую очередь. –

ответ

0

Если вы можете использовать команду linux gzip, это будет очень просто найти, является ли файл неправильным или нет. gzip -t покажет сообщение, если файл действителен.

if (`gzip -t $file 2>&1`) { 
    echo "An error occured"; 
} 
+0

'if ('gzip -t $ file 2> & 1')' в PHP всегда будет возвращать true. Это строка. –

+2

@ c-griffin: условие 'if' выполняет внешнюю программу. Результатом является пустая или не пустая строка. Обратите внимание, что 'это не то же самое, что ', которое вы использовали в своем комментарии. Источник: [link] (http://php.net/manual/en/language.operators.execution.php) – Mariusz

+0

Хммм вы правы! Извините, человек, думал, что они одинарные кавычки, и даже не знал, что вы можете использовать тики для запуска команд оболочки. –

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