Domanda

Sto costruendo un ragno, che attraverserà vari siti e data mining loro.

Da quando ho bisogno di ottenere ogni pagina separatamente questo potrebbe richiedere un tempo molto lungo (forse 100 pagine). Ho già impostato la set_time_limit ad essere di 2 minuti per pagina, ma sembra che apache ucciderà lo script dopo 5 minuti non importa.

Questo di solito non è un problema dal momento che questo verrà eseguito da cron o qualcosa di simile che non ha questo limite di tempo. Tuttavia vorrei anche che gli amministratori di essere in grado di avviare un'operazione di recupero manualmente tramite un HTTP-interfaccia.

Non è importante che Apache è tenuto in vita per l'intera durata, io sono, andando ad utilizzare AJAX per innescare un prendere e controllare di tanto in tanto con AJAX.

Il mio problema è come avviare l'operazione di recupero dall'interno di uno script PHP, senza l'operazione di recupero viene terminato quando lo script chiama muore.

Forse potrei usare il sistema ( 'script.php &'), ma non sono sicuro che farà il trucco. Tutte le altre idee?

È stato utile?

Soluzione

    $cmd = "php myscript.php $params > /dev/null 2>/dev/null &";

    # when we call this particular command, the rest of the script 
    # will keep executing, not waiting for a response
    shell_exec($cmd);

Quello che fa è invia tutti i STDOUT e STDERR a / dev / null, e lo script continua a esecuzione. Anche se lo script 'genitore' finisce prima myscript.php, myscript.php terminerà l'esecuzione.

Altri suggerimenti

se non si desidera utilizzare exec è possibile utilizzare un php costruito in funzione!

ignore_user_abort(true);

questo vi dirà lo script di riprendere anche se la connessione tra il browser e il server è caduto;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top