PHP: Maximum execution time of 30 seconds exceeded

geronimo89

New member
Hallo liebe Leute, habe hier ein kleines Problem mit einer PHP-Aufgabe aus der Berufsschule. Mir scheint, als habe mein Script ein Problem, die Textdatei zu lesen. Mein Server läuft mit userdir extension und mein Benutzer ist Angehöriger der www-data Gruppe.
PHP:
<?php
class mitarbeiter
{
# Eigenschaften der Mitarbeiter
    private $id;
    private $name;
    private $vorname;
    private $bank;
    private $blz;
    private $konto;
    private $stundenlohn;
    private $summe_stunden;

# Daten des Mitarbeiters erzeugen

    function __construct($info)
    {
        $this->id = $info[0];
        $this->name = $info[1];
        $this->vorname = $info[2];
        $this->bank = $info[3];
        $this->blz = $info[4];
        $this->konto = $info[5];
        $this->stundenlohn = $info[6];
        $this->summe_stunden = 0;
    }
    
    function stunden_erfassen($anzahl)
    {
        $this->summe_stunden=$this->summe_stunden+$anzahl;
    }

    function __toString()
    {
        $aus = "Mitarbeiter-ID: $this->id";
        $aus .= "Name: $this->name";
        $aus .= "Vorname: $this->vorname";
        $aus .= "Bank: $this->bank";
        $aus .= "Stundenlohn: $this->stundenlohn Euro";
        $aus .= "Summe der Stunden: $this->summe_stunden";
    }
}
    
class unternehmen
{
    private $name;
    private $belegschaft;
    private $summe_stunden_unbekannt;

    function __construct($na)
    {
    $this->name = $na;
    $this->summe_stunden_unbekannt=0;
    
    #Daten aus Textdatei lesen
    
    $dp = fopen("belegschaft.txt","r");
    $zeile = fgets($dp,100);
    while(!feof($dp))
    {
        $info=explode(",",$zeile);
        $id=$info[0];
        $this->belegschaft[$id] = new mitarbeiter($info);
        $zeile=fgets($dp, 100); # Zeile wird wieder eingelesen, Zeiger bleibt auf dem ausgelesenen Datensatz/der Zeile stehen und wird hiermit weitergeschoben
        
    }
    fclose($dp);    
}
    function stunden_erfassen()
    {
        $dp=fopen("stunden.txt","r");
        $zeile=fgets($dp,100);
        while(!feof($dp))
        {
            $info=explode(",", $zeile);
            $id=$info[0];
            if(array_key_exists($id, $this->belegschaft)){
                $this->belegschaft[$id]->stunden_erfassen($info[1]);
                }
            else{
                $this->summe_stunden_unbekannt=$this->summe_stunden_unbekannt+$info[1];
            }
        }
        
        function __toString()
        {
            $ausgabe = "Firma $this->name <br />";
            
            foreach($this->belegschaft as $schluessel=> $wert)
            {
                $ausgabe .= $this->belegschaft[$schluessel];
            }
        $ausgabe .= "Summe der Stunden unbekannt: $this->summe_stunden_unbekannt <br />";
        return ($ausgabe);
        }
    }
}
# Hauptprogramm

$un=new unternehmen("Marco Hart");
$un->stunden_erfassen();
echo $un;

?>

Inhalt von stunden.txt
Code:
76,5 
33,12 
33,3 
68,44 
76,3 
68,6 
65,7 
68,7

Inhalt von belegschaft.txt
Code:
76,Müller,Max,Bayerische Bank,38010050,4848483,15.5 
33,Schmitz,Peter,Hessische Bank,36050080,772384,12 
68,Maier,Sepp,Sächsische Bank,32020080,2938515,12.5

Eigentlich dürfte das Script für das auslesen doch garnicht so lange brauchen, oder?
 

rami

New member
Bau mal in jede Funktion und Schleife eine Testausgabe ein, wie
PHP:
echo "Betrete Funktion abc() [".microtime(true)."]"; flush();
und schau, ob er irgendwo in eine Endlosschleife läuft, bzw. lokalisiere so, wo er so lange hängt.
 

geronimo89

New member
Habs gefunden, in der Funktion stunden_erfassen fehlte in der while-Schleife
PHP:
$zeile=fgets($dp,100);
damit der Zähler für die Zeile der Datei weiterläuft, gerade habe ich zwar noch das Problem, dass meine Ausgabe kein String ist, aber das caste ich schon noch hin.
 

b4ck

New member
gerade habe ich zwar noch das Problem, dass meine Ausgabe kein String ist, aber das caste ich schon noch hin.

PHP:
    function __toString()
    {
        $aus = "Mitarbeiter-ID: $this->id";
        $aus .= "Name: $this->name";
        $aus .= "Vorname: $this->vorname";
        $aus .= "Bank: $this->bank";
        $aus .= "Stundenlohn: $this->stundenlohn Euro";
        $aus .= "Summe der Stunden: $this->summe_stunden";

        return $aus;
    }

ohne return wird das auch nix ;)
 
Oben