php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.09.2005, 10:42  
Erfahrener Benutzer
 
Registriert seit: 08.08.2005
Beiträge: 272
madSoul
Standard Performance Probleme...

Hallo zusammen,

normalerweise bin ich ja im Anfängerforum unterwegs, doch heute hab ich mal etwas spezielles...

Ich habe einen Service für Sportler geschrieben, der nach Registrierung den Sportler benachrichtigt das seine Zeiten zum Abruf bereit stehen.
Er schickt dann seine Teilnehmernummer per SMS und erhält im Anschluß seine Ergebnisse.

Klappt an sich auch, nur beim letzten Event ist mir der Server abgeschmiert - das würde ich in Zukunft gerne vermeiden.

Da ich nicht soooooooo viel Erfahrung mit der Programmierung habe bin ich über jede Hilfe dankbar !

PHP-Code:
<?php
$heute 
date("Y-m-d");
include_once(
"connect/con1.inc");
$result mysql_query("SELECT veranstnr FROM veranstaltung WHERE datum='$heute' AND ergaktiv='1'");

//--Wenn Ergebnisse online sind setze ERGAKTIV auf 1----------------

while($zeige mysql_fetch_assoc($result)){

    
$veranstnr $zeige['veranstnr'];
    include_once(
"connect/con2.inc");
    
$update mysql_query("UPDATE zielzeit SET ERGAKTIV='1' WHERE VNR='$veranstnr'");
}
include_once(
"connect/con2.inc");

//********************
$BILL 0;
$PROJEKT 15;
//********************

//--session für 4 Stunden aktiv--------------------
$datesession date("Y-m-d H:i:s"time()+4*60*60);

$date_now date("Y-m-d H:i:s");


$result mysql_query("SELECT ANR,LID FROM zielzeit WHERE ERGAKTIV='1' AND STATUS='0' AND AKTIV='1'");
$num mysql_num_rows($result);

while(
$zeige mysql_fetch_assoc($result)){

    
$ANR $zeige['ANR'];
    
$LID $zeige['LID'];
    
$ausgabe "sende Deine Startnummer...";
    
$MSGOUT urlencode($ausgabe);
    
//--Eintrag in sessions------------------------------------------
    
$sms_session mysql_query("INSERT INTO sessions (ANR,SESSLINK,GUELTIG) VALUES ('$ANR','zeiten.php','$datesession')");
    
//--Eintrag in smsout--------------------------------------------    
    
$sms_backup mysql_query("INSERT INTO smsout (UID,PW,PID,ANR,ZNR,MSG,ID,SZP,SMSC,DATE,BILL,Projekt) VALUES ('$UID','$UPW','$PID','$ZNR','$ANR','$MSGOUT','$ID','$SZP','$SMSC','$date_now','$BILL','$PROJEKT')");
    
    
$update2 mysql_query("UPDATE zielzeit SET AKTIV='0' WHERE LID='$LID'");
    
    
$link2="UID=$UID&UPW=$UPW&PID=$PID&ZNR=$ANR&BILL=$BILL&MSG=$MSGOUT";
    
$output1=file("http://smserver.com/send.php?$link2");
    
usleep(3333);
}
mysql_close();

?>
Das war nun der Cronjob, der die Teilnehmer benachrichtigt.
Mit usleep() wollt ich das ganze etwas abbremsen, damit der SMS-Server mitkommt...

Wenn nun eine SMS kommt wird die an folgendes Script weitergeleitet und dort verarbeitet:

PHP-Code:
<?php
include("connect/con1.inc.php");

$date_now date("Y-m-d H:i:s");

$heute date("Y-m-d");

$gestern date("Y-m-d"time()-1*60*60*24);

$MSG $_GET['MSG'];

//--Funktion zur entfernung von Leer, und Sonderzeichen wird inkludiert ----------
include("sonderzeichen.inc.php");
$STARTNR sonderzeichen($MSG);

//*********
$BILL=0;
$PROJEKT=15;
//*********

//--Auslesen der Registrierungsdatenbank -----------------------------------
$result mysql_query("SELECT VNR,LID,NN FROM zielzeit WHERE ANR='$ANR' and AKTIV='0' ORDER BY LID DESC")OR die(mysql_error());
$reihen mysql_num_rows($result);

