2013-03-07 71 views
5

所以我想要做的是取2个字符串并创建2个文件。然后从这些文件中创建一个zip文件,并让用户下载它们。PHP从2个字符串变量中创建一个zip文件

以下是我有:

$string1 = 'Some data some data some data'; 
$string2 = 'Some data some data some data'; 


$zip = new ZipArchive(); 
$filename = "test.zip"; 

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) { 
    exit("cannot open <$filename>\n"); 
} 


$zip->addFromString("string1.txt", $string1); 
$zip->addFromString("string2.txt", $string2); 
$zip->close(); 

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"".$filename."\""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: ".filesize('test.zip')); 

到目前为止没有运气。任何帮助表示赞赏。

+1

'$ zip-> addFromString( “string2.txt”,$字符串1) ;'应该是'$ zip-> addFromString(“string2.txt”,$ string2);' – Patashu 2013-03-07 00:34:15

+2

我没有看到你实际发送的*你创建的zip文件? – 2013-03-07 00:38:01

+0

嗯....我应该怎么做才能传送? – chiminage 2013-03-07 00:39:56

回答

8

您错过了最重要的部分 - 输出该文件! :)

地址:

readfile('test.zip'); 

到PHP文件的末尾。


另外,HTTP内容长度报头的计算是错误的:

header("Content-Length: ".filesize($zip)); 

这会给你总是0(或假)作为文件大小预计的文件名作为其参数。

行更改为:

header("Content-Length: ".filesize('test.zip')); 

做的这两种压缩将成功下载后,并包含这两个文件。对于completenes,来这里的全工作示例:

$string1 = 'Some data some data some data'; 
$string2 = 'Some data some data some data'; 


$zip = new ZipArchive(); 
$filename = "test.zip"; 

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) { 
    exit("cannot open <$filename>\n"); 
} 


$zip->addFromString("string1.txt", $string1); 
$zip->addFromString("string2.txt", $string1); 
$zip->close(); 

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"".$filename."\""); 
header("Content-Transfer-Encoding: binary"); 
// make sure the file size isn't cached 
clearstatcache(); 
header("Content-Length: ".filesize('test.zip')); 
// output the file 
readfile('test.zip'); 
+0

耶......我改变了,但我仍然得到一个zip文件,当你打开它会带来另一个拉链,它似乎是一个循环 – chiminage 2013-03-07 00:41:36

+0

耶稣基督我是一个白痴.....非常感谢你。它完美的作品。 – chiminage 2013-03-07 00:44:31

+0

不客气。有时候会监督最重要的事情;)(我也错过了在阅读问题时首先检查这个问题,并首先看到了文件大小问题。不要忘记修复这个问题) – hek2mgl 2013-03-07 00:49:45

1

你有一个PHP错误(你可能不有错误报告打开或足够高的错误级别)。

filesize()函数接受一个字符串而不是一个对象。文件大小($文件名)将工作。

打开错误报告做:

的error_reporting(E_ALL | E_STRICT); ini_set('display_errors',1);

或者做到这一点在php.ini

1

所有这些头后()调用,我想你想:

readfile($filename); 
相关问题