Mailinglisten-Archive |
Hallo zusammen,
zuerstmal, das ist mein erstes Post auf eine Mailinglist. Hoffentlich
könnt ihr mir das nachsehen.
Mein Problem ist, dass ich eine Upload Klasse geschrieben habe, die aber
in einem bestimmten Fall nicht wie gewünscht funzt. Nach dem Upload des
File verschiebe ich dieses mit move_uploaded_file() in ein anderes
Verzeichnis. Von dort liest eine andere Funktion das File ein und jagt
den String durch gzencode(). Dann werden die entsprechenden header für
einen Download ausgegeben und der gezippte String wird mittels echo
ausgegeben.
Das ganze funkioniert auch gut nur bei bmp Files geht das ganze ziemlich
schief:
Im Namen des Files im Archiv taucht am Ende immer eine Zahl auf. Diese
wird aber nicht an die Funktion übergeben. Es scheint mir als sei die
Zahl ein Zähler wieoft die Datei mit diesem Namen bereits hochgeladen
wurde. Beim ersten Hochladen der Datei test.bmp ist der Name des Archivs
korrekt test.bmp.gz und der Name im Archiv korrekt test.bmp.
Wenn ich jetzt aber die Datei zum zweiten Mal hochlade dann ist der Name
im Archiv test.bmp-1 Bei jedem weiteren Versuch wird diese Zahl
hochgezählt. Wenn der Computer längere Zeit im StandBy oder
ausgeschaltet war, dann funzt es wieder einmal korrekt.
Ich habe mir folgenden kurzen Testcode geschrieben, der dieses Problem
bei mir reproduzierbar ab dem 2. Upload desselben Files zu Tage bringt.
Das ganze ist nur der Testcode drum habe ich keine Datenvalidierung drinn.
<?php
error_reporting(E_ALL);
if(isset($_FILES['datei']) && isset($_POST)){
class upload{
public function createFile($name){
move_uploaded_file($_FILES['datei']['tmp_name'],$_SERVER['DOCUMENT_ROOT'].'/upload/'.$name);
$this->createGZ($name);
}
public function createGZ($name){
$temp =
implode('',file($_SERVER['DOCUMENT_ROOT'].'/upload/'.$name));
$temp = gzencode($temp,9);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment;
filename="'.$name.'.gz"');
header('Content-Length: '.strlen($temp));
echo $temp;
exit;
}
}
$temp = new upload();
$temp->createFile($_FILES['datei']['name']);
$temp->createGZ($_FILES['datei']['name']);
}else{
?>
<html>
<head>
<title>TestClass</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"
enctype="multipart/form-data">
<input name="datei" type="file" /><br />
<input type="submit" />
</form>
</body>
</html>
<?php
}
?>
Ich komme hier auch nicht mehr weiter, weil der gleiche Code für andere
Dateiendungen korrekt geht. Ich habe es auch schon in Foren versucht,
aber dort wusste niemand was und mir wurde empfohlen mich an die
PHPMailingliste zu wenden.
Vielen Dank für Eure Hilfe
php::bar PHP Wiki - Listenarchive