Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[PHP/SQL]query zorgt soms voor trage verwerking in database

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het onderstaande PHP-script (PHP-versie: 5.1.6) heeft als doel om via een formulier een aantal items in database (MYSQL 5.1) op te slaan. Het invulformulier heeft veel weg van het principe van een weblog. Het verzenden ....... een nieuw logboek_id wordt in de SQL-tabel aangemaakt en als de query succesvol is afgerond wordt er een mail gestuurd (mits het 'type' niet COR is = COR staat voor gecorrigeerd bericht).

Probleem is dat bij het verzenden soms de pagina bij het verzenden lijkt te hangen.......als ik dan bij de processen in PHPMyAdmin kijk dan zie ik een proces dat in de slaapstand ("sleep") staat (soms tot wel 40 seconden lang). Ik heb geen idee wat de oorzaak daarvan is. Als ik hetzelfde script op een lokale webserver draai dan ondervind ik totaal geen problemen.

De meldingen van de PHPMyAdmin (gecheckt nadat de browser zo'n 30 seconden hing):
* Database = "" en command = "query" en "tijd" = ""
* Database = "log" en command = "sleep" en "tijd" = "34"

Is het een script (PHP) of een database-probleem........wie o wie kan/wil mij helpen dit (hoofdbrekende) probleem op te lossen........

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
            $sql_insertonsubmit = "
            INSERT INTO logboek
            (logboek_id, created_on, user, user_mod, sectionID, categoryID , title, comments, email, type)
            VALUES (
            '".mysql_real_escape_string($_POST['logboek_id'])."',
            NOW(),
            '".mysql_real_escape_string($_SESSION['username'])."',
            '',
            '".mysql_real_escape_string($_REQUEST['sectionID'])."',
            '".mysql_real_escape_string($_POST['categoryID'])."',
            '".mysql_real_escape_string($_POST['title'])."',
            '".mysql_real_escape_string($_POST['comments'])."',
            '".mysql_real_escape_string($_POST['email'])."',
            ''
            )
            ON DUPLICATE KEY UPDATE";
     if ($type == "COR"){
            $sql_insertonsubmit .=" modified_on=NOW(),";
            $sql_insertonsubmit .=" user_mod='".mysql_real_escape_string($_SESSION['username'])."',";
        }
        else {
            $sql_insertonsubmit .=" created_on=NOW(),";
        }
        
            $sql_insertonsubmit .="     
            categoryID='".mysql_real_escape_string($_POST['categoryID'])."',
            title='".mysql_real_escape_string($_POST['title'])."',
            comments='".mysql_real_escape_string($_POST['comments'])."',
            email='".mysql_real_escape_string($_POST['email'])."',";
        if ($type == "COR"){
            $sql_insertonsubmit .=" type='COR'";
        }
        else {
            $sql_insertonsubmit .=" type=''";
        }                   

        // Perform Query
        $result = mysql_query($sql_insertonsubmit);
        
        // Check result
        if (!$result) {
            $message  = 'Invalid query: ' . mysql_error() . "\n";
            die($message);
        }
        else {
        
        $sql_alert = "Het bericht is verzonden!<BR>";

    
        ?>
            <script type="text/javascript">     
                setTimeout("window.close();",3000);
          </script>
        <?php       
        
        if ($type!="COR" && in_array($categoryID,$notify_catid)){               
            // BEGIN - SEND MAIL
            $subject = "Logboek " . $section_items[$sectionID] . ": " . $_POST['title']; 
            $message = "*** EMAIL NOTIFICATIE ***<BR><BR>";
            $message .= "Formulier: \"Logboek " . $section_items[$sectionID] . "\"<BR>";
            $message .= "Categorie: \"" . $category_items[$categoryID] . "\"<BR>";
            $message .= "Onderwerp: " . $_POST['title'] . " (geplaatst door " . $_SESSION['username'] . ")<BR>";
            $message .= "Inhoud   : <em>zie hieronder</em><BR><BR>";
            $message .= $_POST['comments'];         
            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
            $headers .= 'From:' . $from . "\r\n";
            $headers .= 'Cc:' . $cc . "\r\n";
            $headers .= 'Reply-To:' . $from . "\r\n";
            
        mail($to,$subject,$message,$headers);
        //echo "Mail Sent.";    
            $sql_alert .= "<em>(en er is een mail verstuurd)</em><BR>";
            // END - SEND MAIL  
        }
        
        $sql_alert .= "<BR>Dit scherm sluit automatisch na 3 seconden";
        }       
    }
}

[ Voor 0% gewijzigd door RobIII op 09-11-2012 15:31 . Reden: Code tags gefixed ]


  • Merethil
  • Registratie: December 2008
  • Laatst online: 05:37
Als je geen problemen ondervindt op een lokale database moet het bij de database zelf liggen.
Best makkelijk, toch? Huur je ruimte op een gedeelde server?

