2012-08-16 2 views
1

Le script exécute plusieurs URL à la fois, et répercute automatiquement le contenu de l'URL, je veux empêcher ce script de répercuter quoi que ce soit, mais je ne vois aucune ligne comme echo 'something'; excepté les lignes que j'ai commentées.Comment empêcher ce script de faire écho à quoi que ce soit?

Voici le script:

 

    function batch_execute($urls) 
     { 
      $i   = 0; 
      $block  = array(); 
      $curl_handles = array(); 

      foreach ($urls as $url) 
      { 
       $curl_handles[$url] = curl_init(); 
       curl_setopt($curl_handles[$url], CURLOPT_URL, $url); 
       curl_setopt($curl_handles[$url], CURLOPT_CONNECTTIMEOUT, 100); 
      } 

      $curl_multi_handle = curl_multi_init(); 

      foreach ($curl_handles as $a_curl_handle) 
      { 
       $i++; 

       curl_multi_add_handle($curl_multi_handle, $a_curl_handle); 

       $block[] = $a_curl_handle; 

       if (($i % 10 == 0) or ($i == count($curl_handles))) 
       { 
        $running = NULL; 

        do 
        { 
         $running_before = $running; 

         curl_multi_exec($curl_multi_handle, $running); 

         if ($running != $running_before) 
         { 
    //      echo("Waiting for $running sites to finish...\n"); 
         } 

        } while ($running > 0); 

        foreach ($block as $handle) 
        { 
    //     $code = curl_getinfo($handle, CURLINFO_HTTP_CODE); 

    //     $curl_errno = curl_errno($handle); 

         $curl_error = curl_error($handle); 

         if ($curl_error) 
         { 
    //      echo(" *** cURL error: ($curl_errno) $curl_error\n"); 
         } 

         curl_multi_remove_handle($curl_multi_handle, $handle); 
        } 

        $block = array(); 
       } 
      } 

      curl_multi_close($curl_multi_handle); 
     } 

Aide :)

+1

Essayez d'activer le tampon de sortie ('ob_start()'). – Matt

+0

Je crois que vous devez définir 'CURLOPT_NOBODY' à' true'. – Kermit

+0

HEY @Matt merci beaucoup :) cela a fonctionné –

Répondre

3

Activation du tampon de sortie avec ob_start() captera toute sortie avant l'impression à l'écran.

Ensuite, fermez le tampon avec ob_end_clean() ou ob_end_flush(). Flush va imprimer le contenu du tampon avant de le fermer. Pour plus d'informations sur les contrôles de sortie, reportez-vous à here.

0

Lorsque vous créez les poignées cURL individuelles, définissez l'option CURLOPT_RETURNTRANSFER sur 1 et cURL ne transmettra pas le contenu à stdout au moment où il effectue les demandes.

Une fois la requête terminée, si vous souhaitez accéder au corps de la réponse pour un handle individuel, appelez le curl_multi_getcontent() sur ce descripteur et il renverra le contenu de la réponse.

Vous pouvez utiliser CURLOPT_NOBODY, mais l'effet secondaire est que la demande est modifiée en une demande HEAD que de nombreux serveurs n'acceptent pas. L'utilisation de la mise en mémoire tampon de sortie est également possible, mais n'est pas utile si vous devez isoler le corps de la réponse de demandes individuelles.

Questions connexes