2013-09-14 3 views
5

Я пытаюсь запустить параллельную загрузку изображений с помощью нескольких завиток. У меня есть короткий скрипт, который отлично работает для меня на моем ноутбуке (php 5.3.10-1), но сбой на моем сервере (PHP 5.5.3-1).PHP curl работает на одной машине, сбой другой

Когда я запускаю этот скрипт на своем сервере, создаются целевые файлы (я думаю, что завиток открывает дескриптор успешно), но файлы пустые, нет никаких предупреждений или ошибок, которые я мог видеть на своем сервере, чтобы указать любые вопрос.

Я проверяю его через CLI в данный момент, так что php.ini для PHP CLI, имеет:

error_reporting = E_ALL 
display_errors = On 

Это первое, что я сделал. Единственное, что я вижу, это предупреждение: PHP Предупреждение: модуль «PDO» уже загружен в Unknown on line 0

Ниже приведен пример исходного кода POC, который я написал/нашел в Интернете и отлично работает на моем ноутбуке, но не работает как на моем сервере. Буду признателен за ваши мысли. Спасибо и извините за то, что вы не поняли относительно уровня отладки.

<?php 
    $urls = array(
     'http://static.php.net/www.php.net/images/php.gif', 
     'http://p.ebaystatic.com/aw/pics/globalheader/spr9.png' 
    ); 

    $save_to = '/tmp/'; 

    function add_file_to_curl($save_to, $mh, $url, $i){ 
      global $conn, $fp; 
      $g=$save_to.basename($url); 
      if(is_file($g)){ 
        unlink($g); 
      } 
      $conn[$i]=curl_init($url); 
      $fp[$i]=fopen ($g, "w"); 
      curl_setopt ($conn[$i], CURLOPT_FILE, $fp[$i]); 
      curl_setopt ($conn[$i], CURLOPT_HEADER ,0); 
      curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,60); 
      curl_multi_add_handle ($mh,$conn[$i]); 
    } 

    $conn=""; 
    $fp=""; 
    $mh = curl_multi_init(); 
    foreach ($urls as $i => $url) { 
      add_file_to_curl($save_to, $mh, $url, $i); 
      echo "URL IS $url, I is $i\n"; 
    } 
    do { 
      $n = curl_multi_exec($mh,$running); 
      $ready = curl_multi_select($mh); // Waiting for one of the files to finish 
      if(0 < $ready){ 
        while($info = curl_multi_info_read($mh)){ 
          $status = curl_getinfo($info['handle'],CURLINFO_HTTP_CODE); 
          echo "STATUS $status\n"; 
          if(200 == $status){ 
            $successUrl = curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL); 
            echo "$successUrl\n"; 
          } 
          break 1; 
        } 
      } 
    } 
    while (0 < $running && -1 != $ready); 
    $info = curl_multi_info_read($mh); 
    $status = curl_getinfo($info['handle'],CURLINFO_HTTP_CODE); 
    echo "STATUS $status\n"; 
    if(200 == $status){ 
      $successUrl = curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL); 
      echo "$successUrl\n"; 
    } 

    foreach ($urls as $i => $url) { 
      echo "Running on $url and $i\n"; 
      curl_multi_remove_handle($mh,$conn[$i]); 
      curl_close($conn[$i]); 
      fclose ($fp[$i]); 
    } 
    curl_multi_close($mh); 
    ?> 
+0

ли вам –

+0

Спасибо. Да, у меня есть сообщение об ошибках с сообщением об ошибке, и также отображаются ошибки. Я обновил исходное сообщение соответственно. – GibsonLP

ответ

2

Похоже, что что-то не так с php на моем сервере. Даже образец от http://php.net/manual/en/function.curl-multi-exec.php не работает для меня (он просто висит там, strace показывает, что он просто висит на клоне (child_stack = ....) Я исправлю это, но это не имеет никакого отношения к моему коду, поэтому Я решил «закрыть» мой случай.

И я хотел бы воспользоваться этой возможностью, чтобы лично поблагодарить человека, который был достаточно хорош, чтобы -1 мой вопрос, несмотря на не имея ни малейшего понятия, что это неправильно. Очень полезно.

+0

Отверните все комментарии ss downvote тролли. У меня такая же проблема на моем Mac. Когда он запускает php в php/user/bin/php по умолчанию (который равен 5.4.19), он вешает навсегда без какой-либо полезной ошибки. Когда я запускаю PHP-версию MAMP build (версия 5.4.17), она работает нормально. – Ray

Смежные вопросы