我只有在尝试构建iPhone静态库的单元测试时才会出现以下错误:
Undefined symbols for architecture i386:
"std::terminate()", referenced from:
-[ZipArchive dealloc] in libMyProject.a(ZipArchive.o)
"___gxx_personality_v0", referenced from:
Dwarf Exception Unwind Info (__eh_frame) in libMyProject.a(ZipArchive.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
构建原始项目工作正常.
我能错过什么?
应该注意的是,ZipArchive是一个引用libz.dylib框架的.mm文件,该框架在原始项目和测试项目中都被引用.
此外,通常的Build Settings嫌疑人具有以下值:
框架搜索路径:"$(SDKROOT)/ Developer/Library/Frameworks""$(DEVELOPER_LIBRARY_DIR)/ Frameworks"
其他链接器标志:-all_load -lxml2 - ObjC
标题搜索路径:/ usr/include/libxml2
我正在使用phps ZipArchive类来创建目录的zip文件.代码适用于几乎所有目录,除了两个,这恰好是最大的目录(最大的目录目前包含51个文件,总共175MB).当我运行这些目录的代码时,将创建一个临时文件('filename.zip.[RandomLettersAndNumbers]',例如'filename.zip.riaab4'),大小为67,108,864字节,脚本会抛出内部服务器错误(500).
到目前为止我尝试过的(大部分内容仍然在源代码中可见):
memory_limitmax_execution_time$zip_archive->close();资源:
//Temporary (debugging) START
ini_set("log_errors", 1);
ini_set("error_log", "php-error.log");
error_log("Hello errors.");
ini_set('memory_limit','512M');
set_time_limit(180);
//phpinfo();
//Temporary (debugging) END
//Get selected directory
// --> Code removed
$result['directory'] = 'directory1';
//Create .zip file
$zip_archive = new ZipArchive();
$ZIP = 'files/'.$result['directory'].'.zip';
if($zip_archive->open($ZIP, ZipArchive::CREATE | ZIPARCHIVE::OVERWRITE) !== TRUE) {
echo 'Error! Error while creating ZIP Archive.';
die;
}
foreach(new DirectoryIterator('files/'.$result['directory']) as $fileInfo) {
if($fileInfo->isDot())
continue;
if(file_exists($fileInfo->getPath()))
$zip_archive->addFile('files/'.$result['directory'].'/'.$fileInfo->getFilename(), $fileInfo->getFilename());
}
//Temporary (debugging) START
echo '<br><br><br>';
var_dump($zip_archive->close());
// …Run Code Online (Sandbox Code Playgroud) 我正在尝试编辑XmlDocumentZip文件中包含的文件:
var zip = new ZipArchive(myZipFileInMemoryStream, ZipArchiveMode.Update);
var entry = zip.GetEntry("filenameToEdit");
using (var st = entry.Open())
{
var xml = new XmlDocument();
xml.Load(st);
foreach (XmlElement el in xml.GetElementsByTagName("Relationship"))
{
if(el.HasAttribute("Target") && el.GetAttribute("Target").Contains(".dat")){
el.SetAttribute("Target", path);
}
}
xml.Save(st);
}
Run Code Online (Sandbox Code Playgroud)
执行此代码后,所包含的文件不会更改.如果不是xml.Save(st);我把xml写入磁盘,我得到了编辑过的.
为什么编辑后的文件没有写入zip?我如何解决它?
编辑:
我更新了代码:
var tmp = new MemoryStream();
using (var zip = new ZipArchive(template, ZipArchiveMode.Read, true))
{
var entry = zip.GetEntry("xml");
using (var st = entry.Open())
{
var xml = new XmlDocument();
xml.Load(st);
foreach (XmlElement el in …Run Code Online (Sandbox Code Playgroud) 我在安装PHP zip存档时遇到一些问题,不确定如何解决此问题。我正在使用PHP 7.2运行Ubuntu 18
我在终端收到的错误是
The following packages have unmet dependencies.
php7.2-zip : Depends: php7.2-common (= 7.2.5-0ubuntu0.18.04.1) but 7.2.5-
1+ubuntu17.10.1+deb.sury.org+1 is to be installed
E: Unable to correct problems, you have held broken packages.
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激,谢谢
我可以使用相对路径压缩文件吗?
例如:
$zip->addFile('c:/wamp/www/foo/file.txt');
ZIP应该有一个目录结构,如:
foo
-> file.txt
Run Code Online (Sandbox Code Playgroud)
并不是:
wamp
-> www
-> foo
-> file.txt
Run Code Online (Sandbox Code Playgroud)
喜欢它是默认的...
ps:我的完整代码就在这里(我正在使用ZipArchive将目录内容压缩成zip文件)
我正在尝试使用基于数组结构的目录树创建一个zip文件。
当我需要从目录树创建一个zip文件时,我已经使用了这个答案,但是在这种情况下,所有文件都位于同一目录中,并且目录树基于数据库中的其他数据。
我检查了所有文件的路径都正确,并且foreach循环正常工作。$ zip-> close发生错误。
这就是代码(原始数组在每个级别都有很多条目):
$zip_array = array( 'Level 1' => array(
'Level 2' => array (
'file 1' => '/var/www/html/pdf/683026577.pdf',
'file 2' => '/var/www/html/pdf/683026578.pdf'
'file 3' => '/var/www/html/pdf/683026579.pdf'
)
)
);
$destination = 'testzip.zip';
$zip = new ZipArchive();
if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
echo "fail";
}
foreach ($zip_array as $key => $level2){
$lev1 = '/'.$key.'/';
$zip->addEmptyDir($lev1);
foreach ($level2 as $key => $level3){
$lev2 = $level1 . $level2.'/';
$zip->addEmptyDir(lev2);
foreach ($level3 as $key => $file){
$lev3 = $lev2 …Run Code Online (Sandbox Code Playgroud) 我用来ZipArchive从 ZIP 中提取文件。
这是我正在使用的代码
$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
$zip->extractTo('test/');
$zip->close();
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但提取文件的最后修改日期更改为当前时间。
如何保留提取文件的原始最后修改日期?
我正在尝试使用 PHP ZipArchive类解压缩文件,但是当我尝试时:
$file = '/path/to/zip/file.zip';
$zip = new ZipArchive();
$res = $zip->open($file, ZipArchive::CHECKCONS);
Run Code Online (Sandbox Code Playgroud)
结果是ZipArchive::ER_INCONS(Zip存档不一致)
现在,我已经能够在桌面 (Windows 7) 上打开 zip 文件,并在运行 PHP 应用程序的同一机器 (Ubuntu 12.04) 上使用bash命令行工具。unzip我什至可以使用 PHP 解压缩文件exec('unzip', $file);。
我已经检查了缓存文件夹和 zip 文件的权限,并且网络服务器具有读取和写入权限。我可以使用 PHP 的 ZipArchive 类打开同一目录中的其他 zip 文件。
我不确定它是否相关,但我尝试打开的 zip 文件包含两个 zip 文件。
关于为什么会发生这种情况有什么想法吗?
我正在使用 php ZipArchive,但遇到了一个简单的问题。
我需要创建新文件,如果存在同名的文件,我需要覆盖它。
我的问题是,如果我使用此代码
if ($zip->open($packageFileName, ZipArchive::OVERWRITE) === TRUE)
Run Code Online (Sandbox Code Playgroud)
它将覆盖任何具有相同名称的现有文件,但是如果具有这样名称的文件不存在那么什么都不会发生,如果 case 返回 false 并且我用这个 if case 中的文件填充 zip 文件,但是因为如果文件不在上面的磁盘失败并且没有创建文件。
如果我这样做
if ($zip->open($packageFileName, ZipArchive::CREATE) === TRUE)
Run Code Online (Sandbox Code Playgroud)
它将返回 true 并且文件将被创建或更新,但我不想更新文件,我需要覆盖文件。
所以我有点卡住了,我想覆盖文件,如果它不存在,我想创建它,有没有办法在一行中执行此操作,因此我不必在检查文件是否存在的多行中进行检查,并且然后选择 CREATE 或 OVERWRITE,为什么没有 CREATE_OVERWRITE 常量?
这是我想要实现的功能
我正在使用 System.IO.Compression ZipArchive来实现此目的。从文档中,我还没有找到一个好的用例。文档中的示例假定 zip 文件存在。
我想要做什么创建 zipArchive 流写入 JSON 文件和 pdf 文件作为 zip 文件中的条目。
using (var stream = new FileStream(path, FileMode.Create))
{
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
ZipArchiveEntry manifest = archive.CreateEntry(filenameManifest);
using (StreamWriter writerManifest = new StreamWriter(manifest.Open()))
{
writerManifest.WriteLine(JSONObject_String);
}
ZipArchiveEntry pdfFile = archive.CreateEntry(filenameManifest);
using (StreamWriter writerPDF = new StreamWriter(pdfFile.Open()))
{
writerPDF.WriteLine(pdf);
}
}
}
Run Code Online (Sandbox Code Playgroud) ziparchive ×10
php ×7
zip ×3
c# ×2
.net ×1
arrays ×1
bash ×1
directory ×1
edit ×1
iphone ×1
ubuntu ×1
unit-testing ×1
xcode ×1
xmldocument ×1