我想解压缩文件,这很好用
system('unzip File.zip');
但是我需要通过URL传递文件名,而无法使其正常工作,这就是我所拥有的。
$master = $_GET["master"];
system('unzip $master.zip');
我想念什么?我知道这一定是我忽略的小而愚蠢的事情。
谢谢,
system("unzip $master.zip");
应该可以。
我想解压缩文件,这很好用
system('unzip File.zip');
但是我需要通过URL传递文件名,而无法使其正常工作,这就是我所拥有的。
$master = $_GET["master"];
system('unzip $master.zip');
我想念什么?我知道这一定是我忽略的小而愚蠢的事情。
谢谢,
system("unzip $master.zip");
应该可以。
Answers:
我只能假设您的代码来自在线某个地方的教程?在这种情况下,请尝试自己解决这个问题。另一方面,该代码实际上可以在线发布为解压缩文件的正确方法,这有点令人恐惧。
PHP具有用于处理压缩文件的内置扩展。不需要为此使用system
调用。ZipArchive
docs是一种选择。
$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
superglobal。
最后,在接受通过$_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";
}
$zip->extractTo('./');
,则可能不是这种情况。更好的选择是确定zip文件在文件系统中的位置并将其解压缩到其中。我将更新答案以进行演示。
Fatal error: Class 'ZipArchive' not found
我尝试使用此脚本的错误:-(那时候有什么选择吗?
请不要那样做(将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
}
要回答您的问题,您的错误是“其他东西$ var”应该是“其他东西$ var”(双引号)。
只需尝试将此yourDestinationDir作为目标即可提取或删除-d yourDestinationDir以便提取至根目录。
$master = 'someDir/zipFileName';
$data = system('unzip -d yourDestinationDir '.$master.'.zip');
yourDestinationDir
是session_save_path() . DIRECTORY_SEPARATOR . "$name" . DIRECTORY_SEPARATOR
哪里$name
是目标文件夹中的文件夹会解压。
我将@rdlowrey的答案更新为更简洁的代码,这将使用将该文件解压缩到当前目录__DIR__
。
<?php
// config
// -------------------------------
// only file name + .zip
$zip_filename = "YOURFILENAME.zip";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' >
<title>Unzip</title>
<style>
body{
font-family: arial, sans-serif;
word-wrap: break-word;
}
.wrapper{
padding:20px;
line-height: 1.5;
font-size: 1rem;
}
span{
font-family: 'Consolas', 'courier new', monospace;
background: #eee;
padding:2px;
}
</style>
</head>
<body>
<div class="wrapper">
<?php
echo "Unzipping <span>" .__DIR__. "/" .$zip_filename. "</span> to <span>" .__DIR__. "</span><br>";
echo "current dir: <span>" . __DIR__ . "</span><br>";
$zip = new ZipArchive;
$res = $zip->open(__DIR__ . '/' .$zip_filename);
if ($res === TRUE) {
$zip->extractTo(__DIR__);
$zip->close();
echo '<p style="color:#00C324;">Extract was successful! Enjoy ;)</p><br>';
} else {
echo '<p style="color:red;">Zip file not found!</p><br>';
}
?>
End Script.
</div>
</body>
</html>
PHP具有自己的内置类,可用于解压缩或从zip文件中提取内容。该类是ZipArchive。以下是简单而基本的PHP代码,它将提取一个zip文件并将其放置在特定目录中:
<?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";
}
?>
资料来源:如何在PHP中解压缩或解压缩zip文件?
我将Morteza Ziaeemehr的答案更新为更干净,更好的代码,这将使用DIR将表单内提供的文件解压缩到当前目录中。
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' >
<title>Unzip</title>
<style>
body{
font-family: arial, sans-serif;
word-wrap: break-word;
}
.wrapper{
padding:20px;
line-height: 1.5;
font-size: 1rem;
}
span{
font-family: 'Consolas', 'courier new', monospace;
background: #eee;
padding:2px;
}
</style>
</head>
<body>
<div class="wrapper">
<?php
if(isset($_GET['page']))
{
$type = $_GET['page'];
global $con;
switch($type)
{
case 'unzip':
{
$zip_filename =$_POST['filename'];
echo "Unzipping <span>" .__DIR__. "/" .$zip_filename. "</span> to <span>" .__DIR__. "</span><br>";
echo "current dir: <span>" . __DIR__ . "</span><br>";
$zip = new ZipArchive;
$res = $zip->open(__DIR__ . '/' .$zip_filename);
if ($res === TRUE)
{
$zip->extractTo(__DIR__);
$zip->close();
echo '<p style="color:#00C324;">Extract was successful! Enjoy ;)</p><br>';
}
else
{
echo '<p style="color:red;">Zip file not found!</p><br>';
}
break;
}
}
}
?>
End Script.
</div>
<form name="unzip" id="unzip" role="form">
<div class="body bg-gray">
<div class="form-group">
<input type="text" name="filename" class="form-control" placeholder="File Name (with extension)"/>
</div>
</div>
</form>
<script type="application/javascript">
$("#unzip").submit(function(event) {
event.preventDefault();
var url = "function.php?page=unzip"; // the script where you handle the form input.
$.ajax({
type: "POST",
url: url,
dataType:"json",
data: $("#unzip").serialize(), // serializes the form's elements.
success: function(data)
{
alert(data.msg); // show response from the php script.
document.getElementById("unzip").reset();
}
});
return false; // avoid to execute the actual submit of the form
});
</script>
</body>
</html>
只是改变
system('unzip $master.zip');
到这个
system('unzip ' . $master . '.zip');
或这个
system("unzip {$master}.zip");
您可以使用预包装功能
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';
}
在PHP代码下面使用,文件名位于URL参数“名称”中
<?php
$fileName = $_GET['name'];
if (isset($fileName)) {
$zip = new ZipArchive;
$res = $zip->open($fileName);
if ($res === TRUE) {
$zip->extractTo('./');
$zip->close();
echo 'Extracted file "'.$fileName.'"';
} else {
echo 'Cannot find the file name "'.$fileName.'" (the file name should include extension (.zip, ...))';
}
}
else {
echo 'Please set file name in the "name" param';
}
?>
简单的PHP函数即可解压缩。请确保您的服务器上安装了zip扩展名。
/**
* Unzip
* @param string $zip_file_path Eg - /tmp/my.zip
* @param string $extract_path Eg - /tmp/new_dir_name
* @return boolean
*/
function unzip(string $zip_file_path, string $extract_dir_path) {
$zip = new \ZipArchive;
$res = $zip->open($zip_file_path);
if ($res === TRUE) {
$zip->extractTo($extract_dir_path);
$zip->close();
return TRUE;
} else {
return FALSE;
}
}
只需使用此:
$master = $_GET["master"];
system('unzip' $master.'.zip');
在您的代码$master
中以字符串形式传递时,系统将查找名为$master.zip
$master = $_GET["master"];
system('unzip $master.zip'); `enter code here`
'unzip' $master
除非您在解压缩后添加了空格并在单引号之后添加了句点,否则将无法正常工作。system("unzip $master.zip")
用双引号或至少一个有效的答案提出建议会容易得多。
$_GET
查询字符串中添加任何内容,并将自己的代码注入到system
调用中