//-- Wenn mehr als ein Datensatz kommt hier weiter ----------------->>

if($reihen != 1){

    while(
$zeige mysql_fetch_assoc($result)){
    
        
$VNR $zeige['VNR'];
        
$SATZ_ID $zeige['LID'];
        
$NAME $zeige['NN'];
        include(
"connect/con2.inc.php");
        
$laufdatum mysql_query("SELECT datum FROM veranstaltung WHERE veranstnr='$VNR'")OR die(mysql_error());
        
$datumcheck mysql_fetch_assoc($laufdatum);
        
$eventdatum $datumcheck['datum'];
        
        
//-- Wenn Eventdatum von heute oder gestern hier weiter --------------->>    
    
        
if(($eventdatum == $heute) || ($eventdatum == $gestern)){
        
            include(
"connect/con2.inc.php");
            
$zeiten mysql_query("SELECT vorname,nachname,zeit,kmh,minkm FROM ergebnisse WHERE stnr like '$STARTNR' and nachname like '$NAME' ORDER BY veranstnr DESC LIMIT 1")OR die(mysql_error());
            
$num2 mysql_num_rows($zeiten);
            
            
//-- Bei Rückgabe von 1 Datensatz hier weiter ----------------->>        
        
            
if($num2 == 1){
        
                
$ergebnisse mysql_fetch_assoc($zeiten);
                
$vn $ergebnisse['vorname'];
                
$nn $ergebnisse['nachname'];
                
$zeit $ergebnisse['zeit'];
                
$kmh $ergebnisse['kmh'];
                
$minkm $ergebnisse['minkm'];

                
$ausgabe "Name:".$vn." ".$nn."\nNr: ".$STARTNR."\nZeit: ".$zeit."\nkm/h: ".$kmh."\nmin/km: ".$minkm."\n";
                
$MSGOUT urlencode($ausgabe);
    
                
                include(
"connect/con1.inc.php");
                
//--Eintrag in smsout--------------------------------------------    
                
$sms_backup mysql_query("INSERT INTO smsout (UID,PW,PID,ANR,ZNR,MSG,ID,SZP,SMSC,DATE,BILL,Projekt) VALUES ('$UID','$UPW','$PID','$ZNR','$ANR','$MSGOUT','$ID','$SZP','$SMSC','$date_now','$BILL','$PROJEKT')");
    
                
$zlink "UID=$UID&UPW=$UPW&PID=$PID&ZNR=$ANR&BILL=$BILL&MSG=$MSGOUT";
                
$zoutput file("http://smserver.com/send.php?$link2");

//--STATUS wird auf 1 gesetzt als Sendebestätigung-------------------------------------
                
$status_backup mysql_query("UPDATE zielzeit SET STATUS='1' WHERE LID='$SATZ_ID'");
                
mysql_close();
        
//-- Kommt mehr als ein Satz Fehlermeldung ------------------------->>
        
            
}else{
        
                
$error "Abfrage ohne Ergebnis - Bitte senden Sie Ihre Startnummer in einigen Minuten erneut, es entstehen keine Kosten";
                
$MSGOUT urlencode($error);
    
                
                include(
"connect/con2.inc.php");
                
//--Eintrag in smsout-------------------------------------------->>    
                
$sms_backup2 mysql_query("INSERT INTO smsout (UID,PW,PID,ANR,ZNR,MSG,ID,SZP,SMSC,DATE,BILL,Projekt) VALUES ('$UID','$UPW','$PID','$ZNR','$ANR','$MSGOUT','$ID','$SZP','$SMSC','$date_now','$BILL','$PROJEKT')");
                
$zlink "UID=$UID&UPW=$UPW&PID=$PID&ZNR=$ANR&BILL=$BILL&MSG=$MSGOUT";
                
$zoutput file("http://smserver.com/send.php?$link2");
        
                }
        }        
    }
}else{
        
        
$zeige mysql_fetch_assoc($result);
        
$VNR $zeige['VNR']; 
        
$SATZ_ID $zeige['LID'];
        
$NAME $zeige['NN'];
        
        include(
"connect/con1.inc.php");
        
$zeiten mysql_query("SELECT vorname,nachname,zeit,kmh,minkm FROM ergebnisse WHERE stnr like '$STARTNR' and nachname like '$NAME' ORDER BY veranstnr DESC LIMIT 1");
        
$num3 mysql_num_rows($zeiten);
        
        if(
$num3 == 1){
        
$ergebnisse mysql_fetch_assoc($zeiten);
        
$vn $ergebnisse['vorname'];
        
$nn $ergebnisse['nachname'];
        
$zeit $ergebnisse['zeit'];
        
$kmh $ergebnisse['kmh'];
        
$minkm $ergebnisse['minkm'];

        
$ausgabe "Name:".$vn." ".$nn."\nNr: ".$STARTNR."\nZeit: ".$zeit."\nkm/h: ".$kmh."\nmin/km: ".$minkm."\n";
        
$MSGOUT urlencode($ausgabe);
        
        
        include(
"connect/con2.inc.php");
        
//--Eintrag in smsout-------------------------------------------->>    
        
$sms_backup mysql_query("INSERT INTO smsout (UID,PW,PID,ANR,ZNR,MSG,ID,SZP,SMSC,DATE,BILL,Projekt) VALUES ('$UID','$UPW','$PID','$ZNR','$ANR','$MSGOUT','$ID','$SZP','$SMSC','$date_now','$BILL','$PROJEKT')");
    
        
$zlink "UID=$UID&UPW=$UPW&PID=$PID&ZNR=$ANR&BILL=$BILL&MSG=$MSGOUT";
        
$zoutput file("http://smserver.com/send.php?$link2");

//--STATUS wird auf 1 gesetzt als Sendebestätigung------------------------------------->>
        
$status_backup mysql_query("UPDATE zielzeit SET STATUS='1' WHERE LID='$SATZ_ID'");
        
mysql_close();
        
        }else{
        
            
$error "Abfrage ohne Ergebnis - Bitte senden Sie Ihre Startnummer in einigen Minuten erneut, es entstehen keine Kosten";
            
$MSGOUT urlencode($error);
    
            
            include(
"connect/con2.inc.php");
            
//--Eintrag in smsout-------------------------------------------->>    
            
$sms_backup2 mysql_query("INSERT INTO smsout (UID,PW,PID,ANR,ZNR,MSG,ID,SZP,SMSC,DATE,BILL,Projekt) VALUES ('$UID','$UPW','$PID','$ZNR','$ANR','$MSGOUT','$ID','$SZP','$SMSC','$date_now','$BILL','$PROJEKT')");
            
$zlink "UID=$UID&UPW=$UPW&PID=$PID&ZNR=$ANR&BILL=$BILL&MSG=$MSGOUT";
            
$zoutput file("http://smserver.com/send.php?$link2");
        
        }


}
mysql_close();

