Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

csv productfeed + MySQL server has gone away

Pagina: 1
Acties:

  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
Ik heb een probleem met het automatische in lezen van een product feed met ongeveer 40.000 producten (+- 40mb)

De melding die ik krijg is: MySQL server has gone away

1. Wij hebben een systeem dat op een aangegeven moment de feed ophaalt
2. Deze dan in de database gaat plaatsen
3. gaat vergelijken met huidige bestand van die klant.

code:
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
if($_GET['id_csv'] != "")
            {
                // CSV INFO OPHALEN
                $query = mysql_query("
                    select
                        a.id,
                        a.csv_url,
                        a.separatorsign,
                        a.enclosuresign,
                        a.encoding,
                        a.id_bedrijf,
                        b.bedrijfsnaam
                    from
                        csv_urls a
                        left join bedrijven b on a.id_bedrijf = b.id
                    where
                        a.ind_affiliate_actief = \"Y\"
                        and a.id = \"".$_GET['id_csv']."\"
                ") or die(mysql_error());
                $aantal = mysql_num_rows($query);
                if($aantal == "0")
                {
                    $query = mysql_query("insert into csv_error_log (log) values (\"".date('d-m-Y H:i')." - Er is geprobeerd een actie uit te voeren bij een inactieve affiliate!\")") or die(mysql_error());
                    echo "<strong>&bull; Er is geprobeerd een actie uit te voeren bij een inactieve affiliate!</strong><br />";
                }
                for($index=0; $index < $aantal; $index++)
                {
                    $row = mysql_fetch_array($query);
                    $csv_id = stripslashes($row['id']);
                    $csv_url = stripslashes($row['csv_url']);
                    $separatorsign = stripslashes($row['separatorsign']);
                    $enclosuresign = stripslashes($row['enclosuresign']);
                    $encoding = stripslashes($row['encoding']);
                    $id_bedrijf = stripslashes($row['id_bedrijf']);
                    $bedrijfsnaam = stripslashes($row['bedrijfsnaam']);
                }


We hebben gene idee waar het aan kan liggen. We hebben een eigen server en hebben sommige zaken zal maximaal staan.

https://www.rbwebpromotions.nl/


  • Noork
  • Registratie: Juni 2001
  • Niet online
De foutmelding lijkt me duidelijk. Zie hier: http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

The most common reason for the MySQL server has gone away error is that the server timed out and closed the connection. Oftewel; de query neemt teveel tijd in beslag om uit te voeren binnen de gestelde limiet. Pas bepaalde settings aan, of splits bovenstaande query op in meerdere delen.

p.s. Ik vind persoonlijk je code niet zo handig te lezen. Waarom gebruik je de variabele $query voor de resultset? $query is handiger te gebruiken bij de daadwerkelijke query. Dus $query = "select blabla". En dan $result = mysql_query($query); Maarja, dat is dus persoonlijk.

[ Voor 29% gewijzigd door Noork op 09-09-2008 14:04 ]


  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
Hier gaan we eens naar kijken.

https://www.rbwebpromotions.nl/


  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
Even nog 1 vraag voor mijn duidelijkheid.
Het heeft dus niks met het op halen te maken van de csv maar puur met het inlezen naar de database ?

[ Voor 3% gewijzigd door NECAnGeL op 09-09-2008 14:02 ]

https://www.rbwebpromotions.nl/


  • Noork
  • Registratie: Juni 2001
  • Niet online
NECAnGeL schreef op dinsdag 09 september 2008 @ 14:01:
Even nog 1 vraag voor mijn duidelijkheid.
Het heeft dus niks met het op halen te maken van de csv maar puur met het inlezen naar de database ?
Je geeft geen code over de eerste stappen toch? Het inlezen van de csv-feed en schrijven naar de db is toch reeds gebeurd?

Nog wat vragen. Waarom doe je de fetch_array in de loop -> $row = mysql_fetch_array($query); ?
Wat heeft de loop voor zin, wanneer je meerdere resultaten terug krijgt? Ik snap hem gewoon niet.

[ Voor 20% gewijzigd door Noork op 09-09-2008 14:08 ]


  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
code:
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
if($_GET['id_csv'] != "")
            {
                // CSV INFO OPHALEN
                $query = mysql_query("
                    select
                        a.id,
                        a.csv_url,
                        a.separatorsign,
                        a.enclosuresign,
                        a.encoding,
                        a.id_bedrijf,
                        b.bedrijfsnaam
                    from
                        csv_urls a
                        left join bedrijven b on a.id_bedrijf = b.id
                    where
                        a.ind_affiliate_actief = \"Y\"
                        and a.id = \"".$_GET['id_csv']."\"
                ") or die(mysql_error());
                $aantal = mysql_num_rows($query);
                if($aantal == "0")
                {
                    $query = mysql_query("insert into csv_error_log (log) values (\"".date('d-m-Y H:i')." - Er is geprobeerd een actie uit te voeren bij een inactieve affiliate!\")") or die(mysql_error());
                    echo "<strong>&bull; Er is geprobeerd een actie uit te voeren bij een inactieve affiliate!</strong><br />";
                }
                for($index=0; $index < $aantal; $index++)
                {
                    $row = mysql_fetch_array($query);
                    $csv_id = stripslashes($row['id']);
                    $csv_url = stripslashes($row['csv_url']);
                    $separatorsign = stripslashes($row['separatorsign']);
                    $enclosuresign = stripslashes($row['enclosuresign']);
                    $encoding = stripslashes($row['encoding']);
                    $id_bedrijf = stripslashes($row['id_bedrijf']);
                    $bedrijfsnaam = stripslashes($row['bedrijfsnaam']);
                }
                
                if($csv_url != "")
                {
                    // LOGBOEK BIJWERKEN MET STARTEN OPDRACHT
                    $query = mysql_query("insert into csv_task_log (log) values (\"".date('d-m-Y H:i')." - ".mysql_real_escape_string($bedrijfsnaam)." - Taak gestart.\")") or die(mysql_error());
                    
                    if (is_valid_url($csv_url))
                    {
                        // OPEN CSV EN SLA OP IN ARRAY
                        $csv_file = $csv_url;
                        $csv_content = array();
                        $csv_content = (parse_csv_file($csv_file, true, $separatorsign, $enclosuresign));

[ Voor 94% gewijzigd door NECAnGeL op 09-09-2008 14:16 ]

https://www.rbwebpromotions.nl/


  • Noork
  • Registratie: Juni 2001
  • Niet online
oh dear, ik vermoed dat er weinig tweakers zijn die 853 regels spaghetti door gaan nemen :')

  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
zal hem inkorten Ik dacht dan kan je alles zien ;)

https://www.rbwebpromotions.nl/


  • Noork
  • Registratie: Juni 2001
  • Niet online
Waarom zou je uberhaupt 40.000 producten realtime gaan updaten middels een gewone php pagina met html output? Kun je zoiets niet regelen met een cronjob die b.v. 500 items per keer verwerkt o.i.d.

  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
Is een idee, waar we naar kunnen kijken.
We hebben momenteel 60 verschilende bedrijven waarvan we de csv inlezen.
maar dit is de eerste die zo groot is en die geeft problemen.

[ Voor 4% gewijzigd door NECAnGeL op 09-09-2008 14:18 ]

https://www.rbwebpromotions.nl/


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Pff, SQL injection, SQL injection SQL injection. Povere stripslashes op de resultset, dus er wordt geklooidcompleet gefaald met escaping, geen return values system calls checken, etc. etc.

En los daarvan is je hele aanpak inefficient.

Zo. :>

{signature}


  • Noork
  • Registratie: Juni 2001
  • Niet online
Lol, ben je nu toevallig aan het testen op de webserver? Je website is verschrikkelijke traag. En bevat foutmeldingen

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /home/admin/domains/allesvoorjehuis.nl/public_html/index.php on line 1452

Ik zou bijna Voutloos aanvullen en zeggen: "stop er mee", maarja dat is ook zo'n dooddoener >:)

Waar loopt de code nu precies vast? Kun je niet gewoon 't een en ander debuggen, je code opdelen, afzonderlijk testen, output controleren etc....

[ Voor 30% gewijzigd door Noork op 09-09-2008 14:22 ]


  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
klopt we zijn druk bezig. gister over gegaan naar een nieuwe server. Die zijn we even aan het instellen.

https://www.rbwebpromotions.nl/


  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
Voutloos schreef op dinsdag 09 september 2008 @ 14:20:
Pff, SQL injection, SQL injection SQL injection. Povere stripslashes op de resultset, dus er wordt geklooidcompleet gefaald met escaping, geen return values system calls checken, etc. etc.

En los daarvan is je hele aanpak inefficient.

Zo. :>
Heb je een beter idee dan ?

https://www.rbwebpromotions.nl/


  • Noork
  • Registratie: Juni 2001
  • Niet online
Niet al te veel op Vl letten hoor. Hij reageert meestal zo, en geeft alleen summiere hints. Maar ik vermoed dat hij hier bedoeld, dat je beter compleet opnieuw kan beginnen, en de boel wat degelijker aan te pakken ;)

  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
Ik kan dan wle wat hulp gebruiken. (geld kunnen we het overhebben ?)

https://www.rbwebpromotions.nl/


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Noork schreef op dinsdag 09 september 2008 @ 14:26:
[...]

Niet al te veel op Vl letten hoor. Hij reageert meestal zo, en geeft alleen summiere hints.
Klopt, maar sql injection is dan ook wel een heel mooi zoekwoord.
Maar ik vermoed dat hij hier bedoeld, dat je beter compleet opnieuw kan beginnen, en de boel wat degelijker aan te pakken ;)
Eerder: heel script (of link) offline en lees over wat je uberhaupt aan het doen bent. Op zich zijn stukje script nog best bruikbaar, dus helemaal weggooien is ook weer zoiets. :P

{signature}


  • NECAnGeL
  • Registratie: Januari 2004
  • Laatst online: 16-09 07:29
(jarig!)
*werving e.d. is niet toegestaan hier*

[ Voor 164% gewijzigd door Creepy op 09-09-2008 17:26 ]

https://www.rbwebpromotions.nl/

Pagina: 1