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

[php/mysql] Mysql geeft error 2006

Pagina: 1
Acties:

  • Damic
  • Registratie: September 2003
  • Laatst online: 21:00

Damic

Tijd voor Jasmijn thee

Topicstarter
Ok heb een raar probleem. De webserver dat ik gebruik werpt een 2006 error op als ik een simpel script run, maar de error komt uit het deel dat helemaal geen db query's meer uitvoert.

Het deel waar hij de error op gooit is het email deel dat ik gebruik van phpbb3 dus dat zit wel snor. Het deel ervoor zijn 2 of meer query's achter elkaar, 1 gewone query en 1 for loopje (in dit geval 1x, maximum 10x), dus dat zijn 2 query's.

De code: *snip* als ik lijn 139 tot en met 154 in commentaar zet vliegt ie erdoor zodus het is die sendmail() functie waar hij overstruikelt, maar waarom die Error 2006 op mysql?

Iemand ene idee?

[ Voor 2% gewijzigd door RobIII op 13-03-2013 01:13 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 22:55
Bij Error 2006 is je mysql server weggelopen. Kan zijn door een timeout die aan de serverkant vrij laag staat, maar kan ook zijn dat je mailfunctie dusdanig verkeer genereert waardoor je netwerk dusdanig slecht presteert dat packets bedoeld voor je MySQL server niet meer op tijd aankomen bij de server.

  • Damic
  • Registratie: September 2003
  • Laatst online: 21:00

Damic

Tijd voor Jasmijn thee

Topicstarter
Bedankt voor het antwoord, maar de query's zijn uitgevoerd alles staat keurig zonder fouten in de db. Welk verkeer trouwens? Zoals ik al zei genereert de mail functie geen db verkeer. Aan een timeout had ik ook al gedacht ik dacht dat de timeout waarde op 1 minuut werd gezet en daarmee dan de mysql een timeout geeft om dat zijn verbinding niet gesloten word :/


aaargh

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 22:55
Lijkt me dat het versturen van mail wel dataverkeer genereert, maar of dat zo gek gaat dat je hele verbinding naar databaseserver platgetrokken wordt?

Je opent een connectie, vervolgens doe je wat queries en vervolgens ga je mailtjes sturen in een loop. Geen idee hoe lang dat duurt, maar kan best zijn dat als dat 60s duurt en na het sturen van die mails nog een aanroep naar de database is, al is het ook maar het sluiten van je connectie nadat je hele script is afgelopen, dat die voor je error 2006 zorgt.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

De functie send_mail(), die waarschijnlijk in of via "includes/overall_header.php" is gedefiniëerd, doet het daadwerkelijke mailen. Als in die functie de fout optreedt, moet je het in die functie zoeken. Toon de (relevante) code daarvan eens.

Wellicht wil je ook die mailadressen uit het geposte script halen.

[ Voor 13% gewijzigd door CodeCaster op 13-03-2013 00:48 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als je code post, beperk je dan tot relevante(!) delen(!) code; een compleet script dumpen en ons dan laten zoeken naar de fout is niet de bedoeling. M.a.w.: ontdoe je script(s) van alle overbodige zaken (ik noem even de htmlent() functie en de ellenlange array-assignments in je code als voorbeeld: die zijn totaal irrelevant voor je probleem) en post die middels code tags in je topic en dus niet op externe sites als pastebin. Als vandaag-of-morgen pastebin (of random-externe-site-X) besluit ermee te stoppen of andere URL's te gaan gebruiken is je topic waardeloos omdat niemand je code meer kan inzien. Niets zo frustrerend als je middels een search op een topic stuit dat mogelijk gerelateerd is aan je probleem om er dan achter te komen dat de essentie van 't topic niet meer te vinden is; dat moet je zelf ook ooit ervaren hebben, niet? ;) Daarbij is het handig als je zaken als e-mail adressen, wachtwoorden etc. die niet relevant zijn voor 't eigenlijke probleem 'verbergt' door, bijv., van e-mail adressen 'foo@domain.com' te maken of van wachtwoorden iets als '******'. Zullen de eigenaren van die mailadressen leuk vinden nu ze zo lekker publiek op pastebin staan en lekker geindexeerd kunnen worden voor spamdoeleinden ;)

Wat betreft je probleem: begin eens bij stap 1: debuggen (Debuggen: Hoe doe ik dat?).

Verder: voor het omzetten van tekens naar html entities zijn gewoon bestaande functies, gebruik die dan ook, en html entities zijn geenszins een vorm van SQL injection preventie dus daar moet je zéker ook naar kijken en, bijv., Parametrized Queries overwegen als alternatief. Encoden/escapen naar, bijvoorbeeld, HTML entities maar ook SQL parameters, RTF, CSV of wat dan ook doe je altijd context afhankelijk. Het is dus niet slim om meteen al je POST parameters door HTML entities te raggen. Als je ze later in je DB wil stoppen moet je ze, en dat doe je dus ook, weer overal gaan lopen html_entity_decode'n. Bewaar de waardes (lees: user-input) gewoon as-is en wanneer je ze in een HTML context gebruikt (en bijv. naar de browser gaat sturen) ga je ze pas door htmlentities() halen. En als je, zoals jij doet, een template-engine gebruikt: gebruik dan in de template gewoon de mogelijkheid om aan te geven welke velden met HTML entites escaped moeten worden; dan weet je ook zeker dat 't maar op 1 plaats gebeurd. Voor je het weet doe je 't 2 of 3 keer of nog vaker en dat geeft een puinhoop en anders op z'n allerminst verwarring. Ik weet niet waar 'send_mail' vandaan komt (als in: welk framework, if any, gebruik je?) maar hou er rekening mee dat ook daar (als in: een e-mail) 't een-en-ander gecontroleerd moet worden om te voorkomen dat kwaadwillenden headers gaan lopen injecten oid. Dus verzeker je er van dat die functie dat correct afhandelt.

[edit]
Ik vermoed, afgaand op $db-Query, $db->nextid, message_die() en nog wat zaken dat je phpBB gebruikt? In dat geval moet je, o.a., eens kijken naar sql_escape wat ook staat aangegeven bij sql_query:
If you want to use any variable in your query, you should use (If it isn't a integer) $db->sql_escape() to be sure the data is safe.
Los daarvan lijkt me dat spul allemaal nog mysql_ functies te gebruiken die inmiddels allemaal deprecated zijn; ik zeg 't maar zodat je 't in je achterhoofd kunt houden. Het is niet direct een groot probleem, maar toch.

Ik kon wat betreft m'n eerdere opmerking over 'html escaping in de template i.p.v. in de code' niet zo snel iets in hun documentatie vinden dat er op wees dat dat ook daadwerkelijk kan in hun templating engine dus wat dat betreft zit je waarschijnlijk goed om die escaping aan de "code kant" te doen. Neemt niet weg dat je nog steeds niet zomaar je POST values meteen door htmlent(ities) moet raggen maar dat doet waar de context om een htmlent(itites) vraagt.

Ik kan de send_mail() functie in de PHPBB documentatie zo snel niet vinden dus die opmerking over mogelijke header injection staat wel nog steeds.

[ Voor 71% gewijzigd door RobIII op 13-03-2013 01:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Damic
  • Registratie: September 2003
  • Laatst online: 21:00

Damic

Tijd voor Jasmijn thee

Topicstarter
Je moet maar een proberen te debuggen op een server waar je niets op kunt ;) en op 2 andere webservers werkte het wel en deze niet. Woops wat betreft de e-mails, dom van me.


Blijkbaar heb ik de inhoud van send_mail() genomen uit phpbb3 ofzo, in ieder geval gestript van het onnodige en dat in een functie gedumpt.
Eens zien:
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
function send_mail($email_var_ary, $template_name, $subject, $bcc_list_ary)
{
    global $config, $user, $phpbb_root_path;

    // Sixty second limit
    @set_time_limit(60);

    //
    // Let's do some checking to make sure that mass mail functions
    // are working in win32 versions of php.
    //
    if (preg_match('/[c-z]:\\\.*/i', getenv('PATH')) && !$config['smtp_delivery'])
    {
        $ini_val = (@phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var';
        // We are running on windows, force delivery to use our smtp functions
        // since php's are broken by default
        $config['smtp_delivery'] = 1;
        $config['smtp_host'] = @$ini_val('SMTP');
    }

    if(!is_array($email_var_ary)){$email_var_ary=array();}
    if (sizeof($bcc_list_ary))
    {
        include($phpbb_root_path . './includes/functions_messenger.php');
        $emailer = new messenger(FALSE);

        $script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($config['script_path']));
//      $script_name = ($script_name == '') ? $script_name . "?area=viewtopic" : '';
        $server_name = trim($config['server_name']);
        $server_protocol = ($config['cookie_secure']) ? 'https://' : 'http://';
        $server_port = ($config['server_port'] <> 80) ? ':' . trim($config['server_port']) . '/' : '/';
        $emailer->from($config['board_email']);
        $emailer->replyto($config['board_email']);

        @reset($bcc_list_ary);
        while (list($bcc_list,$user_lang) = each($bcc_list_ary))
        {
            $emailer->template($template_name, $user_lang);
            $emailer->bcc($bcc_list);

            // The Topic_reply_notification lang string below will be used
            // if for some reason the mail template subject cannot be read
            // ... note it will not necessarily be in the posters own language!
            $emailer->subject("\n $subject");

            // This is a nasty kludge to remove the username var ... till (if?)
            // translators update their templates
            $emailer->msg = preg_replace('#[ ]?{USERNAME}#', '', $emailer->msg);
            $temp=array(    'L_USERNAME'    => $user->data['username'], );
            $email_var_ary = array_merge($email_var_ary,$temp);
            $emailer->assign_vars($email_var_ary);
            if(!($result=$emailer->send(NOTIFY_EMAIL)))
            {
                echo $result;
            }
        }
    }
}
En hier de main code ontdaan van de niet nodige dingen:
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
if(isset($_POST['send']))
{
        $sql = '';//een sql string
        if( !($result = $db->sql_query($sql)))
        {
            message_die(GENERAL_ERROR, 'Could not insert new user data', '', __LINE__, __FILE__);
        }

        $sql_uid =  $db->sql_nextid();

        for($i=1;$i<=$tmp['car_count'];$i++)
        {
            $sql = "'";//een sql string
            if( !($result = $db->sql_query($sql)))
            {
                message_die(GENERAL_ERROR, 'Could not insert new car data', '', __LINE__, __FILE__);
            }
        }
//disconnect from db
$db->sql_close();
// hier faalt hij
        send_mail(array(    'een'=>'array'),'rotary','Nieuwe registratie',array('naam@domain.extentie'=>'nl'));
// reConnect to DB
require($phpbb_root_path . 'config.' . $phpEx);
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false);
unset($dbpasswd);unset($dbhost);unset($dbuser);unset($dbname);unset($dbport);
        $template->display('page');
        return;
    }
}

