2016-01-20 5 views
0

Так что у меня проблема с моей петлей foreach, которая работает только один раз.foreach Loop Running Once

У меня есть следующие данные для переменной $ file_url.

$file_url = "http://www.somedomain.com/12355/1.jpg,http://www.somedomain.com/12355/2.jpg,http://www.somedomain.com/12355/3.jpg,http://www.somedomain.com/12355/4.jpg"; 

Теперь мой код выглядит следующим образом:

function fetch_media($file_url,$vin,$cacheid) { 
    require_once(ABSPATH . 'wp-load.php'); 
    require_once(ABSPATH . 'wp-admin/includes/image.php'); 
    global $wpdb; 

    if(!$vin) { 
     $vin = $cacheid; 
    } 

    $vin = $vin . '/'; 

    //directory to import to  
    $artDir = "wp-content/uploads/vehiclephotos/$vin"; 

    //if the directory doesn't exist, create it 
    if(!file_exists(ABSPATH.$artDir)) { 
     mkdir(ABSPATH.$artDir); 
    } 

    $file_url = explode(",", $file_url); 
    $gallery_images = array(); 

    foreach ($file_url as $url) { 

    //rename the file... alternatively, you could explode on "/" and keep the original file name 
    $filename = array_pop(explode("/", $url)); 

     if (@fclose(@fopen($url, "r"))) { //make sure the file actually exists 
      copy($url, ABSPATH.$artDir.$filename); 

      $siteurl = get_option('siteurl'); 
      $file_info = getimagesize(ABSPATH.$artDir.$filename); 

      //create an array of attachment data to insert into wp_posts table 
      $artdata = array(); 
      $artdata = array(
       'post_author' => 1, 
       'post_date' => current_time('mysql'), 
       'post_date_gmt' => current_time('mysql'), 
       'post_title' => $filename, 
       'post_status' => 'inherit', 
       'comment_status' => 'closed', 
       'ping_status' => 'closed', 
       'post_name' => sanitize_title_with_dashes(str_replace("_", "-", $filename)), 
       'post_modified' => current_time('mysql'), 
       'post_modified_gmt' => current_time('mysql'), 
       'post_type' => 'attachment', 
       'guid' => $siteurl.'/'.$artDir.$filename, 
       'post_mime_type' => $file_info['mime'], 
       'post_excerpt' => '', 
       'post_content' => '' 
      ); 

      $uploads = wp_upload_dir(); 
      $save_path = $uploads['basedir'].'/vehiclephotos/'.$vin.$filename; 

      //insert the database record 
      $attach_id = wp_insert_attachment($artdata, $save_path); 

      //generate metadata and thumbnails 
      if ($attach_data = wp_generate_attachment_metadata($attach_id, $save_path)) { 
       wp_update_attachment_metadata($attach_id, $attach_data); 
      } 

      array_push($gallery_images,$attach_id); 
      } 

    } 

    return serialize($gallery_images); 
} 

Так что выход я получаю сериализованный массив, который является:

a:1:{i:0;i:103525;} 

Что хорошо, но так как было 4 элемента массива, он должен был зацикливаться 4 раза и дал мне сериализованные данные с 4 файлами attachment_id. Весь другой код там работает отлично один раз, он загружает изображение из URL-адреса, он переименовывает его и создает все миниатюры размером с фотографию в порядке.

Любая идея, что я делаю неправильно?

+0

'$ fire_url! = $ File_url' – wogsland

+0

Hah, который был опечаткой при его написании, это должно было прочитать file_url. – capsloc

+0

используйте 'print_r ($ file_url)' перед foreach и проверьте правильность выбора Array. –

ответ

0

При устранении неполадок удалите @-operator, чтобы узнать, какие ошибки вы получите. Итак:

if (@fclose(@fopen($url, "r"))) { //make sure the file actually exists 

становится:

if (fclose(fopen($url, "r"))) { //make sure the file actually exists 

Вы могли бы упростить эту строку:

if (file_exists($url)) { 
+0

Этот вид помог двигаться. Похоже, он застрял в этой части. Я понял это, потому что понял, что мои URL-адреса являются живыми URL-адресами, поэтому 100% уверенность в том, что эти файлы есть до того, как я доберусь до этой части. Отладка продолжается, хотя она все еще застряла с импортом мимо первой фотографии. – capsloc

0

Этот код прекрасно. По всей вероятности, ваши входы должны быть виноваты. Как и другие интимные, код, который вы публикуете, не предполагает, что вы регистрируете count(). Я бы предположил, что утверждение, что массив $file_url имеет четыре элемента, на самом деле не соответствует действительности.

0
foreach ($file_url as $url) { 
try { 

    //rename the file... alternatively, you could explode on "/" and keep the original file name 
    $filename = array_pop(explode("/", $url)); 

     if (@fclose(@fopen($url, "r"))) { //make sure the file actually exists 
      copy($url, ABSPATH.$artDir.$filename); 

      $siteurl = get_option('siteurl'); 
      $file_info = getimagesize(ABSPATH.$artDir.$filename); 

      //create an array of attachment data to insert into wp_posts table 
      $artdata = array(); 
      $artdata = array(
       'post_author' => 1, 
       'post_date' => current_time('mysql'), 
       'post_date_gmt' => current_time('mysql'), 
       'post_title' => $filename, 
       'post_status' => 'inherit', 
       'comment_status' => 'closed', 
       'ping_status' => 'closed', 
       'post_name' => sanitize_title_with_dashes(str_replace("_", "-", $filename)), 
       'post_modified' => current_time('mysql'), 
       'post_modified_gmt' => current_time('mysql'), 
       'post_type' => 'attachment', 
       'guid' => $siteurl.'/'.$artDir.$filename, 
       'post_mime_type' => $file_info['mime'], 
       'post_excerpt' => '', 
       'post_content' => '' 
      ); 

      $uploads = wp_upload_dir(); 
      $save_path = $uploads['basedir'].'/vehiclephotos/'.$vin.$filename; 

      //insert the database record 
      $attach_id = wp_insert_attachment($artdata, $save_path); 

      //generate metadata and thumbnails 
      if ($attach_data = wp_generate_attachment_metadata($attach_id, $save_path)) { 
       wp_update_attachment_metadata($attach_id, $attach_data); 
      } 

      array_push($gallery_images,$attach_id); 
      } 

    } 

    } catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

использование попытаться поймать в цикле Еогеаспа он будет продолжать работать так же, как вы можете увидеть ошибку, что не так в цикле Еогеаспа

+0

Хмм попробовал это, но получил ошибку 500 после того, как я сохранил код. Я добавил отсутствующий}, но все еще не исправил его. – capsloc

+0

Мне удалось запустить ваш код, но он все равно не выдавал никаких исключений. – capsloc

0

выглядит как проблема не с петлей в конце концов, как кто-то упоминается. Я получил сообщение об ошибке, скопировав файл на мой сервер после первого изображения ... это совсем другая проблема.

Благодарим вас за руководство, которое привело меня к обнаружению неисправности.