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 :)
"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.
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?
Hoe roep je de cronjob aan?
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?
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.
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().
Open daar maar even een nieuw topic voor dan. :-)
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.
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.


Reageren