Edit: Zet trouwens je PHP even tussen normale code-tags, oftewel: [PHP.] [/PHP.]
Alleen dan zonder de puntjes achter de laatste p's.

[ Voor 33% gewijzigd door Merethil op 09-11-2012 15:13 ]


  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Hoort de mail functie niet voor enige output te komen?

telefoontoestel


  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 01:11

Acid_Burn

uhuh

Nee, waarom zou dat dan moeten volgens jou?

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Wat is exact je probleem?

Wat er gebeurt is simpelweg dat vanwege reden x/y/z je mail-commando traag is, daar wacht php op.
En omdat jij niet expliciet je dbase connectie sluit wordt die pas gesloten nadat het php-script compleet klaar is dus die blijft in een sleep-state hangen omdat je er geen commando's meer naar toe stuurt maar de connectie ook nog niet gesloten hebt.

Wellicht dat je hoster een extreem traag spam-filter oid heeft (of dat die last heeft van drukte oid) maar in principe is het allemaal kloppend.

Verwijderd

Topicstarter
Gomez12 schreef op vrijdag 09 november 2012 @ 19:30:

Wat er gebeurt is simpelweg dat vanwege reden x/y/z je mail-commando traag is, daar wacht php op.
En omdat jij niet expliciet je dbase connectie sluit wordt die pas gesloten nadat het php-script compleet klaar is dus die blijft in een sleep-state hangen omdat je er geen commando's meer naar toe stuurt maar de connectie ook nog niet gesloten hebt.
Lijkt inderdaad de meest logische verklaring..........ik kan vòòr het verzenden van de mail een mysql_close toevoegen, maar eh.......is er ook een manier om ervoor te zorgen dat de mailverzending toch plaatsvindt zonder dat de gebruiker een 'hangende' browser ervaart?!


Thx,
John

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Iedereen gokt maar wat. Meet gewoon wat de bottleneck is, bijvoorbeeld dmv xdebug, of desnoods lekker spartaans door een paar keer microtime() te printen.

Overigens, voor een script zoals je nu laat zien hoef je je niet druk te maken om mysql_close(). Als in, je doet geen minutenl lange berekeningen nadat je je db contents opgehaald hebt. ;) En als het mailen te lang duurt moet je vooral dat aanpakken en niet het symptoom.

[ Voor 25% gewijzigd door Voutloos op 09-11-2012 22:26 ]

{signature}


Verwijderd

Topicstarter
Voutloos schreef op vrijdag 09 november 2012 @ 22:24:

En als het mailen te lang duurt moet je vooral dat aanpakken en niet het symptoom.
Thx voor je reactie.......

Heb je een tip voor mij hoe ik het mailen dan zou kunnen aanpakken?!

  • Gtoniser
  • Registratie: Januari 2008
  • Laatst online: 02:47
Verwijderd schreef op vrijdag 09 november 2012 @ 22:30:
[...]


Thx voor je reactie.......

Heb je een tip voor mij hoe ik het mailen dan zou kunnen aanpakken?!
Bijvoorbeeld de PHPMailer class gebruiken met een smtp server (gmail bv)

Verwijderd

Topicstarter
En als ik in eerste instantie toch wil proberen om de standaard mail functie toe te passen........is er dan toch een manier om ervoor te zorgen dat de mailverzending toch plaatsvindt zonder dat de gebruiker een 'hangende' browser ervaart?!

  • Donderpoes
  • Registratie: April 2011
  • Laatst online: 11-05 23:09
Je zou je mail eerst in de database weg kunnen schrijven en bijvoorbeeld met behulp van een cronjob de weggeschreven mails versturen.

Verwijderd

Topicstarter
Heb inmiddels PHPmailer (via Gmail smtp-server) gebruikt (op een lokale webserver thuis)..........dat gaat uitstekend (binnen 2 seconden is het bericht in de database geplaatst en is ook de mail verzonden).

Probleem is dus hoogstwaarschijnlijk het (trage) SPAM-filter op mijn werk, waardoor PHP mail er frequent 20 seconden of langer over doet om een mail te verzenden (PHP-mailer d.m.v. Gmail is op mijn werk helaas niet te gebruiken, dus ook niet te testen).

Ik ga verder op onderzoek uit.......thx voor de hulp!!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 10:31
Waarom is het niet te gebruiken?

Overigens is SwiftMailer volgens mij wat recenter, en kan je ook wat verschillende verzendmethodes proberen (stmp/mail/sendmail, smtp kan ook via localhost meestal gewoon)

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op zaterdag 10 november 2012 @ 16:20:
Probleem is dus hoogstwaarschijnlijk het (trage) SPAM-filter op mijn werk, waardoor PHP mail er frequent 20 seconden of langer over doet om een mail te verzenden
Het probleem is niet je trage SPAM-filter, maar simpelweg een trage mailer.

Wat je ook gewoon kan doen is op die bak gewoon een sendmail oid installeren die alles redirect naar je normale mailserver. Dan doet sendmail / postfix het hele queuing stuk voor je.
Pagina: 1