2016-05-09 6 views
0

Wie kann man hochgeladene Dateien in PHP Yii Framework herunterladen?So laden Sie Dateien in zip in PHP (yii)

Ich habe Liste der Benutzer auf meiner Website kann jeder Anwender mehrere Dateien für die einzelnen Abschnitte (Work Informationen, Bildung, Zertifikate etc.) hochladen

Die hochgeladenen Dateien in uploads-Dateien gespeichert werden. Hier ist der Link

C:\wamp\www\project\themes\mydesign\assets\global\uploads 

in uploads foler, gibt es viele andere Ordner, Ordner mit Benutzer-ID genannt werden ..

C:\wamp\www\project\themes\mydesign\assets\global\uploads\1\ 
C:\wamp\www\project\themes\mydesign\assets\global\uploads\2\ 
C:\wamp\www\project\themes\mydesign\assets\global\uploads\3\ 

1,2,3 ist der Name des Ordners für Benutzer1, Benutzer2 user3 .. und 1,2,3 ist ein id von user1, user2, user3.

Wenn der Benutzer zuerst anyfile lädt und speichert, wird der Ordner für diesen Benutzer in den Upload-Ordnern erstellt.

Alle Benutzer-Dateien sind jeder Abschnitt in ihrem Ordner gespeichert .. Jetzt möchte ich eine Download-Schaltfläche in CgridView in der Nähe der Schaltfläche zum Löschen für jeden Benutzer hinzufügen .. und ich möchte alle Dateien in zip für jeden Benutzer herunterladen i wollen.

Jeder Beispielcode, es zu tun? Welches Werkzeug, welche Erweiterung oder welche Bibliothek sollte ich verwenden? oder ist ein Code verfügbar? Ich bin neu zu yii, habe keine Idee, wie Sie alle Dateien für jeden Benutzer erhalten und im zip-Ordner herunterladen. irgendwelche Vorschläge.

Antwort

1

Schritt 1: Sie müssen Associate Link in Ihrem Grid generieren, um einen Yii-Controller aufzurufen -> Aktion, sagen wir actionZipDownload. Folgen Sie dazu dem folgenden Link: Stellen Sie sicher, dass Sie auch die userId an diese Aktion übergeben.

http://www.yiiframework.com/wiki/593/yii-cgridview-add-custom-button/

Schritt 2: auf dieser Aktion basierend auf geben userId müssen Sie nach Ihrem Setup (Verzeichnisstruktur) assoziiertes Benutzerverzeichnispfad Ziel.

Schritt 3: Lesen Sie alle Dateien aus diesem bestimmten Verzeichnis, fügen Sie diese für die Zip-Erstellung hinzu und speichern Sie die ZIP-Datei in einem temporären Verzeichnis. Zip-Name kann userId_date.zip

Die Quelle wahrscheinlich für Schritt 2 und 3 wäre wie folgt, müssen Sie einige Anpassungen an den relativen Pfad als $ Ziel vornehmen. Auch PHP-doc überprüfen http://php.net/manual/en/class.ziparchive.php

<?php 
public function actionZipDownload(){ 
$userId = $_GET['userId']; // get the passed user id 
$zip=new Zip Archive(); 
$destination=dirname($_SERVER['DOCUMENT_ROOT'])."/project/themes/mydesign/assets/global/uploads/".$userId."/filename.zip"; 
if($zip->open($destination,ZIPARCHIVE::CREATE) !== true) { 
    return false; 
} 
$doclist=CUploadedFile::getInstancesByName('files'); 
foreach($doclist as $thefile) 
{ 
    $random=rand(11111,99999); 
    $filename=$random.$thefile;  
    $zip->addFile($thefile->tempname,$filename); 
} 
$zip->close(); 
} 
?> 

Schritt 4: nach erfolgreicher Erzeugung des Reißverschlusses, um die Antwort zu Browser zum Download senden.

Schritt 5: Nach dem erfolgreichen Herunterladen müssen Sie möglicherweise das temporäre Zip-Archiv löschen, um Platz zu sparen.

Von Schritt 2 bis 5 zu Schritt, folgen Sie diesem Link http://www.bsourcecode.com/yii-framework/yii-files/yii-zip-format/

Hoffnung hilft.

+1

ja, aber wie arbeite ich an Schritt 2,3? Das ist, was ich verwechselt habe, wie bekomme ich die Dateien aus Upload-Ordner für jeden Benutzer durch ihre Benutzer-ID? als ich neu zu yii, nicht sicher, wie man das beginnt! irgendeinen Beispielcode dafür? –

+0

Ich versuche, einen Beispielcode für Schritt 2 und 3 zu schreiben. Sie könnten debuggen und Anpassungen am Skript vornehmen. lassen Sie mich wissen, wenn dies das ist, was Sie suchen. –

+0

Ich mache einige Änderungen im obigen Code, überprüfen Sie bitte erneut. Hat es funktioniert? –