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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 17-07-2009, 09:31
Chr_PHP_04
 Registrierter Benutzer
Links : Onlinestatus : Chr_PHP_04 ist offline
Registriert seit: Jun 2004
Beiträge: 4
Chr_PHP_04 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Probleme beim lesen/schreiben mit fsockopen

Hi,

ich habe ein Problem beim lesen oder schreiben (ich weiß nicht genau wobei der Fehler auftritt) von Daten.

Ich benutze einen kleinen Linux Rechner für die Heimautomation (HM CCU). Von außen übergebe ich die notwendigen Daten an den Rechner mit folgendem Code:

PHP-Code:
function Post_Request ($sdata)
{
 
$fp fsockopen ("127.0.0.1"8181$errno$errstr30);
 
 if (!
$fp
     echo 
"$errstr ($errno)<br />\n";
 else 
    {
          
$st "POST /tclrega.exe HTTP/1.1\r\n";
          
$st $st "Content-type: application/x-www-form-urlencoded\r\n";
          
$st $st "Connection: Close\r\n";
          
$st $st "Content-length: "strlen($sdata) ."\r\n\r\n";
          
      
fputs($fp,$st.$sdata); 
      
$st "";
      
$t fgets($fp,500);
      
$st $st $t "\r\n";
      
       while (
$t != "\r\n"
       {
        
$t fgets($fp,500);
       }
      
$t "";

      while (!
feof($fp))
        {      
         
$t .= fgets($fp,10000);
        }

    
fclose($fp);
  }

  
$xml = new SimpleXMLElement($t);
  return 
$xml->result

Das klappt auch wunderbar. Aber nach einiger Zeit (das können 1 h oder auch 2 Tage sein) reagiert die CCU nicht mehr. Ich kann dann nichts mehr machen und muss den Resetknopf drücken.

Ich muss dazu sagen, dieses Script wird regelmäßig von fünf Rechnern, die jeweils als Fernbedienung dienen aufgerufen.

Ich vermute dass hier der Fehler zu finden ist, dass einfach zu viele Verbindungen bestehen.

Wie kann ich das verhindern? Ich suche nach einer Möglichkeit, das dieses Script korrekt abbricht und die Resourcen wieder freigibt, wenn gerade kein Zugriff möglich ist, damit spätere Zugriffe wieder korrekt funktionieren und die CCU nicht mehr einfriert.

Ciao, Chr.
Mit Zitat antworten
  #2 (permalink)  
Alt 17-07-2009, 09:45
mkb_webprint
 Registrierter Benutzer
Links : Onlinestatus : mkb_webprint ist offline
Registriert seit: May 2009
Beiträge: 53
mkb_webprint befindet sich auf einem aufstrebenden Ast
Standard

Guten Morgen,
ich kenne mich mit HM CCU jetzt nicht aus, aber kannst du die Daten die du brauchst nicht auch über die CMD an die tclrega.exe weitergeben, als Parameter a lá cmd> tclrega.exe -data1=bla -data2=blubblub ?

Wenn ja kannst du es ja z.B. mit der PHP-Funktion PHP: exec - Manual probieren, oder den anderen Funktionen die PHP zum Starten von Programmen anbietet. Dann musste keinen Socket aufmachen.

Gruß

Björn
Mit Zitat antworten
  #3 (permalink)  
Alt 17-07-2009, 11:28
Chr_PHP_04
 Registrierter Benutzer
Links : Onlinestatus : Chr_PHP_04 ist offline
Registriert seit: Jun 2004
Beiträge: 4
Chr_PHP_04 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

tclrega.exe kenne ich leider nicht. Ich weiß wohl, dass ich auf der CCU auch tcl-Skripte ausführen lassen kann.

Allerdings ergibt sich hier ein neues Problem. Im Code hatte ich zwar 127.0.0.1 angegeben, aber in wirklichkeit liegt der PHP-Server auf einem anderen Rechner. PHP greift über die korrekte IP-Adresse auf die CCU zu. Ein tcl-Skript kann ich so aber nicht auf der CCU starten.

Übrigens die CCU ist ein normaler Linuxrechner, nur halt besonders leistungsschwach. Deshalb läuft der PHP-Server auch auf einem anderen Rechner.

Ich habe jetzt erst mal folgenden Code eingefügt, wenn fsockopen korrekt geklappt hat.
PHP-Code:
stream_set_blocking  $fp  );
usleep(300); 
Dann habe ich nochmal ein usleep(300) zwischen lesen und schreiben eingebaut.

Ob es was bringt weiss ich nicht. Das wird gerade getestet. Eigentlich sollte nach dem öffnen der Stream im Blocking Mode arbeiten.

So ganz verstehe ich stream_set_blocking aber auch nicht. Oder muss der Blocking Mode besser abgeschaltet werden?

Oder kann ich mit stream_select() den Fehler abfangen, dass die Daten einfach nicht ankommen wollen?

Ciao, Chr
Mit Zitat antworten
  #4 (permalink)  
Alt 18-07-2009, 09:46
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Deine Header sind nicht HTTP 1.1 konform. Es wird mindestens noch ein Host Header erwartet. Warum verwendest du nicht cURL, Snoopy oder irgendwas anderes vorgefertigtes?
Das Rad wird auch nicht runder davon, wenn man es dauernd neu erfindet.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #5 (permalink)  
Alt 18-07-2009, 12:07
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Also ich glaube, das es mit php nichts zutun hat.
Du sagst doch, dass du CCU neustarten muss und nicht der Rechner, der Request sendet.
Gibt es eine möglichkeit fehler-protocol von Homematic anzuschauen?
Frage das bitte in jedem fall bei:
ELV Elektronik AG, 26787 Leer
Telefon: 0491/6008-245
Fax: 0491/6008-457
E-Mail: technik@elv.de
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #6 (permalink)  
Alt 18-07-2009, 13:59
Chr_PHP_04
 Registrierter Benutzer
Links : Onlinestatus : Chr_PHP_04 ist offline
Registriert seit: Jun 2004
Beiträge: 4
Chr_PHP_04 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,
Zitat:
Zitat von combie Beitrag anzeigen
Deine Header sind nicht HTTP 1.1 konform. Es wird mindestens noch ein Host Header erwartet.
kannst Du mir sagen, wie der aussehen könnte?

Zitat:
Zitat von combie Beitrag anzeigen
Warum verwendest du nicht cURL, Snoopy oder irgendwas anderes vorgefertigtes?
Würde ich gerne, wenn ich die leiseste Ahnung hätte, was in der Funktion Post_Request genau passiert. Leider hat php.info im Moment Probleme, so dass ich nur an wenige und dann auch nur englische Informationen komme.

Ich habe mir die Funktion noch mal genau angeschaut. So wie ich das jetzt verstehe wird durch fsockopen das Programm tclrega.exe gestartet. Danach wird dann die Ausgabe des Programms ausgelesen.

Jetzt verstehe ich auch was mkb_webprint meinte. Was mir jetzt noch nicht klar ist, wie ich per cURL an die Daten kommen soll. Ich dachte, damit kann man nur normale Webseiten öffnen, aber Programme starten? Ich werde mir gleich mal die Anleitung zu cURL anschauen.

Zitat:
Zitat von combie Beitrag anzeigen
Das Rad wird auch nicht runder davon, wenn man es dauernd neu erfindet.
Eben, genau deshalb benutze ich die Funktion. Ich habe einen PHP-Server auf der CCU installiert. Bei dem Server waren auch einige Beispielseiten. In diesen Beispielseiten wurde auf die einzelnen Geräte über die Funktion Post_Request zugegriffen. Da es damit funktionierte (mehr oder weniger) habe ich die Funktion einfach übernommen.

Ciao, Chr.
Mit Zitat antworten
  #7 (permalink)  
Alt 18-07-2009, 14:08
Chr_PHP_04
 Registrierter Benutzer
Links : Onlinestatus : Chr_PHP_04 ist offline
Registriert seit: Jun 2004
Beiträge: 4
Chr_PHP_04 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,
Zitat:
Zitat von Slava Beitrag anzeigen
Also ich glaube, das es mit php nichts zutun hat.
Du sagst doch, dass du CCU neustarten muss und nicht der Rechner, der Request sendet.
ja, das denke ich jetzt auch. Ich hatte erst auf der CCU PHP installiert. Und da traten halt die Probleme des einfrierrens auf. Deshalb habe ich dann PHP vom Windowsrechner aus benutzt. Aber auch hier passiert das selbe. Die CCU friert ein.

Zitat:
Zitat von Slava Beitrag anzeigen
Gibt es eine möglichkeit fehler-protocol von Homematic anzuschauen?
Ich hoffe, werde gleich mal im entsprechenden Forum nachfragen. Bei ELV oder eQ3 frage ich inzwischen nicht mehr nach. Die Arbeit kann man sich sparen. Auf E-Mails reagieren die nicht. Anrufen bringt leider nichts, da die Mitarbeiter bei so speziellen Fragen keine Antwort parat haben.

Aber ich denke so langsam komme ich dem Problem näher. Ich denke, die Geräte müssen auch nicht immer nacheinander abgefragt werden. Wenn ich 30 Stati abfrage, dann wird ja 30 mal tclrega.exe gestartet. Das das bei der leistungsschwachen CCU zu Problemen führt ist eigentlich klar. Wahrscheinlich kann ich aber auch ein Skript starten dass dann einmal tclrega startet und alle erforderlichen Daten liefert.

Ciao, Chr.
Mit Zitat antworten
  #8 (permalink)  
Alt 21-07-2009, 12:14
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

@Chr_PHP_04 Das Forum bietet dir die Möglichkeit, mehrere Beiträge zu zitieren. Das ist schöner, als auf mehrere Posts verteilt zu antworten. Versuchs das nächste mal bitte.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
fsockopen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme beim Schreiben von text.... ronaldl PHP Developer Forum 10 18-10-2007 08:24
Probleme beim schreiben in die Datenbank Ceene SQL / Datenbanken 32 17-09-2007 08:53
fsockopen / fputs - In Datei schreiben Prominenter PHP Developer Forum 7 16-05-2007 19:13
htmlspecialchars - beim schreiben oder lesen setzen? kendal PHP Developer Forum 4 18-10-2005 17:13
csv lesen / schreiben cypresshill PHP Developer Forum 4 05-09-2003 15:36

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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:43 Uhr.