php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.10.2004, 09:47  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard Alarm-Handler in PHP? Hilft stream_set_timeout?

Hallo,

ich habe ein Prozess-Handle und möchte, dass der Prozess nach einer bestimmten Zeit, in der keine Ausgabe erfolgt ist, beendet wird:

PHP-Code:
<?php
        
...
        
$ph popen ($command'r');
        if (!
$ph) {
            
$this->add_error (E_PROGRAM_FAULT$command);
            
$_ENV["LC_CTYPE"] = $lc_type;
            return (
false);
        }
        
$lines = array ();
        while (!
feof ($ph)) {
            
$line fgets ($ph1024);
            
array_push ($lines$line);
        }
        
pclose ($ph);
        ...
?>
In Perl würde ich mir für $SIG{ALRM} eine kleine Funktion schreiben. Wie kann man so etwas in PHP realisieren?
__________________
Cheers, Marco
marsch ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 26.10.2004, 13:19  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard

OK, ich habe etwas gefunden, was zu funktionieren scheint:

PHP-Code:
<?php
...
        
$lines  = array ();
        
$status socket_get_status ($ph);
        
$stdIn  = array ($ph);
        while (!
feof ($ph) and !$status['timed_out']) {
            if (
false === stream_select ($stdIn$stdOut null$stdErr null50)) {
                
$this->add_error (E_TIMEOUT$command);
                return (
false);
            } else {
                
$line rtrim (fgets ($ph96));
                
array_push ($lines$line);
                
$status socket_get_status ($ph);
            }
        }
...
Allerdings dauert die Timeout-Melldung statt der gewünschten 5 Sekunden über 25 Sekunden, optimal scheint die Lösung also nicht zu sein... Ich verstehe es auch noch nicht...
__________________
Cheers, Marco
marsch ist offline   Mit Zitat antworten
Alt 26.10.2004, 15:38  
Gast
 
Beiträge: n/a
Standard

Schau dir mal das große Beispiel dazu an, das ist das was du suchst:

http://de.php.net/manual/de/control-...es.declare.php

In deiner profile()-Funktion brauchst du dann nur noch die verstrichene Zeit zu vergleichen.

Lev
  Mit Zitat antworten
Alt 26.10.2004, 16:22  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard

Zitat:
Zitat von lev
Schau dir mal das große Beispiel dazu an, das ist das was du suchst:

http://de.php.net/manual/de/control-...es.declare.php

In deiner profile()-Funktion brauchst du dann nur noch die verstrichene Zeit zu vergleichen.

Lev
Hmm, ich werde es probieren, bin mir aber nicht sicher, ob es funktionieren kann, da ja das fgets blockiert, der Stream ist schließlich valid, nur die Ausgabe u.U. extrem verzögert (Bereich einige Minuten). Ich stecke also beim fgets fest und es "tickt" ja dann nix
__________________
Cheers, Marco
marsch ist offline   Mit Zitat antworten
Alt 26.10.2004, 17:00  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard

Ich habe entweder ein Brett vorm Kopf und bin heute betriebsblind oder ich habe die Ticks noch nicht gerafft oder es geht wirklich nicht:

PHP-Code:
<?php
...
        
$ph popen ($command'r');
        if (!
$ph) {
            
$this->add_error (E_PROGRAM_FAULT$command);
            
$_ENV["LC_CTYPE"] = $lc_type;
            return (
false);
        }
        
$lines = array ();
        
$stop  time () + 15;
        
register_tick_function (array ($this'onTick'), $stop);
        declare (
ticks 1) {
            while (!
feof ($ph)) {
                
$line rtrim (fgets ($ph1024));
                
array_push ($lines$line);
            }
        }
        
pclose ($ph);
...
    function 
onTick ($abortionTime) {
        if (
$abortionTime time ()) {
            
$this->add_error (E_TIMEOUT);
            return (
                    array (
                            
'result' => 'FAILURE'
                        
)
                );
        }
        return (
true);
    }
