代码之家  ›  专栏  ›  技术社区  ›  Rob Tucker

将CSV导出保存到服务器

  •  1
  • Rob Tucker  · 技术社区  · 9 年前

    我有下面的代码,当按下WordPress管理面板中的按钮时会触发。这将打开一个名为“ss stock export.csv”的csv文件。

    wp-content/uploads/exports/ ? 我试着使用 file_put_contents 但这似乎并不奏效。CSV文件出现在右侧,但为空。可能是我的 $output

    <?php 
    function generate_stock_report_csv() {
        // output headers so that the file is downloaded rather than displayed
        header('Content-Type: text/csv; charset=utf-8');
        // set file name with current date
        header('Content-Disposition: attachment; filename=ss-stock-export.csv');
        // create a file pointer connected to the output stream
        $output = fopen('php://output', 'w');
        // set the column headers for the csv
        $headings = array( 'sku', 'qty', 'is_in_stock' );
        // output the column headings
        fputcsv($output, $headings );
        // get all simple products where stock is managed
    
        // get all product variations where stock is managed
        $args = array(
            'post_type'         => 'product_variation',
            'post_status'       => 'publish',
            'posts_per_page'    => -1,
            'orderby'           => 'title',
            'order'             => 'ASC',
            'meta_query' => array(
                array(
                    'key'       => '_stock',
                    'value'     => array('', false, null),
                    'compare'   => 'NOT IN'
                )
            )
        );
    
        $loop = new WP_Query( $args );
        while ( $loop->have_posts() ) : $loop->the_post();
            $product = new WC_Product_Variation( $loop->post->ID );
            $ss_sku = get_post_meta( $product->variation_id, 'ss_sku', true);
            $stock = $product->stock;
            settype($stock, "integer");
            if ($stock > 0){ $stock_status = 1;} else {$stock_status = 0;}
            $row = array( $ss_sku , $product->stock, $stock_status );
            fputcsv($output, $row);
        endwhile;
        $filename = "ss-stock-export.csv"; // Trying to save file in server
        file_put_contents(ABSPATH . "wp-content/uploads/exports/" . $filename, $output);
    } ?>
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Alex Luke    9 年前

    您可以使用 ABSPATH 中定义的常数 wp-config.php 传递绝对路径到 file_put_contents

    file_put_contents(ABSPATH . "wp-content/uploads/exports/" . $filename, $output);
    
        2
  •  1
  •   brasofilo Gary    5 年前

    这成功了

    $csv = "sku,qty,is_in_stock \n";//Column headers
    $args = array(
        'post_type'         => 'product_variation',
        'post_status'       => 'publish',
        'posts_per_page'    => -1,
        'orderby'           => 'title',
        'order'             => 'ASC',
        'meta_query' => array(
            array(
                'key'       => '_stock',
                'value'     => array('', false, null),
                'compare'   => 'NOT IN'
            )
        )
    );
    
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
        $product = new WC_Product_Variation( $loop->post->ID );
        $ss_sku = get_post_meta( $product->variation_id, 'ss_sku', true);
        $stock = $product->stock;
        settype($stock, "integer");
        if ($stock > 0){ $stock_status = 1;} else {$stock_status = 0;}
        $row = array( $ss_sku , $product->stock, $stock_status );
        $row_array= array($row);
            foreach ($row_array as $record){
            $csv.= $record[0].','.$record[1].','.$record[2]."\n"; //Append data to csv
            }
    endwhile;
    $csv_handler = fopen ('ss-stock-export.csv','w');
    fwrite ($csv_handler,$csv);
    fclose ($csv_handler);
    file_put_contents(ABSPATH . "wp-content/uploads/exports/ss-stock-export.csv", $csv);       
    }