标签: ziparchive

单元测试中的"架构i386的未定义符号"

我只有在尝试构建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

iphone xcode unit-testing undefined-symbol ziparchive

5
推荐指数
1
解决办法
5938
查看次数

PHP:使用ZipArchive创建zip文件时出错(500)

我正在使用phps ZipArchive类来创建目录的zip文件.代码适用于几乎所有目录,除了两个,这恰好是最大的目录(最大的目录目前包含51个文件,总共175MB).当我运行这些目录的代码时,将创建一个临时文件('filename.zip.[RandomLettersAndNumbers]',例如'filename.zip.riaab4'),大小为67,108,864字节,脚本会抛出内部服务器错误(500).

到目前为止我尝试过的(大部分内容仍然在源代码中可见):

  • 增加 memory_limit
  • 增加 max_execution_time
  • 检查php错误日志:错误日志为空
  • 尝试找到发生错误的确切行:代码执行到最多 $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)

php ziparchive

5
推荐指数
1
解决办法
1841
查看次数

在内存.NET中编辑ZipArchive

我正在尝试编辑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)

c# xmldocument edit ziparchive

5
推荐指数
1
解决办法
1456
查看次数

无法使用PHP 7.2安装PHP zip存档

我在安装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)

任何帮助,将不胜感激,谢谢

php ubuntu ziparchive

5
推荐指数
1
解决办法
5842
查看次数

ZipArchives存储绝对路径

我可以使用相对路径压缩文件吗?

例如:

$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文件)

php directory zip ziparchive

4
推荐指数
1
解决办法
4188
查看次数

ZipArchive PHP:Close()返回false,没有错误消息

我正在尝试使用基于数组结构的目录树创建一个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)

php arrays zip ziparchive

4
推荐指数
1
解决办法
5075
查看次数

使用 PHP ZipArchive 保留从 ZIP 中提取的文件的修改日期

我用来ZipArchive从 ZIP 中提取文件。

这是我正在使用的代码

$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
    $zip->extractTo('test/');
    $zip->close();
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但提取文件的最后修改日期更改为当前时间。

如何保留提取文件的原始最后修改日期?

php zip ziparchive

4
推荐指数
1
解决办法
2392
查看次数

Ziparchive 无法仅在 PHP 中打开 zip 文件

我正在尝试使用 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 bash ziparchive

4
推荐指数
1
解决办法
2498
查看次数

ZipArchive,我需要创建新文件并覆盖现有文件

我正在使用 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 常量?

php ziparchive

4
推荐指数
1
解决办法
3858
查看次数

C# 使用 zip 存档 System.IO. Compression 创建 zip 文件

这是我想要实现的功能

  • 编写 JSON 文件。
  • 编写 PDF 文件。
  • 为这两个文件创建一个存档

我正在使用 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)

.net c# ziparchive

4
推荐指数
1
解决办法
1万
查看次数