2016-05-12 34 views
2

提取PHP文件我用这一段代码解压缩的.zip文件如何防止拉链

$zip = new ZipArchive; 
if ($zip->open('test.zip') === TRUE) { 
    $zip->extractTo('/my/destination/dir/'); 
    $zip->close(); 
    echo 'ok'; 
} else { 
    echo 'failed'; 
} 

比方说:有在.zip一个PHP文件,我不希望一个.php文件被提取。我怎样才能防止呢?

+0

[用PHP打开和创建密码保护的zip文件]可能的副本(http://stackoverflow.com/questions/7712960/opening-and-creating-password-protected-zip-files-with-php ) – Parixit

+1

@Pixixit这是如何复制的? –

+0

@PedroLobito我认为这是关于安全的zip,因为他要求不要提取“php”文件 – Parixit

回答

2

你可以尝试这样的PHP >= 5.5

$zip = new ZipArchive; 
if ($zip->open('test.zip') === TRUE) { 

for ($i = 0; $i < $zip->numFiles; $i++) { 
    if(pathinfo($zip->getNameIndex($i)['extension'] != "php")){ 
     $zip->extractTo('/my/destination/dir/', $zip->getNameIndex($i)); 
    } 
} 
    $zip->close(); 
} 

或者这样的PHP < 5.5

$zip = new ZipArchive; 
if ($zip->open('test.zip') === TRUE) { 

for ($i = 0; $i < $zip->numFiles; $i++) { 
    $path_info = pathinfo($zip->getNameIndex($i)); 
    $ext = $path_info['extension']; 
    if($ext != "php")){ 
     $zip->extractTo('/my/destination/dir/', $zip->getNameIndex($i)); 
    } 
} 
    $zip->close(); 
} 

两者之间的唯一区别是pathinfo功能。两者都会循环zip文件中的所有文件,并且如果文件扩展名不是php,则将其提取到/my/destination/dir/

1
$zip= new ZipArchive; 
if($zip->open('test.zip') === TRUE){ 
for($i = 0; $i < $zip->numFiles; $i++) { 
    $filename = pathinfo($zip->getNameIndex($i)); 
    $fileinfo = $filename['extension']; 
    if($fileinfo!="php"){ 
    $zip->extractTo('extract/',$zip->getNameIndex($i)); 
    } 
    $zip->close(); 
} 
+0

请不要只限制您对代码片段的回答。添加一个解释将使其更具可读性。 –

+0

感谢您的建议 – Ashish

+0

您的答案和我的区别有什么区别?我真的不在乎你是否复制了我的答案,但这不是一个好习惯。 –