php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.12.2011, 19:39  
Neuer Benutzer
 
Registriert seit: 27.04.2011
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
Dennis Ze befindet sich auf einem aufstrebenden Ast
Standard CPU Auslastung bei fRead

Hallo liebe PHP-Gemeinde,
derzeit stehe ich vor einem Problem mit der Funktion "fRead". Ich öffne einen Stream (Radio) via Socket-Verbindung und muss die eingehenden Daten Byte für Byte einzeln auslesen. Aktuell verwende ich also folgenden kleinen Code:

PHP-Code:
while(!feof($fp))    
{
$lesefile fread($fp,1);

Problem an der ganzen Sache ist nun folgendes: Die CPU sowie der RAM stoßen an ihre Grenzen, der Server bricht teilweise zusammen.

Gibt es ggf. Alternativfunktionen, welche besser funktionieren?
Dennis Ze ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.12.2011, 20:41  
Erfahrener Benutzer
 
Benutzerbild von serious-cool
 
Registriert seit: 12.09.2008
Beiträge: 154
PHP-Kenntnisse:
Fortgeschritten
serious-cool befindet sich auf einem aufstrebenden Ast
Standard

Solche Aktionen immer mit einer geeigneten Sprache umsetzten, JAVA oder C++ können sowas besser. Hypertext Preprocessor steht ja nicht unbedingt fürs Bitwürfeln ; )
__________________
Ein Klauenhammer ist kein Schraubendreher, auch wenn beide das Problem ,,Schraube-Wand" bidirektional lösen können.
serious-cool ist offline   Mit Zitat antworten
Alt 28.12.2011, 22:30  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Dennis Ze Beitrag anzeigen
derzeit stehe ich vor einem Problem mit der Funktion "fRead". Ich öffne einen Stream (Radio) via Socket-Verbindung und muss die eingehenden Daten Byte für Byte einzeln auslesen. Aktuell verwende ich also folgenden kleinen Code:

