【问题标题】:PHP 5.3 ZipArchive issuePHP 5.3 ZipArchive 问题
【发布时间】:2012-01-04 12:46:06
【问题描述】:

我有 5 个帐户托管在同一个托管计划中,每个帐户我加载我的 PHP CMS,手工制作。

我上传了一个CMS.zip 和一个UnZip.php 文件,只要服务器配置为使用PHP 5.2,整个系统就可以正常工作。

最近我遇到了一个问题,我的最新帐户配置为 PHP 5.3,CMS 代码是相同的,但是不起作用,经过与支持人员的长时间而疲惫的对话,他们解决了我的代码设置为仅提取PHP 5.2 不是 5.3。

我使用标准的 PHP ZipArchive 类来处理提取,这就是为什么我觉得这很奇怪,无论如何我搜索了一个合适的句柄来用 PHP 5.3 解压缩但没有运气。

谁能告诉我这个问题所附的代码应该怎么写? 附言 支持人员提到 ZipArchive 类实际上在服务器上处于活动状态。

这是我的代码:

   $DIR_NAME = getcwd();

    $zip = new ZipArchive;
    if ($zip->open('ZipTest.zip') === TRUE) {
        $zip->extractTo($DIR_NAME);
        $zip->close();

        if(file_exists('editor.php')){
            echo '<u style="color:Green;">File Found ::   Extraction Complete !!</u><br>';
            echo $DIR_NAME.' : 
        <b style="color:orange;">ZipTest.zip Activated Seccessfully!</b> <a href="dir_inventory.php">Load CMS</a><br>';
        }
        else {
            echo '<u style="color:red;"><b> ERORR </b>::   Extraction Failure !!</u><br>';

        }
    } 
    else {
        echo '<b style="color:red;">Cant Exctract ZipTest.zip file to location!</b>';
    }

【问题讨论】:

  • 您返回的确切 PHP 错误是什么?如果您不确定,请打开并打开错误报告。
  • 未打印错误报告,错误报告处于活动状态。他们说这是 5.3 错误。
  • 代码正在使用 5.3。 zip 错误,或者缺少目录权限并且not 启用了错误报告。无论哪种方式都过于本地化,我们只能猜测而无法访问。
  • 嘿,首先,非常感谢您的快速响应,至于错误报告只是快速运行了一个,您是对的,它是在文件顶部设置错误,我忘记了包括在这个例子中。我的错误是:无法打开流:权限被拒绝
  • @RmH 所以我们是对的,正如 mario 所说,您需要向网络用户开放权限,以便它可以写入您指定的目录。

标签: php


【解决方案1】:

这是我使用 Zip 的课程。

我在 PHP 5.3.8 上没有问题。

<?php

/**
 *  @author         Andrew Zavadsky <zaffaccky@gmail.com>
 *  @class          Zip
 *  @description    Class for manipulation ZIP (creating, unzipping)
 */

class Zip
{
    private $zip            = null;

    public function __construct($src)
    {
        $this->zip  = new ZipArchive();

        if (!file_exists($src))
            $r = $this->zip->open($src, ZipArchive::CREATE);
        else
            $r = $this->zip->open($src);
    }

    public function addFromString($as, $text)
    {
        $this->zip->addFromString($as, $text);

        return $this;
    }

    public function addFile($as, $src = null)
    {
        if ($src && file_exists($src))
            $this->zip->addFile($src, $as);
        else
            $this->zip->addFromString($as, '');

        return $this;
    }

    public function unzip($to, array $files = array())
    {
        if (!file_exists($to))
            mkdir($to);

        if (!is_writable($to) || !is_dir($to))
            throw new Exception(sprintf('Target directory %s is not directory or not for writing', $to));

        if (count($files))
            $this->zip->extractTo($to, $files);
        else
            $this->zip->extractTo($to);

        $this->zip->close();

        return $this;
    }

    public function addFolder($as, $src = null)
    {
        $as = trim($as, '\\/');

        $this->zip->addEmptyDir($as);

        if ($src && file_exists($src) && is_dir($src))
            $this->addFiles($src, $as);

        return $this;
    }

    private function addFiles($from, $to = '', $recursive = true)
    {
        $from   = rtrim($from, '\\/');
        $to     = trim($to, '\\/');

        if (!is_dir($from))
            throw new Exception(sprintf('Can\'t add files from folder %s', $from));
        else
            $this->zip->addEmptyDir($to);


        foreach (scandir($from) as $i => $f)
        {
            if ($i <= 1)
                continue;

            if (is_dir($file = $from . DIRECTORY_SEPARATOR . $f) && $recursive)
                $this->addFiles($file, $to . DIRECTORY_SEPARATOR . $f, $recursive);
            else
                $this->addFile($to ? $to . DIRECTORY_SEPARATOR . $f : $f, $file);
        }

        return $this;
    }
}

试试看,你需要$zip->unzip($to, $options);

【讨论】:

  • 您好,感谢您的课程,以节省时间,作者:$zip->unzip($to, $options);你的意思是: $zip->unzip($Dir, $Zip); ??
  • $zip = new Zip(PATH_TO_YOUR_ZIP_ARCHIVE); $zip->解压缩(在哪里);第二个参数不是必需的,它只是一个掩码,如果您不想提取所有文件,那么您可以指定要提取的文件。如果你需要解压到同一个目录,那么 $zip->unzip('.');
  • 另外,你需要 chmod 777 DIRNAME,你想从档案中分配文件
猜你喜欢
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2016-11-06
  • 2011-10-24
  • 2011-08-18
  • 1970-01-01
相关资源
最近更新 更多