CakeFest 2024: The Official CakePHP Conference

ZipArchive::addFromString

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

ZipArchive::addFromStringAñadir un fichero al archivo ZIP usando su contenido

Descripción

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

Añade un fichero al archivo ZIP usando su contenido.

Nota: Para una portabilidad máxima, se recomienda utilizar siempre barras hacia adelante (/) como separador de directorios en nombres de ficheros ZIP.

Parámetros

name

Nombre de la entrada a crear.

content

El contenido a usar para crear la entrada. Es usado en modo binary safe.

flags

Máscara de bits compuesta por ZipArchive::FL_OVERWRITE, ZipArchive::FL_ENC_GUESS, ZipArchive::FL_ENC_UTF_8, ZipArchive::FL_ENC_CP437, ZipArchive::FL_OPEN_FILE_NOW. El comportamiento de estas constantes se describe en la página de constantes ZIP.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Historial de cambios

Versión Descripción
8.0.0 / 1.18.0 Se añadio flags.

Ejemplos

Ejemplo #1 Añade una entrada al nuevo fichero

<?php
$zip
= new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if (
$res === TRUE) {
$zip->addFromString('test.txt', 'el contenido del fichero va aquí');
$zip->close();
echo
'ok';
} else {
echo
'failed';
}
?>

Ejemplo #2 Añade un fichero en un directorio dentro de un archivo

<?php
$zip
= new ZipArchive;
if (
$zip->open('test.zip') === TRUE) {
$zip->addFromString('dir/test.txt', 'el contenido del fichero va aquí');
$zip->close();
echo
'ok';
} else {
echo
'falló';
}
?>
add a note

User Contributed Notes 7 notes

up
10
Jacques Chester
17 years ago
Note that this function overwrites existing files of the same name.
up
6
tahazit dot co dot il at gmail dot com
9 years ago
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.
up
7
gbti at ukr dot net
15 years ago
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.
up
5
xslidian at lidian dot info
11 years ago
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.
up
3
hossam6 at gmail dot com
3 years ago
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();
}
up
2
calebcjh
13 years ago
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
up
1
Jon at 9072997 dot com (yes that is real)
1 year ago
ZipArchive::FL_ENC_GUESS, ZipArchive::FL_ENC_UTF_8, and ZipArchive::FL_ENC_CP437 affect the $name parameter, not $content
To Top