brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 22-01-2009, 09:09
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard file_put_contents und resume

Hallo zusammen,

ich versuche, mit file_get_contents eine flv-Datei von einem anderen Server zu laden. Mit kurzen Filmen (< 1 min) geht das auch wunderbar. Bei längeren Filmen startet der Download immer wieder neu...
PHP-Code:
echo "Start";
// get data from the site
if(!$handle = @fopen($downloadURL'r')) {
   echo 
"ERR";
   return;
}
file_put_contents('file.flv'$handle); 
Mit "neu starten" meine ich, dass "Start" immer wieder ausgegeben wird. Wie kann ich da ein Handling für bauen, dass der Download resumed wird, wenn die Gegenseite den zurücksetzt? Oder liegt es an der Verwendung von file_put_contents, macht man sowas lieber mit fopen bzw. fsockopen? Wenn ich dann eine andere Seite auf meinem Server aufrufe und den Download damit "abbreche", erhalte ich einen 500. Ein Refresh der anderen Seite funktioniert dann wieder. Also etwas blöd alles :-)

VIELEN DANK!

strauberry
Mit Zitat antworten
  #2 (permalink)  
Alt 22-01-2009, 10:20
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.104
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Download mit file_put_contents ist schon mal ganz großer Käse. Und die file_*_contents-Funktionen benötigen keinen Filehandle. Dein Codeschnippselchen macht kein Sinn...
Mit Zitat antworten
  #3 (permalink)  
Alt 22-01-2009, 10:23
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,
danke für den ähh Hinweis :-)

PHP-Doku: "If data is a stream resource, the remaining buffer of that stream will be copied to the specified file."

Wie wäre es denn besser gelöst?

Mit fopen und dann eine while-Schleife, bis das Ende des Streams erreicht ist?

Danke!
Mit Zitat antworten
  #4 (permalink)  
Alt 22-01-2009, 10:25
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.104
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ah ok, dann will ich nichts gesagt haben. Aber du sprichst doch von Download, wieso dann file_put_contents?
Mit Zitat antworten
  #5 (permalink)  
Alt 22-01-2009, 10:28
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hab die Doku so verstanden, dass man mit file_put_contents Daten in eine Datei schreiben kann und wenn der zweite Parameter ein Stream ist, nimmt er das als Datenquelle. Den Stream öffne ich davor mit fopen und einer URL (fopen('http://www.xyz.de/file.flv')).
Daher Download :-)

Wenn es da einen anderen Weg oder eine schöne Klasse im PEAR oder so gibt, nehme ich die auch gerne.
Mit Zitat antworten
  #6 (permalink)  
Alt 22-01-2009, 11:16
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.104
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Was hältst du denn von file_get_contents bzw. stream_get_contents? file_put_contents ist zum Schreiben von Daten da, entspräche also einem Upload.
Mit Zitat antworten
  #7 (permalink)  
Alt 22-01-2009, 11:23
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Super, werde ich mal ausprobieren...

Wie sieht's mit der Alternative aus?
PHP-Code:
$handle fopen ("http://www.youtube.com/get_video?video_id=NpUdTFMitYA&t=XXX&el=detailpage&ps=""r");
$buffer '';
while (!
feof($handle)) {
    
$buffer .= fgets($handle);
}
fclose ($handle);
file_put_contents('test.flv'$buffer); 
Hat bei mir lokal funktioniert... Ist das Geschmackssache oder hat eine der beiden Varianten besondere Vorteile?

Danke PHP-Desaster :-)
Mit Zitat antworten
  #8 (permalink)  
Alt 22-01-2009, 11:40
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.104
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Was du da mit fopen, fgets, feof und fclose machst, kapselt dir file_get_contents bereits alles, darum würde ich das vorziehen. Pass aber auf, dass deine Lösung mit deaktiviertem allow_url_fopen nicht läuft.
Mit Zitat antworten
  #9 (permalink)  
Alt 22-01-2009, 11:48
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Alles klar, danke!

Hab in den Kommentaren auch was interessantes gefunden:

Zitat:
some times this functions cause an max execution time time error, Why?

Simple, if you use it the function wait for have the specified byte length into the resource or the end of file, but, several times this not happend, so we need implement an artificial flag like this:

$tmp = stream_get_contents($this->socket, 42);
while($tmp[42] != 'N'){

//Your code...

$tmp = stream_get_contents($this->socket, 42);
}
Wobei das die Methode doch eigentlich selbts handelt, wenn der zweite Parameter nicht explizit gesetzt ist, oder?
Mit Zitat antworten
  #10 (permalink)  
Alt 22-01-2009, 18:33
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Mit stream_get_contents habe ich leider den gleichen Effekt
Aber auch nur bei youtube. Clipfish, myVideo und andere funktionieren wunderbar...
Mit Zitat antworten
  #11 (permalink)  
Alt 22-01-2009, 21:40
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Bei der Lösung mit $buffer musst du das memory_limit im Auge behalten. Schließlich ziehst du die Daten komplett in eine Variable, bevor du sie in eine Datei schreibst.
Mit file_put_contents(..., <stream>) hast du dieses Problem nicht.

Die Sache mit dem "Neustart": Wenn "Start" immer wieder ausgegeben wird, heißt das, dein gesamtes Script startet immer wieder von vorn. Das hat nichts mit deinem Grab zu tun. Vermutlich schickt der Client ständig einen neuen Request.

PS: Ich weiß ja nicht, was du mit den Videos machst, aber ich hoffe, du beachtest die AGB der Anbieter und etwaige Urheberrechte.

Geändert von onemorenerd (22-01-2009 um 21:43 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 22-01-2009, 21:58
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.104
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

OffTopic:
Was hatte ich da heute morgen denn für eine Pain? Die Lösung mit dem Filehandle ist natürlich viel eleganter...
Mit Zitat antworten
  #13 (permalink)  
Alt 23-01-2009, 10:07
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So, ich habe jetzt wget für mich entdeckt. Geht unproblematischer, weil keine Allocation-Fehler kommen und das wget richtig flott runterlädt :-)
Mit Zitat antworten
  #14 (permalink)  
Alt 24-01-2009, 16:58
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hier noch ein weiterer Tipp: es kann sein, dass bei großen Downloads ein 500er erscheint, der Download aber trotzdem weiterläuft. Der 500er wird vom Apache geschickt, um Zombie Prozesse zu verhindern. Es muss also in regelmäßigen Abständen ein Output an den Browser geschickt werden. Bsp siehe hier: http://de2.php.net/set_time_limit -> Hoorn
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
belbit LiveSupport Script ansehen belbit LiveSupport Script

Schnellen und unkomplizierten Support im LiveSupport-Chat anbieten. Ohne Datenbank und in wenigen Sekunden installiert.

24.05.2012 EichbaumMedia | Kategorie: PHP/ Chat
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:23 Uhr.