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