Heyho zusammen,
ich versuch eine Datei von einem externen Server auf meinen hochzuladen. Mit der CUploadedFile Klasse habe ich über getInstance schon erfolgreich Dateien vom PC hochladen können. Das ganze will ich erweitern um eine feed Datei für meine Zwecke zu verwenden.
Daher versuche ich sowas in meiner action Methode:
$feed = 'http://meinedatei.txt';
$model->importFile = CUploadedFile::getInstance($model,$feed);
print_r($model->attributes);
# Datei auf Server speichern
$model->importFile->saveAs('upload/import.csv');
$model->importFile bleibt jedoch leer und ich habe noch nicht die richtige Methode oder Klasse gefunden. Gibt es eine Yii Klasse dafür?
[font=“Courier New”]CUploadedFile[/font] ist nur für die Verwaltung von Dateien gedacht, die der anfragende Client mit der Anfrage mitgeliefert hat. Dateien auf anderen Servern wirst du damit nicht erreichen können. Eine geeignete Klasse in Yii … nun, daran arbeite ich seit über einem Jahr
Versuch’s mal mit ehttpclient.
Wow super fixe Antwort!
ehttpclient habe ich mir angesehen, konnte aber nicht so recht ausmachen, wie es genau zum Einsatz kommt. Hatte noch nach einfachen PHP Lösungen geguckt und bin auf cURL gestoßen.
<?php
$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
Der Code ist in meiner action-Methode drin und funktioniert!
Um auf die Extension ehttpclient zu kommen, damit wird ein Client generiert welcher für CUploadedFile::getInstance verwenden werden kann. Hab ich das richtig aufgenommen?
Nein Aus irgendwelchen Gründen hast du dich da ein wenig zu sehr auf [font=“Courier New”]CUploadedFile[/font] verstiegen. EHttpClient ist eine Umverpackung von Zend_Http_Client und hat erstmal mit Yii wenig zu tun. Entsprechend können die Yii-eigenen Klassen damit wenig anfangen. Allerdings kannst du via EHttpClient immer noch entfernte Resourcen abfragen und gegebenenfalls auch manipulieren.
Okay, ich werds im Hinterkopf halten und später einmal ausprobieren.
Dankeschön