0

我做了一个drupal模块,模块的功能之一是将一些文件压缩成一个zip包。它在我的本地环境(xampp)中运行良好,但在服务器上失败。我的服务器确实启用了 php zip 扩展,因为我可以在 php info 上看到 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'));
}
4

2 回答 2

1

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

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

你可以试试这个

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";
}
于 2012-10-18T02:57:40.547 回答
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 包。

谢谢

于 2012-10-18T05:55:48.830 回答