Visualizzazione risultati 1 fino 4 di 4

Discussione: Gestire tempistiche cronjob richieste http

  1. #1
    Guest

    Lightbulb Gestire tempistiche cronjob richieste http

    Ciao a tutti, ho uno script php che deve essere eseguito come cron-job una volta al giorno, il problema é che il cronjob mi restituisce errore 500 perché ci mette troppo tempo (circa 15 sec).

    Lo script serve per "leggere" tramite la funziona file("indirizzo web"); 30 pagine web, scaricare i contenuti che ci servono e inserirli in un database mysql.

    Mi sapreste dire un modo per velocizzarlo? Sempre facendo partire un solo cron-job al giorno..
    Grazie mille in anticipo

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Suppongo che le richieste HTTP le esegua in successione, corretto? Dovresti provare a parallelizzarle, in questo modo la durata di esecuzione dello script non sarà più la somma della durata delle richieste (tralasciando il tempo impiegato dai calcoli, che in questo caso è trascurabile) ma la massima durata tra le richieste.

    Dai un'occhiata a queste pagine:
    http://stackoverflow.com/questions/2...php-curl-multi
    http://www.onlineaspect.com/2009/01/...hout-blocking/

    Non so però se su AlterVista tutto ciò sia possibile.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Suppongo che le richieste HTTP le esegua in successione, corretto? Dovresti provare a parallelizzarle, in questo modo la durata di esecuzione dello script non sarà più la somma della durata delle richieste (tralasciando il tempo impiegato dai calcoli, che in questo caso è trascurabile) ma la massima durata tra le richieste.

    Dai un'occhiata a queste pagine:
    http://stackoverflow.com/questions/2...php-curl-multi
    http://www.onlineaspect.com/2009/01/...hout-blocking/

    Non so però se su AlterVista tutto ciò sia possibile.
    Si, l'idea potrebbe andare, dovrei riuscire a farli andare in parallelo tipo chiamata asincrona ma non volevo usare librerie esterne.. Se trovi qualcos altro fammi sapere grazie, intanto mi informo sul multi_curl e se funziona su altervista

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Suppongo che le richieste HTTP le esegua in successione, corretto? Dovresti provare a parallelizzarle, in questo modo la durata di esecuzione dello script non sarà più la somma della durata delle richieste (tralasciando il tempo impiegato dai calcoli, che in questo caso è trascurabile) ma la massima durata tra le richieste.

    Dai un'occhiata a queste pagine:
    http://stackoverflow.com/questions/2...php-curl-multi
    http://www.onlineaspect.com/2009/01/...hout-blocking/

    Non so però se su AlterVista tutto ciò sia possibile.
    Ho risolto con il multi_cutl, mi sono appoggiato a questo script e l'ho adattato al mio, grazie mille

    Codice:
    <?php
    $urls = array(
        'http://graph.facebook.com/http://tech.vg.no',
        'http://graph.facebook.com/http://www.vg.no',
    );
     
    $multi = curl_multi_init();
    $channels = array();
     
    // Loop through the URLs, create curl-handles
    // and attach the handles to our multi-request
    foreach ($urls as $url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     
        curl_multi_add_handle($multi, $ch);
     
        $channels[$url] = $ch;
    }
     
    // While we're still active, execute curl
    $active = null;
    do {
        $mrc = curl_multi_exec($multi, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
     
    while ($active && $mrc == CURLM_OK) {
        // Wait for activity on any curl-connection
        if (curl_multi_select($multi) == -1) {
            continue;
        }
     
        // Continue to exec until curl is ready to
        // give us more data
        do {
            $mrc = curl_multi_exec($multi, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
     
    // Loop through the channels and retrieve the received
    // content, then remove the handle from the multi-handle
    foreach ($channels as $channel) {
        echo curl_multi_getcontent($channel);
        curl_multi_remove_handle($multi, $channel);
    }
     
    // Close the multi-handle and return our results
    curl_multi_close($multi);
    ?>

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •