Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[PHP] - ZIP File Erstellung unter W2K3 + IIS6

Empfohlene Antworten

Veröffentlicht

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?


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

  • Autor

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:

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.

  • Autor

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:

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.