2016-08-31 3 views
1

У меня есть этот код, чтобы загрузить ZIP-файл с сервера:PHP Загрузка пустых файлов и некоторые Обычно

<?php 
$path_parts = pathinfo($_GET['a']); 
$file_name = $path_parts['basename']; 
$file_path = 'temp/' . $file_name; 

if (file_exists($file_path)) { 
    $size = filesize($file_path); 

    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header("Content-Description: File Transfer"); 
    header("Content-Disposition: attachment; filename=$file_name"); 
    header('Expires: 0'); 
    header("Content-Type: application/zip"); 
    header("Content-length: $size"); 
    header("Content-Transfer-Encoding: binary"); 

    // read the file from disk 
    readfile($file_path); 
} 

else 
    echo 'File does not exists'; 
?> 

файлы хранятся в папке /temp и любопытная вещь, что если я скачиваю TXT файл, он работает в порядке, но если файл является файлом ZIP, он загружает пустой файл. Даже если я изменю расширение файла ZIP на TXT, он по-прежнему загружается пустым, но любая другая загрузка файла просто прекрасна. Что может вызвать такое поведение?

Фактически, он загружает любой другой файл, кроме ZIP файлов в папке.

ответ

0

Проблема заключается в том, что PHP не читать ZIP файлы, созданные в Java-приложение, которое производит их. Но, любой другой файл ZIP читается.

Поскольку я использую Java для создания файлов ZIP, мне пришлось заменить метод на этот, размещенный здесь (https://www.mkyong.com/java/how-to-compress-files-in-zip-format/). Теперь он работает нормально.

0

Возможно, это размер файла, а не расширение. Посмотрите в свой файл php.ini и посмотрите, для чего установлены эти значения. Если ваш файл больше, чем это, это объясняет это.

post_max_size=5M 
upload_max_filesize=5M 
-1

Попробуйте использовать

header("Content-type: application/octet-stream"); 

вместо

header("Content-Type: application/zip"); 
+0

Я просто сделал, и он загружает файлы 'TXT',' JAR' и любые другие файлы, но файлы 'ZIP' пусты. –

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