[ Voor 4% gewijzigd door Damic op 14-03-2013 01:33 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Damic schreef op donderdag 14 maart 2013 @ 01:21:
Je moet maar een proberen te debuggen op een server waar je niets op kunt ;)
Ach gussie jochie toch... :P
En je kunt dus geen var_dump() doen? Op strategische plekken een echo zetten in de functie die faalt?
Damic schreef op donderdag 14 maart 2013 @ 01:21:
op 2 andere webservers werkte het wel en deze niet
Nah, if all else fails: wat zijn de verschillen?
Damic schreef op donderdag 14 maart 2013 @ 01:21:
Blijkbaar heb ik de inhoud van send_mail() genomen uit phpbb3 ofzo, in ieder geval gestript van het onnodige en dat in een functie gedumpt.
En, zoals gezegd, heb je daar al eens op strategische plekken een echo o.i.d. (eventueel gevolgd door een exit()) gezet?

Verder zijn we niet bepaald verzot op 't verlenen van support op code van derden; daarvoor mag je doorgaans die derden benaderen. We hebben 't in de Devschuur® over zélf programmeren. Dan weet je namelijk ook (beter) wat de code doet, waar mogelijke problemen zitten enz. Nu heb je wat knip/plak-werk gedaan en zit je met de gebakken peren; hence het bestaan van dit topic. Ik had nog hoop dat send_mail iets van jezelf was, maar dat blijkt dus helaas niet zo te zijn. Dat betekent echter wel dat je vanaf nu een tandje bij zult moeten zetten in de "eigen inzet" afdeling want ik sta 't topic nu nog oogluikend toe op voorwaarde dat je zelf aan 't debuggen gaat en met concrete informatie komt. Ik wijs je dan ook graag nogmaals op de kern van mijn vorige post:
RobIII schreef op woensdag 13 maart 2013 @ 01:17:
Wat betreft je probleem: begin eens bij stap 1: debuggen (Debuggen: Hoe doe ik dat?).

