2017-06-02 1 views
0

Ich möchte eine Datei zip in ein Verzeichnis, das zuvor durch Code mit PHP erstellt wurde, aber es funktioniert nicht. Ich denke, dass es ein Problem der Erlaubnis ist, weil, wenn ich diesen Ordner manuell erstelle, es funktioniert, instad, wenn ich es von meinem Skript erstelle, funktioniert es nicht! DieseWie kann ich eine Datei zip in ein zuvor erstelltes Verzeichnis mit Code (PHP) extrahieren?

.... 
$filename = $_FILES["userfile"]["name"]; 
$source = $_FILES["userfile"]["tmp_name"]; 
$name = explode(".", $filename); 
$target_path = "Apps\\" . $username . "\\" . $name[0]; 

if(move_uploaded_file($source, $target_path)) 
{  
    $zip = new ZipArchive(); 
    $x = $zip->open($target_path); 
    if ($x === true) 
    { 
     $zip->extractTo("Apps\\".$username); <- ERROR ON THIS LINE 
     $zip->close(); 
    } 
.... 

ist der Fehler: (Achtung: ZipArchive :: extractTo(): Keine solche Datei oder das Verzeichnis)

Wie kann ich es beheben?

Danke!

+0

Überprüfen Sie Ihren Dateipfad, wo Sie extrahieren möchten –

+0

http://php.net/manual/en/ziparchive.extractto.php –

+1

Meine Vermutung ist, dass die ziparchive einen vollständigen Pfad benötigt. Wenn das Öffnen funktioniert, sollte der Pfad existieren. Sie verwenden jedoch einen relativen Pfad. Versuchen Sie etwas wie "__DIR __." Apps \\ ". $ Username' –

Antwort

0

helfen werde ich es tun habe lösen:

$filename = $_FILES["userfile"]["name"]; 
$source = $_FILES["userfile"]["tmp_name"]; 

$name = explode(".", $filename); 
$target_path = "Apps/" . $username . "/" . $name[0]. "." .$name[1];  

if(move_uploaded_file($source, $target_path)) 
{  
    $zip = new ZipArchive(); 
    $x = $zip->open($target_path); 
    if ($x === true) 
    { 
     $zip->extractTo("Apps/" . $username . "/"); 
     $zip->close(); 
    } 
} 

es ein Problem von $ target_path war, weil es die Erweiterung ($ name müssen [1 ])

Danke an alle!

0

Dies ist Ihr Pfadproblem, also aktualisieren Sie Ihren Pfad, dann wird es perfekt funktionieren und das ist Demo-Code, der Ihnen hilft, zip-Datei hochzuladen und diese Zip in derselben Datei mit Zip-Ordner auch zu extrahieren.

<?php 
function rmdir_recursive($dir) { 
    foreach(scandir($dir) as $file) { 
     if ('.' === $file || '..' === $file) continue; 
     if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file"); 
     else unlink("$dir/$file"); 
    } 

    rmdir($dir); 
} 

if(!empty($_FILES["file_name"]["name"])) { 
    $filename = $_FILES["file_name"]["name"]; 
    $source = $_FILES["file_name"]["tmp_name"]; 
    $type = $_FILES["file_name"]["type"]; 

    $name = explode(".", $filename); 
    $accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed'); 
    foreach($accepted_types as $mime_type) { 
     if($mime_type == $type) { 
      $okay = true; 
      break; 
     } 
    } 

    $continue = strtolower($name[1]) == 'zip' ? true : false; 
    if(!$continue) { 
     $message = "The file you are trying to upload is not a .zip file. Please try again."; 
    } 

    $path = dirname(__FILE__).'/'; 
    $filenoext = basename ($filename, '.zip'); 
    $filenoext = basename ($filenoext, '.ZIP'); 

    $targetdir = $path . $filenoext; 
    $targetzip = $path . $filename; 
    if (is_dir($targetdir)) rmdir_recursive ($targetdir); 

    mkdir($targetdir, 0777); 

    if(move_uploaded_file($source, $targetzip)) { 
     $zip = new ZipArchive(); 
     $x = $zip->open($targetzip); 
     if ($x === true) { 
      $zip->extractTo($targetdir.'/'); 
      $zip->close(); 

      unlink($targetzip); 
     } 
     $message = "Your file is uploaded and unpacked."; 
    } else { 
     $message = "There is a problem to upload."; 
    } 
} 

?> 

<?php if(isset($message)) echo "<p>$message</p>"; ?> 
<form enctype="multipart/form-data" method="post" action=""> 
    <label>Upload a zip file to upload: <input type="file" name="file_name" /></label> 
    <br /> 
    <input type="submit" name="submit" value="Upload" /> 
</form> 

hoffen, dass es Ihnen und anderen

+0

Warum haben Sie $ target_path zwischen '' gesetzt? das return false und so geht es nie in den if positiven zustand .. wenn ich '' um $ target_path lösche gibt es wahr zurück aber wenn es $ zip-> extractTo ('Apps /'.$ username); Der übliche Fehler erscheint. –

+0

Zielpfad ist Ihr Dateipfadname, im Beispiel unten überprüfen Sie es –

+0

ok, es funktioniert! aber es kopiert nur das Zip-Archiv ohne Erweiterung in den Zielordner, ohne es zu extrahieren. –

Verwandte Themen