2016-08-29 18 views
0

は、私は次のコードは、今かなりの時間のために実行している動作を停止:PHP ZIPARCHIVE ADDFILEが

$thisdir = "$_SERVER[DOCUMENT_ROOT]/webroot/uploads/user_uploaded_files/"; 

    if(!empty($files)){ 

    $destination = 'uploads/zip_files/meeting_' . $meetingId .'.zip'; 

    $zip = new ZipArchive(); 

    $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 

    //Add all the uploaded files ($file = filename.ext) 

     foreach($files as $file){ 

      if(file_exists($thisdir . $file)){ 

       $zip->addFile('/uploads/user_uploaded_files/' . $file, $file); 

     } 
} 

しかし、それだけで、最近動作を停止していた(以前のわからないが、現在のバージョンは7.0.9です) 。

foreachループは以前通り実行されます。file_existsは常にtrueを返しますが、ファイルはアーカイブに追加されません。

誰もそれを経験しましたか?どんな助けや指導も大歓迎です。

+0

ファイルのアクセス権を確認しましたか? –

答えて

1

$ zip->オープンが働いていた場合は、おそらくテストする必要があります:

$res = $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 
if ($res) { 
    foreach ($files as $file) { 
     if (file_exists($thisdir . $file)) { 
      $zip->addFile('/uploads/user_uploaded_files/' . $file, $file); 
     } 
    } 
} 

あなたのスクリプトの先頭に

error_reporting(E_ALL); 
ini_set('display_errors', true); 

を追加し、異常がないか見ることができました。

0

この問題の解決策を見つけただけで、将来誰かを助けることができることを願っています。

$filesは、文字列の配列であり、次のようにループしています。foreach($files as $file)私は常に1つの文字列を取得していました。

少なくとも私はそうだと思ったが、addFile()は明らかに文字列としてそれを読んでいなかった。

addFile()より前のすべてのアイテムを単純にキャストするだけで問題は解決しました。ソリューションは次のようになります。

foreach($files as $file){ 

    if(file_exists($thisdir . $file)){ 

     $file = (string)$file; 

     $zip->addFile('uploads/user_files/' . $file, $file); 

    } 

} 
+0

好奇心のために、var_dump($ files)の出力を投稿できますか? ? – vincenth

関連する問題