oplossing nodig betreft lezen van veel json files/urls
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 :)
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.
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?
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.
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. :-)
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).
Kun je niet gewoon met set_time_limit() 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.
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.
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().
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.