每个循环运行一次


foreach Loop Running Once

所以我的foreach循环只运行一次。

我有 $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 下载图像,重命名并创建照片的所有缩略图大小。

知道我做错了什么吗?

在进行故障排除时,请删除@-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)) {

这段代码很好。因此,您的输入很可能有问题。正如其他人所暗示的那样,您发布的代码并不建议您正在记录count()。我猜$file_url数组有四个项目的说法实际上是不正确的。

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";
}

在foreach循环中使用try并捕获它将继续运行,并且您可以看到foreach循环中的错误

看起来问题毕竟不是像有人提到的那样与循环有关。 在第一个图像之后,我将文件复制到我的服务器时出错......这是一个完全不同的问题。

感谢您的指导,使我找到了错误。