【发布时间】:2015-09-21 15:13:38
【问题描述】:
我在这里拉头发。上周我一直在试图弄清楚为什么 ZipArchive extractTo 方法在 linux 上的行为与我们的测试服务器 (WAMP) 上的行为不同。
以下是该问题的最基本示例。我只需要提取一个具有以下结构的 zip:
my-zip-file.zip
-username01
--filename01.txt
-images.zip
--image01.png
-songs.zip
--song01.wav
-username02
--filename01.txt
-images.zip
--image01.png
-songs.zip
--song01.wav
以下代码将提取根 zip 文件并将结构保留在我的 WAMP 服务器上。我还不需要担心提取子文件夹。
<?php
if(isset($_FILES["zip_file"]["name"])) {
$filename = $_FILES["zip_file"]["name"];
$source = $_FILES["zip_file"]["tmp_name"];
$errors = array();
$name = explode(".", $filename);
$continue = strtolower($name[1]) == 'zip' ? true : false;
if(!$continue) {
$errors[] = "The file you are trying to upload is not a .zip file. Please try again.";
}
$zip = new ZipArchive();
if($zip->open($source) === FALSE)
{
$errors[]= "Failed to open zip file.";
}
if(empty($errors))
{
$zip->extractTo("./uploads");
$zip->close();
$errors[] = "Zip file successfully extracted! <br />";
}
}
?>
上面 WAMP 上脚本的输出正确提取了它(保持文件结构)。
当我在我们的实时服务器上运行它时,输出如下所示:
--username01\filename01.txt
--username01\images.zip
--username01\songs.zip
--username02\filename01.txt
--username02\images.zip
--username02\songs.zip
我无法弄清楚为什么它在实时服务器上的行为不同。任何帮助将不胜感激!
【问题讨论】:
-
嘿@Zachary。我不清楚到底是什么问题。您想在两个系统中递归提取 zip 吗?
-
感谢您的回复!问题是linux在我提取zip文件时破坏了文件结构.....我相信它与反斜杠有关,但我不知道如何让它使用正斜杠来保留目录结构
-
我想我遇到了问题:斜杠成为 Linux 文件名的一部分。是吗?
-
正确...需要有一个名为 username01 的文件夹,然后在该文件夹内应该有 filename01.txt 和 images.zip 和 song.zip....脚本在 windows WAMP 上完美运行。
-
好的。我添加了一个可能的解决方案作为回答。