2012-01-04 9 views
0

私は自分のPHP CMSを手作りした各アカウントに、同じホスティングプランで5つのアカウントをホストしています。PHP 5.3 ZipArchiveの問題

アップロードするCMS.zipUnZip.phpファイルの場合、サーバーがPHP 5.2で動作するように設定されている限り、システム全体は正常に動作します。

最近私は、PHP 5.3として設定された最新のアカウントで問題が発生しました。CMSコードは同じですが、動作しません。サポートとの長い疲労した会話の後、 5.3ではなくPHP 5.2で動作します。

標準のPHP ZipArchiveクラスを使用して抽出を処理します。そのため、私はこの奇妙なことを発見しました。いずれにせよ、PHP 5.3で解凍するのに適切なハンドルを検索しました。

誰かがこのコードに添付されているこのコードをどのように記述する必要がありますか教えてください。 P.s サポートでは、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>'; 
    } 
+0

戻ってくる正確なPHPエラーは何ですか?不明な場合は、エラー報告をオンまたはオフにします。 – Treffynnon

+0

エラーレポートは出力されません。エラーレポートはアクティブです。彼らはこれが5.3エラーだと言う。 – RmH

+0

コードは5.3で動作しています。 zipが間違っているか、ディレクトリ権限がなく、エラー報告が有効になっていません。いずれにせよ、ローカライズすぎると、私たちはアクセスなしでしか推測できません。 – mario

答えて

0

ここジップで動作するように私のクラスは次のとおりです。

は、ここに私のコードです。

PHP 5.3.8では問題ありません。

<?php 

/** 
* @author   Andrew Zavadsky <[email protected]> 
* @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);が必要です。

+0

こんにちは、 時間を節約するために、クラスのおかげで:$ zip-> unzip($ to、$ options); あなたは$ zip-> unzip($ Dir、$ Zip)を意味します。 ?? – RmH

+0

$ zip =新しいZip(PATH_TO_YOUR_ZIP_ARCHIVE); $ zip-> unzip(WHERE); 2番目の引数は必須ではなく、単なるマスクです。すべてのファイルを抽出する必要がない場合は、抽出するファイルを指定します。同じディレクトリに解凍する必要がある場合は、$ zip-> unzip( '。'); – devdRew

+0

また、777 DIRNAMEをchmodする必要があります。ここで、アーカイブからファイルを割り当てる必要があります – devdRew