Gå til innhold

Sette timeout på fopen()


Anbefalte innlegg

Har laget et script som generer en sql-fil med backup av databasen min og lagrer den på serveren. Dette tar rimelig nok litt tid. Tenkte å kjøre dette en gang i uken eller noe, men vil nødig at en uheldig bruker må sitte og vente på dette i opptil 30 sekunder.

 

Derfor plasserte jeg ignore_user_abort(true) og set_time_limit(0) i scripet. Da vil det kjøre ferdig selv om brukeren avbryter. Så tenkte jeg jeg kunne bruke fopen() for å åpne dette fra en annen fil. Der tenkte jeg jeg kunne avbryte fopen() etter ett sekund eller noe. Noe slikt altså:

 

$fopen_timeout = 1;
$handle = fopen(backup.php, 'r', $fopen_timeout);
$fclose($handle);

 

Men problemet er jo at fopen ikke har noen slik timeout. Noen gode ideer? Kom gjerne med ideer som kan løse problemet på andre måter også.

Lenke til kommentar
Videoannonse
Annonse

fopen gjør ikke det du ser ut til å tro den gjør afaik. Den åpner filen til å lese eller skrive, ikke for å kjøre den.

Du må da bruke include/require istedenfor (lese filen og bruke eval er frarådet).

 

Det beste er å lage en php fil som kan kjøres fra kommandolinjen og kjøre den med cron i linux på et tidspunkt med lav trafikk eller rett før du kommer på jobb/hjem så du kan fikse eventuelle feil eller kjøre den på nytt.

 

Hvis du ikke har cron tilgang kan du kjøre en cli fil fra en webside med system. Fork koden i cli filen, foreldreprosessen avslutter (så websiden kan avslutte skikkelig) og barneprosessen fortsetter med å kjøre koden din.

 

Må du kjøre den i web serveren (noe du ikke bør høres det ut som) så må du

  1. legge til session_write_close() så brukeren kan få frem andre sider.
  2. sørge for at 2 eller flere sidelastninger ikke starter prosessen samtidig.

Lenke til kommentar

vil anbefale deg å ta en titt på mysqldump kommandoen (om du ikke bruker den allerede)

 

jeg ville satt opp en cronjob som kjørte backup scriptet en gang i døgnet, (eller hva som passer deg best).

 

Lurt å pakke fila som mysqldump lager også for å spare plass

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...