PHP zip不起作用

时间:2012-10-18 02:36:07

标签: php drupal

我做了一个drupal模块,该模块的一个功能是将一些文件压缩为zip包。它在我的本地环境(xampp)中工作正常,但在服务器上失败。我的服务器确实启用了php zip扩展,因为我可以在php信息上看到zip信息,我也可以用php解压缩文件。

此外,我已经chmod文件为0777。

我的代码:

$folder = file_directory_path();

$zip = new ZipArchive();

if ($zip->open('b.zip', ZIPARCHIVE::CREATE) === TRUE) {

    foreach ( $files as $file ) {
        drupal_set_message(t($file)); // I can see the the message on this stpe
        $zip->addFile($file);
    }

    $zip->close();
    if (file_exists('b.zip')) {

        copy('b.zip', $folder . '/b.zip');
        unlink('b.zip');
        global $base_url;
        variable_set('zippath', $base_url . $folder . '/b.zip');
        drupal_set_message(t('new zip package has been created'));
    }
} else {
    drupal_set_message(t('new zip package failed'));
}

2 个答案:

答案 0 :(得分:1)

是的..我知道你的意思..这是3种可能性

  • 您有写权限
  • 您没有使用完整路径
  • 您将文件夹包含为文件

你可以试试这个

error_reporting(E_ALL);
ini_set("display_errors", "On");


$fullPath = __DIR__ ; // <-------- Full Path to directory
$fileZip = __DIR__ . "/b.zip";  // <---  Full path to zip

if(!is_writable($fullPath))
{
    trigger_error("You can't Write here");
}

$files = scandir($fullPath); // <--- Just to emulate your files
touch($fileZip); // <----------------- Try Creating the file temopary 


$zip = new ZipArchive();
if ($zip->open($fileZip, ZIPARCHIVE::CREATE) === TRUE) {

    foreach ( $files as $file ) {
        if ($file == "." || $file == "..")
            continue;
        $fileFull = $fullPath . "/$file";
        if (is_file($fileFull)) { // <-------------- Make Sure its a file
            $zip->addFile($fileFull, $file);
        }

        // Play your ball
    }
    $zip->close();
} else {
    echo "Failed";
}

答案 1 :(得分:0)

我建议您使用rar或zip命令来制作zip。我正在使用linux并在我的php系统中进行

$folder = 'your_folder';  // folder contains files to be archived
$zipFileName  = 'Your_file_name'; // zip file name
$command = 'rar a -r ' . $zipFileName . ' ' . $folder . '/';
exec($command);

非常快。但是你需要在你的系统中安装rar包。

由于