MyXoops Forum

Forum - myXOOPS German Support

9 - 0 = ?  
Geben Sie das Ergebnis der Berechnung ein
Sie haben max. 10 Versuche.
 
* = Erforderlich

Upload Manager für XOOPS-Installation

Betreff: Upload Manager für XOOPS-Installation
von yrow am 28.07.2009 10:41:21

Ich hoffe das ich hier richtig bin...

Es gibt viele User (vorallem in ländlichen Regionen) die mit DSL 512, 768 bzw. 1000 auskommen müssen. Ein Upload einer XOOPS-Installation mit ein paar Modulen dauert min. eine halbe Stunde... sollte man evtl. noch etwas im Internet nebenbei machen, verlängert sich das Ganze logischer weise...

MEINE IDEE:
Wie kann man die Uploadzeit verkürzen? Meine Idee ist die XOOPS Dateien in einem Zip-Archiv verpacken und uploaden. durch das packen kann man die Uploadgröße mal locker halbieren.
Des weiteren muss bei einer FTP Übertragung für jede Datei ein gewisser zusätzlicher Overhead gerechnet werden, der mit der Anzahl der Datei extrem ansteigen kann und damit beträchtliche Zeit kostet...
hier ein kurzer Ausschnitt was ich mit Overhead meine:
257 "/" is the current directory
PORT 192
,168,0,10,17,93
200 PORT command successful
STOR search
.php

Da alles in einem Archiv verpackt wird, fällt dieser Overhead weg (ist ja nur 1 Datei )


MEIN LÖSUNGSANSATZ:
Ich habe ein bischen rumexperiementiert mit unzip.lib.php und zip.lib.php aus dem PhpMyAdmin. Ich kann Zip-Archive öffnen und lesen, aber beim entpacken und schreiben bekomme ich immer Fehler.

hier mein Prototyp der Upload-Funktion:
<html>
<head>
</head>
<body>
<?php
$uploadZipFile 
dirname($_SERVER["SCRIPT_FILENAME"])."/upload/".$_FILES['thefile']['name'];
$tmp_file $_FILES['thefile']['tmp_name'];
$unzipPath dirname($_SERVER["SCRIPT_FILENAME"])."/unzip/";
$logFile "";

echo 
$tmp_file."   ".$uploadZipFile;

if(
$_POST["submit"]=="Senden")
{
 if(!
move_uploaded_file($tmp_file$uploadZipFile))
  {
   
$logFile .= "FEHLER: ".getErrorMessage($_FILES['userfile']['error'])."<br>";
  }

 
myUnzip($uploadZipFile$unzipPath);
}
?>
 <form enctype="multipart/form-data" action="<?php echo $PHP_SELF?>" method="post">
    <label>file senden:</label><input name="thefile" type="file"> 
    <input type="submit" name="submit" value="Senden">
  </form>
 <?php echo $logFile?>
</body>
</html>

<?php
function getErrorMessage($errorCode)
{
 if(
$errorCode == 0)
 {
   return 
"Es liegt kein Fehler vor, die Datei wurde erfolgreich hochgeladen.";
  }

 if(
$errorCode == 1)
 {
   return 
"Die hochgeladene Datei überschreitet die in der Anweisung upload_max_filesize in php.ini festgelegte Größe.";
 }

 if(
$errorCode == 2)
 {
   return 
"Wert: 2; Die hochgeladene Datei überschreitet die in dem HTML Formular mittels der Anweisung MAX_FILE_SIZE angegebene maximale Dateigröße.";
  }

 if(
$errorCode == 3)
 {
   return 
"Die Datei wurde nur teilweise hochgeladen.";
  }

 if(
$errorCode == 4)
 {
   return 
"Es wurde keine Datei hochgeladen.";
 }
}

function 
myUnzip($file$unzipPath)
{
  require_once(
"zip.lib.php");
  require_once(
"unzip.lib.php");
  global 
$logFile;
  
  
$zip = new SimpleUnzip($file);
  
$entries $zip->ReadFile($file);

 for(
$index 0$index $zip->Count(); $index++)
 {
   if(
$zip->GetError($index) != 0)
   {
     
$logFile .= "<br>Filenummer :$index<br>" .
             
" * Error = $zip->GetError($index)<br>" .
             
" * Errormessage = $zip->GetErrorMsg($index)<br>" .
             
" * Filename = $zip->GetName($index)<br>" .
             
" * Path = $zip->GetPath($index)<br>" .
             
" * Filetime = ".date('Y-m-d H:i:s'$zip->GetTime($index));
   }
   else
    {
     
$logFile .= "<br>".$unzipPath.$zip->GetPath($index)."/".$zip->GetName($index);
    
      
$fileForWriting fopen_save($unzipPath.$zip->GetPath($index)."/".$zip->GetName($index), 'w');
      if(
$fileForWriting != false)
      {
       
fwrite($fileForWriting$zip->GetData($index));
       
fclose($fileForWriting);
      }
   }
 }
}

function 
fopen_save($path$mode$chmod=777)
{
  
$directory dirname($path);
  
$file basename($path);
  global 
$logFile;
  if (!
is_dir($directory))
  {
   if (!
mkdir($directory$chmod))
   {
     
$logfile .= '<font color="red">FEHLER bei anlegen des Verzeichnisses</font>'.$directory;
      return 
FALSE;
   }
 }
 return 
fopen ($path$mode);
}
?>


Im Anhang habe ich noch die beide Dateien aus dem PhpMyAdmin angehängt...

Aktuell aus dem Forum

Forum Thema Antworten Views Letzter Beitrag
Modulentwicklung New Xoops Xcreate Module 0 5322 26.11.2025 15:22
efkan Gehe zum letzten Beitrag
Modulentwicklung XOOPS Custom Field Module 1 1813 24.11.2025 11:21
Goffy Gehe zum letzten Beitrag