phpでzipファイルをダウンロードした結果、zipファイルが開けません。
サーバー側にあるzipファイルサイズとダウンロードされるzipファイルサイズが違いました。
ダウンロードで何か必要な処理があるのでしょうか?
圧縮には、Pythonを使用しています。
php
1<?php 2// download.php 3if(empty($_GET['zipname'])){ 4 include_once(__DIR__.'/error.html'); 5 exit; 6} 7$zip_file_name = __DIR__.'/download/'.$_GET['zipname']; 8 9if(!is_file($zip_file_name)){ 10 include_once(__DIR__.'/error.html'); 11 exit; 12} 13 14header("Content-type: application/zip"); 15header('Content-Disposition: attachment; filename="'.$_GET['zipname'].'"'); 16header('Content-Length: '.filesize($zip_file_name)); 17ob_end_clean(); 18readfile($zip_file_name); 19unlink($zip_file_name); 20exit; 21?>
Pythonの圧縮コード
python
1# compression.py 2import sys 3import zipfile 4import glob 5import os 6import shutil 7 8dir = glob.glob(sys.argv[1]+'/*') 9zipname = './download/'+sys.argv[2] 10 11zip = zipfile.ZipFile(zipname, "w", zipfile.ZIP_DEFLATED) 12for file in dir: 13 zip.write(file, arcname=os.path.basename(file)) 14 os.remove(file) 15zip.close() 16try: 17 shutil.rmtree(sys.argv[1]) 18except OSError: 19 print('dir_delete_error') 20 exit 21 22print('completion')
Pythonの方はサーバー側で正常に動作しzipファイルが生成されています。
> ファイルサイズが違いました。
どう違ったのでしょうか?

サーバー側のzipファイルサイズ: 1.28 kB
ダウンロードしたzipファイルサイズ: 2 kb
誤差かもしれません。
正確なファイルサイズの確認をしていないと言うことですかね。
エラー画面が保存されているのでは?ファイルの中味も見てないんですよね?

ファイルの中身は見ました。
サーバー側には、アップロードしたファイルが圧縮されて入っていますが、ダウンロードしたファイルはそもそも開けません。
Pythonやphpからのエラー情報はありません。
> ファイルの中身は見ました。
と
> ダウンロードしたファイルはそもそも開けません。
とは矛盾します。
「開けない」とは何のことですか?「開き方がわからない」ということですか?
エディターが無ければ、メモ帳でもいいですが。

ダウンロードしたファイルをエクスプローラーで開こうとすると
フォルダーは開けません。
圧縮(zip形式)フォルダー'C:\Users\ユーザー名\Downloads\ファイル名.zip'は無効です。
とでます。

説明不足ですみません。
> ファイルの中身は見ました。
これは、サーバー側からFTPを使用してダウンロードしたzipファイルのことを指しています。
サーバー側からFTPを使用してダウンロードしたzipファイルはエクスプローラーで開けます。
> ダウンロードしたファイルはそもそも開けません。
これは、php (download.php)からダウンロードしたzipファイルのことを指しています。
メモ帳からphpからダウンロードしたzipファイルを開いた結果です。
<br />
<b>Notice</b>: ob_clean(): Failed to delete buffer. No buffer to delete in <b>/web/beta/download.php</b> on line <b>25</b><br />

回答1件
あなたの回答
tips
プレビュー