请注意,此函数会覆盖同名文件。
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)
ZipArchive::addFromString — 使用文件内容向 ZIP 压缩文件添加文件
$name
, string $content
, int $flags
= ZipArchive::FL_OVERWRITE): bool使用文件内容向 ZIP 压缩文件添加文件。
注意: 为了最大限度地提高可移植性,建议始终使用正斜杠 (
/
) 作为 ZIP 文件名中的目录分隔符。
name
要创建的条目的名称。
content
用于创建条目的内容。它在二进制安全模式下使用。
flags
由 ZipArchive::FL_OVERWRITE
、ZipArchive::FL_ENC_GUESS
、ZipArchive::FL_ENC_UTF_8
、ZipArchive::FL_ENC_CP437
组成的位掩码。这些常量的行为在 ZIP 常量 页面中有描述。
版本 | 描述 |
---|---|
8.0.0, PECL zip 1.18.0 |
添加了 flags 。 |
示例 #1 向新的压缩文件添加条目
<?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';
}
?>
示例 #2 向压缩文件内的目录添加文件
<?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';
}
?>
在 PHP > 5.4 中,此函数通常会创建 ZIP 压缩文件内的任何子文件夹。
例如
$zip->addFromString ( 'path/to/file.txt' , $data );
除了将新创建的文件 "file.txt" 放入 "path/to/" 文件夹外,还会创建 "path/" 和 "path/to/" 文件夹。
如果您尝试
<?php
$zip->open("file", ZipArchive::CREATE);
$zip->addFromString("russian_letters/options.xml");
?>
将创建错误的目录。
如果您尝试
<?php
$zip->addEmptyDir("russian_letters");
?>
一切都会好起来的。
如果您的字符串包含阿拉伯字符,ZipArchive::addFromString 将以错误的字符格式显示它。
在这种情况下,您必须将字符串编码从 Unicode 更改为 Windows-1256 代码
$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();
}
虽然覆盖文件后 numFiles 会发生变化,但是当您再次 ZipArchive::close() 和 open() 时,它会恢复正常。
NULL 索引也不会持久存在。只保留新的顺序。因此,可以随意覆盖。
这里的覆盖操作与先删除再添加相同。因此,无需首先使用 ZipArchive::deleteName()。
虽然此函数会替换同名文件,但实际上,原始文件会被清空并添加一个新条目。numFiles 属性会递增。
示例
文件 1:foo
文件 2:bar
$zip->addFromString('foo', 'new foo');
文件 1
文件 2:bar
文件 3:foo
ZipArchive::FL_ENC_GUESS、ZipArchive::FL_ENC_UTF-8 和 ZipArchive::FL_ENC_CP437 会影响 $name 参数,而不是 $content