Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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 ;)

Geschrieben

Ich mag abba keine while Schleifen :P

Whatever kaum schmeisst man im Dateinamen die : raus, schon gehts.. Komisch :D

Danke auf jeden Fall nochmal. Manchmal sieht man den Baum vor lauter Wäldern nich :floet:

Geschrieben
*hust*

war es nicht so, dass kein : im namen vorkommen darf?

*hust*

warum haste ihm das verraten? haette er sicher auch allein rausbekommen :P

Geschrieben

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.

Geschrieben

Da das Script wie geschrieben unter Debian entwickelt wurde: Unter Debian kann man wunderbar Dateinamen mit : verwenden :D

Nur unter Windows (geschlagen sei der Erfinder von :\ und \ *

grr*) geht das halt nicht.. :rolleyes:

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...