Note that this function overwrites existing files of the same name.
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)
ZipArchive::addFromString — Ajoute un fichier à une archive ZIP en utilisant son contenu
$name
, string $content
, int $flags
= ZipArchive::FL_OVERWRITE): boolAjoute un fichier à une archive ZIP en utilisant son contenu.
Note: Pour une portabilité maximale, il est recommandé de toujours utiliser des barres obliques (
/
) comme séparateur de dossier dans les noms de fichiers zip.
name
Le nom de l'entrée à créer
content
Le contenu à utiliser pour créer l'entrée. Ceci est utilisé dans un mode binaire sécurisé.
flags
Masque de bit consistant de
ZipArchive::FL_OVERWRITE
,
ZipArchive::FL_ENC_GUESS
,
ZipArchive::FL_ENC_UTF_8
,
ZipArchive::FL_ENC_CP437
.
Le comportement de ces constantes est décrites sur la page des
constantes ZIP.
Version | Description |
---|---|
8.0.0 / PECL zip 1.18.0 |
flags a été ajouté.
|
Exemple #1 Ajout d'une entrée dans une nouvelle archive
<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'contenu du fichier ici');
$zip->close();
echo 'ok';
} else {
echo 'échec';
}
?>
Exemple #2 Ajout d'un fichier dans un dossier d'une archive
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->addFromString('dir/test.txt', 'contenu du fichier ici');
$zip->close();
echo 'ok';
} else {
echo 'échec';
}
?>
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.
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.
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.
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();
}
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
ZipArchive::FL_ENC_GUESS, ZipArchive::FL_ENC_UTF_8, and ZipArchive::FL_ENC_CP437 affect the $name parameter, not $content