PHP Conference Japan 2024

ZipArchive::addFromString

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

ZipArchive::addFromString使用文件内容向 ZIP 压缩文件添加文件

描述

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

使用文件内容向 ZIP 压缩文件添加文件。

注意: 为了最大限度地提高可移植性,建议始终使用正斜杠 (/) 作为 ZIP 文件名中的目录分隔符。

参数

name

要创建的条目的名称。

content

用于创建条目的内容。它在二进制安全模式下使用。

flags

ZipArchive::FL_OVERWRITEZipArchive::FL_ENC_GUESSZipArchive::FL_ENC_UTF_8ZipArchive::FL_ENC_CP437 组成的位掩码。这些常量的行为在 ZIP 常量 页面中有描述。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
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';
}
?>
添加注释

用户贡献的注释 7 条注释

Jacques Chester
17 年前
请注意,此函数会覆盖同名文件。
tahazit dot co dot il at gmail dot com
10 年前
在 PHP > 5.4 中,此函数通常会创建 ZIP 压缩文件内的任何子文件夹。
例如

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

除了将新创建的文件 "file.txt" 放入 "path/to/" 文件夹外,还会创建 "path/" 和 "path/to/" 文件夹。
gbti at ukr dot net
16 年前
如果您尝试

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

将创建错误的目录。

如果您尝试

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

一切都会好起来的。
hossam6 at gmail dot com
4 年前
如果您的字符串包含阿拉伯字符,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();
}
xslidian at lidian dot info
11 年前
虽然覆盖文件后 numFiles 会发生变化,但是当您再次 ZipArchive::close() 和 open() 时,它会恢复正常。
NULL 索引也不会持久存在。只保留新的顺序。因此,可以随意覆盖。

这里的覆盖操作与先删除再添加相同。因此,无需首先使用 ZipArchive::deleteName()。
calebcjh
14 年前
虽然此函数会替换同名文件,但实际上,原始文件会被清空并添加一个新条目。numFiles 属性会递增。

示例

文件 1:foo
文件 2:bar

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

文件 1
文件 2:bar
文件 3:foo
Jon at 9072997 dot com (yes that is real)
2 年前
ZipArchive::FL_ENC_GUESS、ZipArchive::FL_ENC_UTF-8 和 ZipArchive::FL_ENC_CP437 会影响 $name 参数,而不是 $content
To Top