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

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:

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...