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...
|