dgr243 Geschrieben 17. März 2009 Geschrieben 17. März 2009 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? Zitieren
T3D Geschrieben 17. März 2009 Geschrieben 17. März 2009 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 Zitieren
Shadowman Geschrieben 17. März 2009 Geschrieben 17. März 2009 *hust* war es nicht so, dass kein : im namen vorkommen darf? *hust* Zitieren
dgr243 Geschrieben 17. März 2009 Autor Geschrieben 17. März 2009 for($i=0;$i<0;$i++) { echo("WAAAAAHHHHHH"); } [/php] Oder auch: Och nööööööö wie blind kann man sein?? Danke.. Zitieren
Shadowman Geschrieben 17. März 2009 Geschrieben 17. März 2009 viel lustiger wäre: echo "WAAAA"; while(true) echo "H";[/PHP] Zitieren
dgr243 Geschrieben 17. März 2009 Autor Geschrieben 17. März 2009 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: Zitieren
T3D Geschrieben 17. März 2009 Geschrieben 17. März 2009 *hust* war es nicht so, dass kein : im namen vorkommen darf? *hust* warum haste ihm das verraten? haette er sicher auch allein rausbekommen Zitieren
dgr243 Geschrieben 17. März 2009 Autor Geschrieben 17. März 2009 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 Zitieren
Shadowman Geschrieben 17. März 2009 Geschrieben 17. März 2009 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. Zitieren
dgr243 Geschrieben 18. März 2009 Autor Geschrieben 18. März 2009 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.. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.