Christian: So rechne er doch +2 in unter 30sek!

Guten Abend.
Ich fürchte, ich brauche hier mal kompetente Hilfe:

Ich hab ein Array $trs
print_r($trs); ->
Array ( [0] => 47 [1] => 76 [2] => 105 [3] => 134 [4] => 163 [5] => 192 [6] => 219 [7] => 248 [8] => 277 [9] => 306 [10] => 335 [11] => 361 [12] => 390 [13] => 419 [14] => 445 [15] => 474 [16] => 503 [17] => 535 [18] => 564 [19] => 593 [20] => 672 )

Zeile 46-48 der problemdatei.php:

foreach ($trs as $tr)
 {
 $id = $tr+2;

Ergibt bei der Ausführung:

Fatal error: Maximum execution time of 30 seconds exceeded in /srv/www/htdocs/test/problemdatei.php on line 48

Wenn ichs in Anführungszeichen setze, müsste er ja auch gar nicht mehr rechnen. Trotzdem der gleiche Fehler.

Falls es wichtig sein sollte, ab Zeile 49 folgt:

$qry = "SELECT * FROM HTML WHERE id = $id";
 $rslt = mysql_query($qry);
 while($row = mysql_fetch_object($rslt))
 {
 $datum_ungetrimt = $row->feld;
 }
 $datum[$i] = trim($datum_ungetrimt);
$i++;
}
print_r($datum);

Bis er mir den Fatal error ausgibt, dauert es übrigens ca. anderthalb Minuten.

Wäre nett, wenn mir jemand helfen könnte!