PHP-Code:
while(!feof($fp))    
{
$lesefile fread($fp,1);

Problem an der ganzen Sache ist nun folgendes: Die CPU sowie der RAM stoßen an ihre Grenzen, der Server bricht teilweise zusammen.
Huch? Du liest byteweise in einer Schlaufe und überschreibst dabei immer das vorher empfangene? Du bist ein Serversadist.
  Mit Zitat antworten
Alt 28.12.2011, 23:19  
Neuer Benutzer
 
Registriert seit: 27.04.2011
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
Dennis Ze befindet sich auf einem aufstrebenden Ast
Standard

Der obige Code soll nur die Art und Weise darstellen, wie ich den empfangenen Stream auslese. Das byteweise Auslesen ist nötig, um die Metadaten im Stream zu erkennen und dann entsprechend zu entfernen. Die Bytes werden natürlich in eine Datei geschrieben.

Ich habe bereits ein anderes Script via fgets programmiert, welches jedoch keine Metadaten empfängt bzw. anfordert. Hier gibt es keine Probleme, die Serverlast bleibt normal. Bei fread und dem byteweisen Auslesen (bei fgets habe ich die Bytes auf 1024 gestellt und es gibt keinerlei Probleme) schießt die Serverlast plötzlich extrem in die Höhe.
Dennis Ze ist offline   Mit Zitat antworten
Alt 28.12.2011, 23:37  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Zitat:
Zitat von Dennis Ze
Das byteweise Auslesen ist nötig, um die Metadaten im Stream zu erkennen und dann entsprechend zu entfernen.
Kannst du das begründen? Ich denke, das ist so nicht richtig.
__________________
Blog | Buch | Kaloa
mermshaus ist offline   Mit Zitat antworten
Alt 29.12.2011, 00:28  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Dennis Ze Beitrag anzeigen
Der obige Code soll nur die Art und Weise darstellen, wie ich den empfangenen Stream auslese.
Und wie Du weiter mitteilst, schrottest Du damit den Server.

Gibt es einen Grund, das http://www.php.net/manual/de/ref.stream.php nicht zu verwenden?
  Mit Zitat antworten
Alt 29.12.2011, 00:54  
Neuer Benutzer
 
Registriert seit: 27.04.2011
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
Dennis Ze befindet sich auf einem aufstrebenden Ast
Standard

@mersmshaus: Es handelt sich um ICY-Metadaten von Shoutcast-Streams. Diese werden in einem bestimmten Byte-Intervall im Stream mitgesendet. Damit die empfangenen MP3-Daten nicht mit diesen Metadaten vermischt werden, müssen die Metadaten rausgefiltert werden. Aus diesem Grund lese ich jedes Byte einzeln aus und zähle die Gesamtlänge bis zum Erreichen des Meta-Intervalls (http://www.smackfu.com/stuff/programming/shoutcast.html).

@meikel: Besagte Funktion hatte ich noch nicht getestet. Gibt es denn gegenüber fRead einen entsprechenden Unterschied, der das Überlasten eines Servers erklären würde?
Dennis Ze ist offline   Mit Zitat antworten
Alt 29.12.2011, 01:40  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Zitat:
Zitat von Dennis Ze
Aus diesem Grund lese ich jedes Byte einzeln aus und zähle die Gesamtlänge bis zum Erreichen des Meta-Intervalls
Die Filterung wäre nicht möglich, wenn du – meinetwegen – 8 KB auf einmal lesen würdest?

Ich sehe das Problem nicht.
__________________
Blog | Buch | Kaloa
mermshaus ist offline   Mit Zitat antworten
Alt 29.12.2011, 09:59  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Wenn die Position der Metadaten einer berechenbaren Regelmäßigkeit unterliegen, dann sollte es eigentlich problemlos möglich sein, die echten Daten vollständig Blockweise einzulesen. Gleiches gilt - wenn ich mir den Link oben so anschaue - auch für die Metadaten. Eine Notwendigkeit für ein Byteweises lesen kann ich nicht erkennen.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 29.12.2011, 10:34  
Erfahrener Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 386
PHP-Kenntnisse:
Fortgeschritten
ChrisvA befindet sich auf einem aufstrebenden Ast
Standard

Ich habe hier das Gefühl, als stände Dennis Ze gerade reichlich auf dem Schlauch.
Die Idee derjenigen, die hier die ganze Zeit posten ist, dass man ruhig blockweise lesen kann, die Verarbeitung dann jedoch trotzdem Byteweise passieren kann.
Also
PHP-Code:
fread (.. , 2048);
for (
$i 0$i 2048; ++$i){
//jedes Byte einzeln verarbeiten

ChrisvA ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] fread problem julienyxz PHP Einsteiger 8 22.08.2011 10:55
[Erledigt] fread von Sonderzeichen Tholi PHP Einsteiger 11 21.05.2011 21:19
[Erledigt] fread() Problem webit PHP Tipps 2010 7 11.09.2010 16:37
fread löscht immer den Dateninhalt. Fluxkompensator PHP Tipps 2010 7 08.08.2010 21:26
[Erledigt] Hohe Cpu Auslastung im IE PiXeL1337 PHP Tipps 2010 8 26.02.2010 10:27
Fehlender Leerzeichen bei fread() Bon_Mori PHP Tipps 2009 7 29.09.2009 16:50
Scriptangebot [Erledigt] KOSTENLOS: Webserver Auslastung anzeigen Curcio Scriptbörse 0 21.08.2009 21:05
Wann Auslastung geringer. txt oder sql? sanz PHP Tipps 2008 10 06.06.2008 11:12
Warning: fread(): supplied argument is not a valid stream resource... pixelprinzessin PHP Tipps 2008 20 23.04.2008 15:44
fread für Dateien > 8KB PHP Tipps 2006 3 14.02.2006 20:21
Probleme mit fopen, fread und fclose PHP-Fortgeschrittene 4 19.12.2005 14:37
[Erledigt] mail versand mit anhang (-- fopen(), fread(), filesize() --) PHP Tipps 2005 5 29.01.2005 18:36
Daten aus *.MPQ-Dateien mittels fread auslesen? PHP-Fortgeschrittene 21 06.01.2005 14:40
fread ließt nicht die angegebenen bytes PHP-Fortgeschrittene 3 14.10.2004 18:54
fread() --> fwrite() = Müll PHP Tipps 2004 1 12.10.2004 18:09

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php cpu auslastung, php fread cpu, fgets hohe serverlast

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:42 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum