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 — Fügt eine Datei unter Verwendung ihres Inhalts zu einem ZIP-Archiv hinzu
$name
, string $content
, int $flags
= ZipArchive::FL_OVERWRITE): boolFügt eine Datei unter Verwendung ihres Inhalts zu einem ZIP-Archiv hinzu.
Hinweis: Für maximale Portierbarkeit wird empfohlen, in ZIP-Dateinamen immer Schrägstriche (
/
) als Verzeichnis-Trennzeichen zu verwenden.
name
Der Name des anzulegenden Eintrags.
content
Der Inhalt, der zum Erstellen des Eintrags verwendet werden soll. Dieser wird im Binary-safe-Modus verwendet.
flags
Eine Bitmaske bestehend aus
ZipArchive::FL_OVERWRITE
,
ZipArchive::FL_ENC_GUESS
,
ZipArchive::FL_ENC_UTF_8
,
ZipArchive::FL_ENC_CP437
.
Das Verhalten dieser Konstanten wird in der
ZIP-Konstanten Seite beschrieben.
Version | Beschreibung |
---|---|
8.0.0, PECL zip 1.18.0 |
flags wurde hinzugefügt.
|
Beispiel #1 Einen Eintrag zu einem neuen Archiv hinzufügen
<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'Dateiinhalt kommt hier');
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
Beispiel #2 Eine Datei zu einem Verzeichnis innerhalb eines Archivs hinzufügen
<?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 'Fehler';
}
?>
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.
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.
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 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.
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