[ Voor 38% gewijzigd door RobIII op 14-03-2013 01:43 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Damic
  • Registratie: September 2003
  • Laatst online: 21:00

Damic

Tijd voor Jasmijn thee

Topicstarter
send_mail() functie werkt, heeft 2 jaar geleden in dezelfde vorm ook gewerkt ;) nu ben ik wat aan het testen met de nieuwe delen er tussen ($db->sql_close) en dan gaat hij wel over de send_mail(), nu nog terug ingelogd geraken.

Edit: na wat gestoei met het zoeken waarom dat ik niet kon herinloggen na de send_mail() eens alles doorgespit en in functions_messenger.php staat add_log(), deze opgezocht en dat maakt dus nog verbinding met de db, daar het volgende ingezet
PHP:
1
2
3
4
5
6
7
8
if(!$db->db_connect_id)
{
    // reConnect to DB
    global $phpbb_root_path, $phpEx;
    include($phpbb_root_path . 'config.' . $phpEx);
    $db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, false);
    unset($dbpasswd,$dbhost,$dbuser,$dbname,$dbport);
}
en toen kreeg ik een mooie error in het log boek
a:1:{i:0;s:456:"<strong>EMAIL/SMTP</strong><br /><em>/index.php</em><br /><br />Verbinding met SMTP-server mislukt : 110 : Connection timed out<br /><br />&lt;b&gt;[phpBB Debug] PHP Notice&lt;/b&gt;: in file &lt;b&gt;/includes/functions_messenger.php&lt;/b&gt; on line &lt;b&gt;910&lt;/b&gt;: &lt;b&gt;fsockopen() [&lt;a href='function.fsockopen'&gt;function.fsockopen&lt;/a&gt;]: unable to connect to relay.dommel.be:25 (Connection timed out)&lt;/b&gt;&lt;br /&gt;
<br />";}
Timeout op de smtp server :/ weird hier doet hij het, dat eens verder gaan bekijken.

Toch bedankt voor de hulp jongens :)

[ Voor 72% gewijzigd door Damic op 14-03-2013 02:58 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • JJerome
  • Registratie: Oktober 2007
  • Laatst online: 19-11 14:22
Ik neem aan dat de server waar het script op draait geen e-mail mag verzenden via de relay van je internetprovider (relay.dommel.be)

  • Damic
  • Registratie: September 2003
  • Laatst online: 21:00

Damic

Tijd voor Jasmijn thee

Topicstarter
Gebruik mijn username en paswoord zodus ik weet het dan niet. Ik kan dat altijd eens vragen aan dommel zelf.

edit: blijkbaar worden dus connecties geblokkeerd die niet op een verbinding zitten van Dommel zelf. Na smtp af te zetten (dus de gewone mail functie gebruiken) gaat alles als een speer.

[ Voor 46% gewijzigd door Damic op 20-03-2013 00:43 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag

Pagina: 1