簡體   English   中英

PHP ZipArchive沒有添加任何文件(Windows)

[英]PHP ZipArchive is not adding any files (Windows)

我沒有把一個文件放到一個新的zip存檔中。

makeZipTest.php:

<?php

$destination = __DIR__.'/makeZipTest.zip';
$fileToZip = __DIR__.'/hello.txt';

$zip = new ZipArchive();
if (true !== $zip->open($destination, ZIPARCHIVE::OVERWRITE)) {
    die("Problem opening zip $destination");
}
if (!$zip->addFile($fileToZip)) {
    die("Could not add file $fileToZip");
}
echo "numfiles: " . $zip->numFiles . "\n";
echo "status: " . $zip->status . "\n";
$zip->close();

zip已創建,但為空。 然而,沒有觸發任何錯誤。

出了什么問題?

在某些配置中,當將文件添加到zip存檔時,PHP無法正確獲取localname ,並且必須手動提供此信息。 因此,使用addFile()的第二個參數可能會解決此問題。

ZipArchive :: addFile

參數

  • 文檔名稱
    要添加的文件的路徑。
  • 的localName
    如果提供,這是ZIP存檔中將覆蓋文件名的本地名稱。

PHP文檔:ZipArchive :: addFile

$zip->addFile(
    $fileToZip, 
    basename($fileToZip)
);

您可能必須調整代碼以獲得正確的樹結構,因為basename()將從文件名之外的路徑中刪除所有內容。

您需要在創建zip存檔的文件夾中授予服務器權限。 您可以使用write permision創建tmp文件夾chmod 777 -R tmp/

還需要更改目標,其中腳本嘗試查找hello.txt文件$zip->addFile($fileToZip, basename($fileToZip))

<?php

$destination = __DIR__.'/tmp/makeZipTest.zip';
$fileToZip = __DIR__.'/hello.txt';

$zip = new ZipArchive();
if (true !== $zip->open($destination, ZipArchive::OVERWRITE)) {
  die("Problem opening zip $destination");
}
if (!$zip->addFile($fileToZip, basename($fileToZip))) {
  die("Could not add file $fileToZip");
}
echo "numfiles: " . $zip->numFiles . "\n";
echo "status: " . $zip->status . "\n";
$zip->close()

檢查這個類將文件夾中的文件和子目錄添加到zip文件中,並在運行代碼之前檢查文件夾權限,即chmod 777 -R zipdir /

HZip::zipDir('/path/to/sourceDir', '/path/to/out.zip'); 

<?php 
class HZip 
{ 

private static function folderToZip($folder, &$zipFile, $exclusiveLength) { 
$handle = opendir($folder); 
while (false !== $f = readdir($handle)) { 
  if ($f != '.' && $f != '..') { 
    $filePath = "$folder/$f"; 
    // Remove prefix from file path before add to zip. 
    $localPath = substr($filePath, $exclusiveLength); 
    if (is_file($filePath)) { 
      $zipFile->addFile($filePath, $localPath); 
    } elseif (is_dir($filePath)) { 
      // Add sub-directory. 
      $zipFile->addEmptyDir($localPath); 
      self::folderToZip($filePath, $zipFile, $exclusiveLength); 
    } 
  } 
} 
closedir($handle); 
} 


public static function zipDir($sourcePath, $outZipPath) 
{ 
$pathInfo = pathInfo($sourcePath); 
$parentPath = $pathInfo['dirname']; 
$dirName = $pathInfo['basename']; 

$z = new ZipArchive(); 
$z->open($outZipPath, ZIPARCHIVE::CREATE); 
$z->addEmptyDir($dirName); 
self::folderToZip($sourcePath, $z, strlen("$parentPath/")); 
$z->close(); 
} 
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM