我想解压缩一个文件,这工作得很好

system('unzip File.zip');

但我需要通过URL传递文件名,不能让它工作,这就是我所拥有的。

$master = $_GET["master"];
system('unzip $master.zip'); 

我错过了什么?我知道一定是我忽视的小而愚蠢的事情。

谢谢你!


当前回答

我只能假设你的代码来自网上的某个教程?在这种情况下,你靠自己解决问题做得很好。另一方面,这段代码实际上可以作为解压缩文件的正确方式在某个地方在线发布,这一事实有点令人恐惧。

PHP具有处理压缩文件的内置扩展。不需要为此使用系统调用。ZipArchivedocs是一种选择。

$zip = new ZipArchive;
$res = $zip->open('file.zip');
if ($res === TRUE) {
  $zip->extractTo('/myzips/extract_path/');
  $zip->close();
  echo 'woot!';
} else {
  echo 'doh!';
}

另外,正如其他人所评论的那样,$HTTP_GET_VARS自4.1版本以来已被弃用…那是很久以前的事了。不要用它。请使用$_GET超全局变量。

最后,要非常小心地接受通过$_GET变量传递给脚本的任何输入。

总是清理用户输入。


更新

根据您的评论,将zip文件解压缩到其所在的同一目录的最佳方法是确定文件的硬路径,并将其专门解压缩到该位置。所以,你可以这样做:

// assuming file.zip is in the same directory as the executing script.
$file = 'file.zip';

// get the absolute path to $file
$path = pathinfo(realpath($file), PATHINFO_DIRNAME);

$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
  // extract it to the path we determined above
  $zip->extractTo($path);
  $zip->close();
  echo "WOOT! $file extracted to $path";
} else {
  echo "Doh! I couldn't open $file";
}

其他回答

可以使用预包装函数

function unzip_file($file, $destination){
    // create object
    $zip = new ZipArchive() ;
    // open archive
    if ($zip->open($file) !== TRUE) {
        return false;
    }
    // extract contents to destination directory
    $zip->extractTo($destination);
    // close archive
    $zip->close();
        return true;
}

如何使用它。

if(unzip_file($file["name"],'uploads/')){
echo 'zip archive extracted successfully';
}else{
  echo 'zip archive extraction failed';
}

只改变

system('unzip $master.zip');

到这个

system('unzip ' . $master . '.zip');

或者这个

系统(“{$大师}. zip解压缩”);

PHP有自己的内置类,可用于解压缩或从zip文件中提取内容。这个类是ZipArchive。 下面是提取zip文件并将其放入特定目录的简单和基本的PHP代码:

<?php
$zip_obj = new ZipArchive;
$zip_obj->open('dummy.zip');
$zip_obj->extractTo('directory_name/sub_dir');
?>

如果你想要一些高级功能,那么下面是改进的代码,它将检查zip文件是否存在:

<?php
$zip_obj = new ZipArchive;
if ($zip_obj->open('dummy.zip') === TRUE) {
   $zip_obj->extractTo('directory/sub_dir');
   echo "Zip exists and successfully extracted";
}
else {
   echo "This zip file does not exists";
}
?>

来源:如何解压缩或提取zip文件在PHP?

请不要这样做(将GET var作为系统调用的一部分)。用ZipArchive代替。

所以,你的代码应该是这样的:

$zipArchive = new ZipArchive();
$result = $zipArchive->open($_GET["master"]);
if ($result === TRUE) {
    $zipArchive ->extractTo("my_dir");
    $zipArchive ->close();
    // Do something else on success
} else {
    // Do something on error
}

为了回答你的问题,你的错误是“something $var something else”应该是“something $var something else”(双引号)。

我只能假设你的代码来自网上的某个教程?在这种情况下,你靠自己解决问题做得很好。另一方面,这段代码实际上可以作为解压缩文件的正确方式在某个地方在线发布,这一事实有点令人恐惧。

PHP具有处理压缩文件的内置扩展。不需要为此使用系统调用。ZipArchivedocs是一种选择。

$zip = new ZipArchive;
$res = $zip->open('file.zip');
if ($res === TRUE) {
  $zip->extractTo('/myzips/extract_path/');
  $zip->close();
  echo 'woot!';
} else {
  echo 'doh!';
}

另外,正如其他人所评论的那样,$HTTP_GET_VARS自4.1版本以来已被弃用…那是很久以前的事了。不要用它。请使用$_GET超全局变量。

最后,要非常小心地接受通过$_GET变量传递给脚本的任何输入。

总是清理用户输入。


更新

根据您的评论,将zip文件解压缩到其所在的同一目录的最佳方法是确定文件的硬路径,并将其专门解压缩到该位置。所以,你可以这样做:

// assuming file.zip is in the same directory as the executing script.
$file = 'file.zip';

// get the absolute path to $file
$path = pathinfo(realpath($file), PATHINFO_DIRNAME);

$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
  // extract it to the path we determined above
  $zip->extractTo($path);
  $zip->close();
  echo "WOOT! $file extracted to $path";
} else {
  echo "Doh! I couldn't open $file";
}