ZipArchive::addFromString

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)

ZipArchive::addFromStringAdd a file to a ZIP archive using its contents

说明

public ZipArchive::addFromString ( string $name , string $content , int $flags = ZipArchive::FL_OVERWRITE ) : bool

Add a file to a ZIP archive using its contents.

Note: 为了最大限度地提高代码可移植性,建议在 ZIP 文件名中使用斜线 (/) 做为目录分隔符。

参数

name

The name of the entry to create.

content

The contents to use to create the entry. It is used in a binary safe mode.

flags

Bitmask consisting of ZipArchive::FL_OVERWRITE, ZipArchive::FL_ENC_GUESS, ZipArchive::FL_ENC_UTF_8, ZipArchive::FL_ENC_CP437. The behaviour of these constants is described on the ZIP constants page.

返回值

成功时返回 true, 或者在失败时返回 false

更新日志

版本 说明
8.0.0 / 1.18.0 flags was added.

范例

Example #1 Add an entry to a new archive

<?php
$zip 
= new ZipArchive;
$res $zip->open('test.zip'ZipArchive::CREATE);
if (
$res === TRUE) {
    
$zip->addFromString('test.txt''file content goes here');
    
$zip->close();
    echo 
'ok';
} else {
    echo 
'failed';
}
?>

Example #2 Add file to a directory inside an archive

<?php
$zip 
= new ZipArchive;
if (
$zip->open('test.zip') === TRUE) {
    
$zip->addFromString('dir/test.txt''file content goes here');
    
$zip->close();
    echo 
'ok';
} else {
    echo 
'failed';
}
?>

User Contributed Notes

hossam6 at gmail dot com 01-Jul-2020 06:32
in case your string contain Arabic char, ZipArchive::addFromString will show it in wrong format char.
in this case you have to change your string coding from Unicode to Windows-1256 code

$filetxt        = iconv('utf-8','CP1256',$filetxt);
$zip            = new ZipArchive;
$zipFName    = "Tmp.zip";
if ($zip->open($zipFName, ZipArchive::CREATE) === TRUE)
{
    $zip->addFromString($fileName . '.csv',  $filetxt);
    $zip->close();
}
tahazit dot co dot il at gmail dot com 28-Nov-2014 01:18
On PHP >5.4, This function will usually create any subfolders inside the ZIP archive.
For instance:

   $zip->addFromString ( 'path/to/file.txt' , $data );

will create the folders "path/", and "path/to/" in addition to placing the newly created file "file.txt" in "path/to/" folder.
xslidian at lidian dot info 20-Feb-2013 12:57
Although numFiles will change after overwriting a file, it will be back normal when you ZipArchive::close() and open() it again.
NULL indexes don't persist either. Only the new order is kept. So feel free to overwrite.

Here overwriting works the same as deleting and adding. So it's not necessary to ZipArchive::deleteName() first.
calebcjh 19-May-2010 12:54
Although this function displaces files of the same name, in actual fact, the original file is blanked and a new entry is added. The numFiles property is incremented.

Example:

File 1: foo
File 2: bar

$zip->addFromString('foo', 'new foo');

File 1:
File 2: bar
File 3: foo
gbti at ukr dot net 16-Nov-2008 10:01
if you try:

<?php
$zip
->open("file", ZipArchive::CREATE);
$zip->addFromString("russian_letters/options.xml");
?>

wrong directory will be created.

if you try:

<?php
$zip
->addEmptyDir("russian_letters");
?>

All be fine.
Jacques Chester 30-Jan-2007 09:10
Note that this function overwrites existing files of the same name.