請注意,此函式會覆寫同名的現有檔案。
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)
ZipArchive::addFromString — 使用檔案內容將檔案新增至 ZIP 封存
使用其內容將檔案新增至 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', '檔案內容寫在這裡');
$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 '失敗';
}
?>
在 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 參數