Gute Nacht,
Christian

  1. Hello,

    Falls es wichtig sein sollte, ab Zeile 49 folgt:
    Bis er mir den Fatal error ausgibt, dauert es übrigens ca. anderthalb Minuten.
    Wäre nett, wenn mir jemand helfen könnte!

    Erster Schritt: ALLE Fehlermeldungen einschalten.

    error_reporting(E_ALL);
    ini_set('track_errors','1');
    ini_set('display_errors','1');

    Dann auch die Fehlermeldungen abholen:

    nach einer IO-Operation über das Dateisystem oder einen fopen-Wrapper:

    if(DEBUG and isset($php_errormsg)){ echo "<p class="error">$php_errormsg<p>\n"; }

    nach jeder MySQL-Operation:

    if(DEBUG and !empty($message = mysql_error($con)))
      {
        echo "<p class="error">INSERT: $message<p>\n";  # bei Update natürlich "UPDATE: ..." usw.
      }

    Und dann kannst Du diese Fehlermeldungen auch in Deinen Scripten stehen lassen.
    Ganz am Anfang, zusammen mit den passenden INI-Settings definierst Du dir

    define('DEBUG','1'); # oder eben '0', wenn Du nicht mehr debuggen willst.

    Die Steuerung des Debugging kann man in User-Identifikationssystemen auch von der Anmeldung eines speziellen Users abhängig machen. Das ist praktisch.

    Peinlich ist es nur, wenn die Debug-Statements selber fehlerhaft sind *gg*
    Also prüfe bitte, was ich Dir da auf die Schnelle zusammengeschrieben habe

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hallo,

      ok. Werd ich einfügen, danke.

      Gruß Christian

    2. Hello,

      Und dann kannst Du diese Fehlermeldungen auch in Deinen Scripten stehen lassen.
      Ganz am Anfang, zusammen mit den passenden INI-Settings definierst Du dir

      define('DEBUG','1'); # oder eben '0', wenn Du nicht mehr debuggen willst.

      In größeren Applikationen, die aus vielen miteinander verknüpften (durch POSTs und GETs) Einzelscripten bestehen, empfiehlt es ggf. in einer zentralen ini-Datei den Schalter zu setzen...

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
  2. habe d'ehre

    Array ( [0] => 47 [1] => 76 [2] => 105 [3] => 134 [4] => 163 [5] => 192 [6] => 219 [7] => 248 [8] => 277 [9] => 306 [10] => 335 [11] => 361 [12] => 390 [13] => 419 [14] => 445 [15] => 474 [16] => 503 [17] => 535 [18] => 564 [19] => 593 [20] => 672 )

    $trs = Array (0=>47, 1=>76, 2=>105, 3=>134); //usw.

    man liest sich
    Wilhelm

    1. Holladiewaldfee,

      Array ( [0] => 47 [1] => 76 [2] => 105 [3] => 134 [4] => 163 [5] => 192 [6] => 219 [7] => 248 [8] => 277 [9] => 306 [10] => 335 [11] => 361 [12] => 390 [13] => 419 [14] => 445 [15] => 474 [16] => 503 [17] => 535 [18] => 564 [19] => 593 [20] => 672 )

      $trs = Array (0=>47, 1=>76, 2=>105, 3=>134); //usw.

      Hier geht es aber nicht um die Zuweisung eines Arrays zu $trs sondern die Ausagabe des Arrays mittels print_r. Und die schaut so aus wie von Christian angegeben (mit \n dazwischen).

      Ciao,

      Harry

      --
        Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
        Bis dahin:
        Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel
    2. Hallo Wilhelm,

      das, was du dort zitiert hast, ist das Werk von PHP nach der Ausführung von print_r($trs).

      Gruß Christian

  3. Hi,

    Falls es wichtig sein sollte, ab Zeile 49 folgt:
    $qry = "SELECT * FROM HTML WHERE id = $id";

    innerhalb einer Schleife SQL-Statements abzufeuern ist etwas, das es allerdringendst zu vermeiden gilt.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      Sind da schon die Grenzen der Leistungsfähigkeit des Systems PHP/MySQL überschritten? Ich hatte in der Schleife noch seehr viel mehr mit den Daten in der Datenbank vor... werde ich wohl gezwungen sein, einen anderen Weg zu gehen...

      Gruß
      Christian

      1. Hi,

        Sind da schon die Grenzen der Leistungsfähigkeit des Systems PHP/MySQL überschritten?

        nicht zwangsläufig. Wenn Du aber eine Einkaufsliste mit fünfzehn Artikeln hast, wirst Du bestimmt nicht für jeden einzeln zum Supermarkt laufen, oder?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. nicht zwangsläufig. Wenn Du aber eine Einkaufsliste mit fünfzehn Artikeln hast, wirst Du bestimmt nicht für jeden einzeln zum Supermarkt laufen, oder?

          hi,

          also sollte ich erstmal alle 11*n (mit n element N(1,2,...,100) auf einmal abfragen, in Arrays zwischenspeichern und dann mit den Arrays weiterarbeiten, anstatt die Daten abzufragen, wenn ich sie brauche?

          Gruß
          duddle

          1. Hi,

            also sollte ich erstmal alle 11*n (mit n element N(1,2,...,100) auf einmal abfragen, in Arrays zwischenspeichern und dann mit den Arrays weiterarbeiten, anstatt die Daten abzufragen, wenn ich sie brauche?

            ja. Wenn Du die Zwischenspeicherung noch eliminieren und die Daten direkt nutzen kannst, ist es natürlich noch besser.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
  4. Hi,

    foreach ($trs as $tr)
    {
    $id = $tr+2;
    $qry = "SELECT * FROM HTML WHERE id = $id";
    $rslt = mysql_query($qry);
    while($row = mysql_fetch_object($rslt))
    {
    $datum_ungetrimt = $row->feld;
    }
    $datum[$i] = trim($datum_ungetrimt);
    $i++;
    }

    Was passiert, wenn Du in der Schleife die ids nur aufsammelst und anschließend EIN einziges SELECT mit
    WHERE id IN ()
    absetzt?

    Der Fehler liegt nicht in der angegebenen Zeile - beim Interpretieren dieser Zeile ist halt zufällig die Zeit abgelaufen. Es hätte die Meldung genausogut in jeder anderen Zeile auftreten können.

    Warum holst Du überhaupt alle Spalten (SELECT *), wenn Du doch nur an einer einzigen Spalte interessiert bist? Da werden unnötigerweise die restlichen Spalten vom MySQL-Server zum PHP-Interpreter übertragen, was natürlich auch unnötig Zeit kostet.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas,

      Was passiert, wenn Du in der Schleife die ids nur aufsammelst und anschließend EIN einziges SELECT mit
      WHERE id IN ()
      absetzt?

      Werde ich mal ausprobiere.

      Der Fehler liegt nicht in der angegebenen Zeile - beim Interpretieren dieser Zeile ist halt zufällig die Zeit abgelaufen. Es hätte die Meldung genausogut in jeder anderen Zeile auftreten können.

      ok...

      Warum holst Du überhaupt alle Spalten (SELECT *), wenn Du doch nur an einer einzigen Spalte interessiert bist? Da werden unnötigerweise die restlichen Spalten vom MySQL-Server zum PHP-Interpreter übertragen, was natürlich auch unnötig Zeit kostet.

      Ja, der Witz ist, dass ich das ganze jetzt auf zwei Spalten reduziert habe. Ich will mal sehen, ob ich dann nicht auch mit Arrays und ohne Datenbank auskomme.

      Gruß
      Christian

    2. Hallo,

      es funktioniert jetzt. Ich habe zwar nicht wirklich was entscheidendes geändert - es lag wohl nur an irgendeiner Formalität, einem Flüchtigkeitsfehler, der mir nicht aufgefallen ist und den ich jetzt durch Formveränderung nicht wiederholt habe...

      Aber danke,
      Christian