Veröffentlicht 17. März 200916 j Moin zusammen, ich bin an einem Projekt dran, welches es erlauben soll einige Dateien in ein ZIP Archiv zu tun und dann runterzuladen. Auf meinem Entwicklungssystem (Debian 5 + Apache 2) funktioniert das auch tadellos. Da aber (leider) gefordert wird, dass das ganze auch unter Windows laufen muss, bin ich jetzt an den Anpassungen dran und am durchdrehen :old Wer auch immer den \ als Verzeichnistrenner unter Windows vorgeschlagen hat gehört geteert und gefedert *grummel* Das beigefügte Script läuft wunderbar durch. Erst im allerletzten Schritt ($ziph->close()) gibt es "False" als Antwort. Sowohl das eigentlich ziph->open() als auch Hinzufügen von Dateien zuvor funktioniert wunderbar. Ich kann auch über $ziph->statbyname() die Infos der zugefügten Dateien auslesen. function editDownloadArchive() { /* $_SESSION['downloadArchiveFilecounter'] == Anzahl Files im Archiv $_SESSION['downloadArchiveFilename'] == Dateiname und Pfad des Archivs $_SESSION['downloadIDs'] == IDs der Calls welche ins Archiv sollewird in markedrecords.php gesetzt */ include("config.inc.php"); $retVal = array(0,0); if(!isset($_SESSION['downloadArchiveFilename'])) { $_SESSION['downloadArchiveFilename'] = $frontendsavepath .session_id() ."_" .$_SESSION['username'] . "_" .date("d.m.Y_H:i:s",time()) .".zip"; //Workaround für Windows $os = strstr($_SERVER['SERVER_SOFTWARE'],'Microsoft'); if($os != false) { $_SESSION['downloadArchiveFilename'] = str_replace("/","\\",$_SESSION['downloadArchiveFilename']); } } $ziph = new ZipArchive(); if($ziph->open($_SESSION['downloadArchiveFilename'], ZIPARCHIVE::OVERWRITE) !== TRUE) { $errMsg = "Unable to Open" . $_SESSION['downloadArchiveFilename']; $retVal[0] = 1; } $_SESSION['downloadArchiveFilecounter'] = 0; foreach($_SESSION['downloadIDs'] as $callID) { $cdr = getCDR($db_servertype,$db_host,$db_user,$db_password,$db_name,$callID,$orgsavepath,$frontendsavepath); $savepathdate = date("Y-m-d", strtotime($cdr['Creation_Time'])) ."/"; $filelaenge = strlen($cdr['Path']); $pfadlaenge = strlen($orgsavepath)+strlen($savepathdate); $filename = substr($cdr['Path'],$pfadlaenge,$filelaenge); $file = $frontendsavepath .$savepathdate .$filename; $zfile = $cdr['Agent_ID'] ."_" .date("d.m.Y_H.i.s",strtotime($cdr['Creation_Time'])) ." bis " .date("d.m.Y_H.i.s",strtotime($cdr['Complete_Time'])) ."_ANI ".$cdr['ANI'] ."_DNIS " .$cdr['DNIS'] .".wav"; if(!file_exists($file)) { $retVal[0] = 3; } if(!$ziph->addFile($file,$zfile)) { $errMsg = "error archiving $file in $archiveFile"; $retVal[1]++; } else { $_SESSION['downloadArchiveFilecounter']++; } } if(!$ziph->close()) { $retVal[0] = 4; } return $retVal; } [/php] Variablen: $_SESSION['downloadArchiveFilename'] - enthält den Pfad zum DownloadArchiv relativ zum Document Root Ein var_dump gibt zum Beispiel: [code] string(62) "audio\fpngp8lbed10mie47vrqailjg7_admin_17.03.2009_12:18:30.zip" [/code] Physikalisch existieren tut die Datei aber nicht. $retVal - enthält die Statuscodes, welche ich in der aufrufenden PHP Datei nutze um die Ergebnisse in HTML Form wiederzugeben [code] array(2) { [0]=> int(4) [1]=> int(0) } [/code] Meine Vermutung ging in die Richtung, dass PhP keine Schreibrechte im Verzeichnis "audio" hat. Daher Testweise die Filesystemsecurity auf der Entwicklungsmaschine für den Ordner "audio" angepasst und "Full Controll" für "Everybody" hinzugefügt, um wirklich alles zu erschlagen .. Ändert aber leider nix am Verhalten .. Testweise mit absoluten Pfaden statt mit relativen zu Arbeiten hat ebenfalls keine Besserung gebracht $ziph->close() gibt ja leider nur True oder False zurück. Einen Grund liefert das leider net, daher fehlt mir hier akut der weitere Ansatz Irgendjemand eine Idee was ich noch prüfen könnte bzw. gar eine Lösung?
17. März 200916 j string(62) "audio\fpngp8lbed10mie47vrqailjg7_admin_17.03.2009_12:18:30.zip" versuch mal die datei von hand anzulegen und du wirst ziemlich schnell auf die problem ursache aufmerksam
17. März 200916 j Autor for($i=0;$i<0;$i++) { echo("WAAAAAHHHHHH"); } [/php] Oder auch: Och nööööööö wie blind kann man sein?? Danke..
17. März 200916 j Autor Ich mag abba keine while Schleifen Whatever kaum schmeisst man im Dateinamen die : raus, schon gehts.. Komisch Danke auf jeden Fall nochmal. Manchmal sieht man den Baum vor lauter Wäldern nich :floet:
17. März 200916 j *hust* war es nicht so, dass kein : im namen vorkommen darf? *hust* warum haste ihm das verraten? haette er sicher auch allein rausbekommen
17. März 200916 j Autor hatter nach deiner antwort sogar, weil er nur deine antwort in der mail gelesen hat und nicht die zweite .. die zweite hab ich erst hier gesehen
17. März 200916 j Dann bin ich ja beruhigt, dass ich deinen Lernprozess nicht vorweggenommen habe Ich habe aber die Frage selbst gestellt, da ich mir unsicher war. Ich habe noch nie versucht einen : in einen Dateinamen zu schreiben.
18. März 200916 j Autor Da das Script wie geschrieben unter Debian entwickelt wurde: Unter Debian kann man wunderbar Dateinamen mit : verwenden Nur unter Windows (geschlagen sei der Erfinder von :\ und \ * grr*) geht das halt nicht..
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.