...
?>
Es bricht leider nicht nach 15 Sekunden ab.
__________________
Cheers, Marco
marsch ist offline   Mit Zitat antworten
Alt 26.10.2004, 17:02  
Gast
 
Beiträge: n/a
Standard

Jo, also für 96 Bytes so lange warten... da stimmt was mit der Kiste nicht auf der du dein Stream machst. Oder mit der Verbindung an sich.
  Mit Zitat antworten
Alt 26.10.2004, 17:05  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard

Zitat:
Zitat von lev
Jo, also für 96 Bytes so lange warten... da stimmt was mit der Kiste nicht auf der du dein Stream machst. Oder mit der Verbindung an sich.
Ja, aber das liegt nicht an mir und ist nicht mein Wille
Ich bekomme dieses Problem, wenn ich einen Zonencheck (s. auch http://zonecheck.fr/) an nicht (richtig) konfigurierten Nameservern durchführe. Dann antwortet mir das Programm u.U. nicht, bis es feststellt, dass es eh nix wird, weil ein Host an Port 53 nicht erreichbar ist...
__________________
Cheers, Marco
marsch ist offline   Mit Zitat antworten
Alt 26.10.2004, 18:29  
Gast
 
Beiträge: n/a
Standard

Code:
if ($abortionTime < time ()) {


Aber es könnte auch daran liegen dass nicht mal die ersten 1024 Bytes ankommen. Musst halt Streaming-Funktionen mit Timeout-Parameter verwenden um das davor auszuschließen.

Grüsse

Lev
  Mit Zitat antworten
Alt 27.10.2004, 08:26  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard

Zitat:
Musst halt Streaming-Funktionen mit Timeout-Parameter verwenden um das davor auszuschließen.
Hmm, wenn ich vom Handle gelesen habe, blockiert es doch aber bis zum EOF... Da scheint kein Timeout mehr zu helfen.
__________________
Cheers, Marco
marsch ist offline   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
Wer hilft Anfänger diverse Änderungen vorzunehmen ? energietecs Beitragsarchiv 4 09.04.2008 16:49
Speicherproblem: memory_limit ändern hilft nicht Ronny76 PHP Tipps 2008 3 30.08.2007 14:42
[Erledigt] PEAR LOG file handler buffering funktioniert nicht PHP-Fortgeschrittene 0 16.12.2005 10:22
[Erledigt] Parser findet Handler nicht PHP-Fortgeschrittene 6 14.11.2005 17:12
Direkt auf den Apache Socket Handler zurückgreiffen (print) RcRaCk2k PHP-Fortgeschrittene 0 03.11.2005 10:44
Programmierung Suche Händler im Umkreis xx Kilometer ... DonTermi PHP-Fortgeschrittene 3 05.09.2005 16:03
Callback handler kann nicht aufgerufen werden PHP Tipps 2005-2 4 21.08.2005 18:44
Got error 127 from table handler!!! Warum??? 18inch Datenbanken 3 22.07.2005 22:00
ich bin ganz neu Bitte Hilft mir PHP Tipps 2005-2 15 16.06.2005 21:11
error handler klasse oder sowas Beitragsarchiv 3 29.09.2004 21:15
Event Handler / offsetX,Y in Netscape ? HTML, Usability und Barrierefreiheit 2 01.09.2004 02:50
Pc Händler Off-Topic Diskussionen 13 20.08.2004 09:18
project-69.com - Wer hilft? Mit Gegenleistung! Beitragsarchiv 0 17.08.2004 21:19
hilft css? HTML, Usability und Barrierefreiheit 10 06.07.2004 19:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
stream_set_timeout, php stream_set_timeout, php alarm, alarm php, stream_set_timeout php, php alarm funktion, php popen timeout, php alarm(), stream_set_timeout($handle,0), php stream_set_blocking timeout nicht, php hilft, stream_set_timeout fgets, stream_set_timeout() php, stream_set_timeout popen, popen php timeout, stream_set_timeout stream_set_blocking, php alarmierungs, alarm en php, php \stream_select(stdin\, php stream_set_timeout()

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:20 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.