2024 年日本 PHP 研討會

ZipArchive::addFromString

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

ZipArchive::addFromString使用檔案內容將檔案新增至 ZIP 封存

說明

公開 ZipArchive::addFromString(字串 $name, 字串 $content, 整數 $flags = ZipArchive::FL_OVERWRITE): 布林值

使用其內容將檔案新增至 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', '檔案內容寫在這裡');
$zip->close();
echo
'ok';
} else {
echo
'失敗';
}
?>

範例 #2 將檔案新增至檔案內的目錄

<?php
$zip
= new ZipArchive;
if (
$zip->open('test.zip') === TRUE) {
$zip->addFromString('dir/test.txt', '檔案內容寫在這裡');
$zip->close();
echo
'ok';
} else {
echo
'失敗';
}
?>
新增備註

使用者貢獻的備註 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