oplossing nodig betreft lezen van veel json files/urls

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco Eilander

Marco Eilander

26/10/2017 21:55:45
Quote Anchor link
Hallo,


Ik heb een php bestand die momenteel 312x met behulp van file_get_contents(),
maar de website laad daardoor ontzettend langzaam, zo langzaam, dat zelfs mysql een foutmelding geeft:
MySQL Server has gone away. Ik gebruik het nu binnen een while().


Ik zoek een oplossing waarmee ik sneller 312+ json bestanden kan lezen.
Ook zoek ik een oplossing, dat cronjob niet halverwege stopt vanwege een timeout.

Ik weet alleen niet of ik veel kan doen aan cronjob, of dat ik daarvoor contact moet opnemen met mijn webhost.

Alvast bedankt :)
 
PHP hulp

PHP hulp

19/04/2024 13:43:31
 
- Ariën  -
Beheerder

- Ariën -

26/10/2017 22:11:58
Quote Anchor link
"MySQL Server has gone away" betekent dat je een te grote hoeveelheid aan data ophaalt. In my.cnf kan je dat als beheerder/root instellen. Vraag eens na wat die waarde is?

Hier staan wel wat interessante tips in:
https://www.byte.nl/kennisbank/item/melding_mysql_server_has_gone_away

Maar als je ruim 312 bestanden in wilt lezen, dan zou ik eerst maar zorgen dat je cron het minder zwaar heeft.
 
Marco Eilander

Marco Eilander

27/10/2017 09:33:19
Quote Anchor link
Cronjob stopt er denk ik mee, omdat het langer dan 60 seconde duurt tot de pagina volledig is geladen.
Het komt puur door file_get_contents(), dat het zo lang duurt. Ik zal contact opnemen met mijn webhost, of ze dat bij mij kunnen aanpassen.

Verder is er zeker weinig te doen aan de laadtijd?
 
- Ariën  -
Beheerder

- Ariën -

27/10/2017 09:47:04
Quote Anchor link
Hoe roep je de cronjob aan?
 
Ivo P

Ivo P

27/10/2017 10:44:46
Quote Anchor link
cronjobs horen geen timeout te hebben.

Apache of PHP geeft een timeout, maar een cronjob kun je gebruiken zonder tussenkomst van een http-server.
Bijvoorbeeld /usr/bin/php /path/mijnscript.php

als je php script vervolgens elders informatie opvraagt, kan díe server weer wel een timeout leveren.

Maar is json in losse calls wel dé oplossing voor je probleemstelling?
 
- Ariën  -
Beheerder

- Ariën -

27/10/2017 11:01:24
Quote Anchor link
Ik lees wel dat file_get_contents() een socket time-out kent. Dus ook via de CLI en dus ook via de cronjob, lijkt deze opgeworpen te worden.
 
Marco Eilander

Marco Eilander

27/10/2017 16:01:37
Quote Anchor link
Contact gehad met de webhost en er zit inderdaad een timeout op van 60 sec, want volgens hen zeggen eigenlijk 30 sec hoort te zijn). Oplossing: meerdere bestanden maken en laten uitvoeren via cronjob.


Ik loop alleen tegen iets anders aan, maar ik ga dat eerst even uitzoeken, en dan zal ik het wel hier plaatsen of evt een nieuw topic starten, aangezien het een off-topic probleem is (wel in hetzelfde bestand, maar heeft verder niets te maken met cronjob/file_get_contents().
 
- Ariën  -
Beheerder

- Ariën -

27/10/2017 16:05:30
Quote Anchor link
Open daar maar even een nieuw topic voor dan. :-)
 
Rob Doemaarwat

Rob Doemaarwat

27/10/2017 16:06:24
Quote Anchor link
Kun je niet gewoon met set_time_limit() http://php.net/manual/en/function.set-time-limit.php aan de slag (of is dat uitgeschakeld - ik zie echter dat "safe mode" sinds PHP 5.4 niet meer bestaat).
 
Ben van Velzen

Ben van Velzen

27/10/2017 17:15:23
Quote Anchor link
De meeste externe contacten tellen niet tegen de tijdslimieten van PHP. Denk hierbij aan databasecontact of het lezen van bestanden. Als je door de time limit schiet is de oorzaak meestal niet omdat je een langzame externe bron hebt.
 
Ivo P

Ivo P

27/10/2017 17:32:19
Quote Anchor link
je hebt als ik het goed begrijp een cronjob draaien, die vervolgens 300x een json bericht ophaalt over http.

Waar haalt hij die json op? Is dat op jouw server, of op een andere server?
En hoe spreek je de cronjob aan?

Want wat gaat er nu fout? Is dat het cronjob script, of geeft/geven de externe server(s) een foutmelding?

set_time_limit() heeft geen functie in een command line PHP script, aangezien er geen time limit is.
 
Rob Doemaarwat

Rob Doemaarwat

27/10/2017 18:23:24
Quote Anchor link
Je hoster geeft misschien toch een max_execution_time mee. Via de command line kan dat in ieder geval met "php -d max_execution_time=60 test.php". Als dat zo is kun je die toch oprekken met set_time_limit().
 
Ben van Velzen

Ben van Velzen

27/10/2017 21:13:33
Quote Anchor link
Ja, maar er wordt door TS in eerste instantie met geen woord gerept over een bereikte max execution time, maar dat het gewoon lang duurt en dat de melding "mysql server has gone away" omhoog komt. Dat heeft niets met PHP te maken op zichzelf, in ieder geval niets dat je met configuratie aan die kant kan oplossen. Set_time_limit() etc zijn hiervoor ook niet zinvol.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.