?>
Also, im voraus schonmal vielen Dank !
madSoul ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.09.2005, 17:26  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wäre vielleicht mal interessant zu erfahren, was genau abgeschmiert ist. die datenbank? der apache? was steht in den logfiles?
wie lange brauchen die einzelnen selects?
wie lauten die benchmarks im ruhezustand?
wie sieht der speicherverbrauch aus?
wie viele leute haben versucht, gleichzeitig auf den server zuzugreifen? irgendwann einmal ist auch schluss mit optimieren, dann muss das ganze auf mehrere maschinen verteilt werden.

die hälfte deiner "auswertungen", die du hier mit php machst, könntest du mit nativen mysql-queries bereits erledigen, ohne überhaupt php damit zu belästigen (meist ist php das langsamere im gespann). stichwort INSERT SELECT und updates über mehrere tabellen.
dafür kommt's aber darauf an, welche mysql-version verwendet wird und wie die datenbankdaten genau aussehen, wie die verteilung der indizes ist und mit welcher php-version du arbeitest.
axo ist offline   Mit Zitat antworten
Alt 08.09.2005, 08:22  
Erfahrener Benutzer
 
Registriert seit: 08.08.2005
Beiträge: 272
madSoul
Standard

UFFZ... !?

Da bin ich jetzt echt überfragt...
Wie man sicher an dem Script sieht bin ich nicht 100% Sattelfest...
schon garnicht in MySQL.
Die Datenbank ist abgeschmiert bei rund 35.000 Seitenzugriffen.

Wie kann man etwas auf mehrere Maschinen verteilen ? Eigene Server ?

Wie kann ich mir denn die Geschwindigkeit des Scripts anzeigen lassen ?
__________________
it´s not a bug - it´s a feature...
madSoul ist offline   Mit Zitat antworten
Alt 08.09.2005, 09:34  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

35.000 zugriffe pro was? sekunde? minute? stunde?

wenn du 35.000 zugriffe pro minute hast, würde ich vorschlagen, du brauchst mehrere server. zumindest einen, der sich um den cronjob bemüht, einen, auf dem die datenbank liegt und einen, der sich um die insert-statements kümmert.

dann jedes skript perfekt abstimmen und rechenzeit einsparen.
es gibt genügend tools, um die performance von serversystemen zu testen.

bei 'pro stunde' kann man noch was am skript optimieren, in einem halben jahr musst aber trotzdem auf mehrere server umsteigen.

und wenn du keine ahnung hast, wie du überhaupt benchmarken kannst, würde ich vorschlagen, dass du dir jemanden suchst, der wirklich ahnung davon hat, und dir das ganze sauber neuprogrammieren und optimieren lässt. die skripte sind ja simpel, aber bei so vielen zugriffen geht alles in die knie, und da braucht man andere werkzeuge als nur die optimierung von php-code.

dazu muss man die hardware unter die lupe nehmen, die server-feinabstimmung, die feinabstimmung von mysql, die datenbank-indizes, das speichermanagement und so weiter und so fort, es ist also aufwändig.

grüße
axo
axo ist offline   Mit Zitat antworten
Alt 08.09.2005, 09:37  
Erfahrener Benutzer
 
Registriert seit: 08.08.2005
Beiträge: 272
madSoul
Standard

Ich danke Dir axo, werd das wohl machen müssen...

Schönen tag noch !
__________________
it´s not a bug - it´s a feature...
madSoul ist offline   Mit Zitat antworten
Alt 08.09.2005, 17:58  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Fürs profiling bieten sich apd oder die üblichen Debugger wie xdebug oder gdb an.

Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum. Bitte beim nächsten Mal darauf achten..

Bemerkung:
Die gestellte Frage entspricht nicht dem Wissensstand eines Profis. Dazu: http://www.phpfriend.de/forum/viewtopic.php?t=21431

moved to PHP - Fortgeschrittene
__________________
mod = master of disaster
Waq 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
[Erledigt] Firefox / IE - Probleme HTML, Usability und Barrierefreiheit 5 20.07.2009 17:04
ImageMagick Performance Problem M3g4Star PHP Tipps 2006 1 30.11.2006 09:35
Probleme bei Speicherung von serialize() Strings Manni2k PHP Tipps 2006 13 15.10.2006 15:06
performance probleme in der community phoetron PHP-Fortgeschrittene 15 25.07.2006 08:37
Probleme mit Rechteverteilung chmod() per script!!!??? Funky_ PHP Tipps 2006 7 17.06.2006 17:10
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
Vererbung von Klassen und Performance ggfan PHP Tipps 2006 5 05.03.2006 12:00
Probleme beim Datenupload zu meiner Datenbank Datenbanken 3 05.09.2005 19:47
Probleme mit Sonderzeichen... Datenbanken 1 02.08.2005 23:37
[Erledigt] hilfe! probleme mit... PHP Tipps 2005 4 12.04.2005 22:55
[Erledigt] CSV Größe macht Probleme mit php PHP Tipps 2005 5 15.03.2005 21:29
[Erledigt] Technische Probleme mit Sessions PHP-Fortgeschrittene 4 18.11.2004 14:45
[Erledigt] Probleme mit Fremdsprachen HTML, Usability und Barrierefreiheit 2 21.09.2004 17:11
[Erledigt] PHP Performance PHP-Fortgeschrittene 11 13.09.2004 07:25
PHP Bilder in DB / Probleme bei Änderung PHP-Fortgeschrittene 1 05.06.2004 11:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
\smsout\ problem

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