首页 > 解决方案 > PHP 大型 csv 到 SQL cron 未完全执行

问题描述

我在运行 php 脚本时遇到问题。它应该停用两个表的所有产品,然后将 csv 与表中的内容进行比较,如果产品在 CSV 中,则重新激活(以及对 csv 中产品的任何更改。)

如果我在浏览器中运行该脚本,它可以正常工作(尽管速度很慢)。但在 cron 上,它似乎停用了所有产品,仅此而已。我在尝试在这里找到解决方案时遇到了麻烦。

编辑:忘了提到每个 CSV 有大约 50,000 个条目。

如果您需要任何其他信息,例如 CSV 结构,请告诉我。

Cron PHP 脚本

<?php
set_time_limit(0);

//Deactivate All
mysqli_query($conn, "UPDATE products SET ACTIVE = 'false'");
mysqli_query($conn, "UPDATE CProducts SET ACTIVE = 'false'");

//Add or Update Products
$file = "temp/webprod.csv";
$csv = file_get_contents($file);

$Products = array_map("str_getcsv", explode("\n", $csv));
array_pop($Products);
array_shift($Products);
foreach ($Products as $item){
    $productsSQL = mysqli_query($conn, "SELECT * FROM products WHERE REFERENCE = '".$item[0]."' LIMIT 1");
    if (mysqli_num_rows($productsSQL) > 0){
        //Update It or Activate
        mysqli_query($conn, "UPDATE products SET PRODUCT_DESCRIPTION = '".$item[1]."', TILE_SIZE = '".$item[2]."', RETAIL_PRICE = '".$item[3]."', COST_PRICE = '".$item[4]."', ACTIVE = 'true' WHERE REFERENCE = '".$item[0]."'");
    }else{
        //Add It
        mysqli_query($conn, "INSERT INTO products (REFERENCE, PRODUCT_DESCRIPTION, TILE_SIZE, RETAIL_PRICE, COST_PRICE) VALUES ('".$item[0]."', '".$item[1]."', '".$item[2]."', '".$item[3]."', '".$item[4]."')");
    }
}

//Add or Update CProducts
$file = "temp/cwebprod.csv";
$csv = file_get_contents($file);

$CProducts = array_map("str_getcsv", explode("\n", $csv));
array_pop($CProducts);
array_shift($CProducts);
foreach ($CProducts as $c1Item){
    $productsSQL = mysqli_query($conn, "SELECT * FROM CProducts WHERE REFERENCE = '".$c1Item[0]."' LIMIT 1");
    if (mysqli_num_rows($productsSQL) > 0){
        //Update It or Activate
        mysqli_query($conn, "UPDATE CProducts SET PRODUCT_DESCRIPTION = '".$c1Item[1]."', TILE_SIZE = '".$c1Item[2]."', RETAIL_PRICE = '".$c1Item[3]."', COST_PRICE = '".$c1Item[4]."', ACTIVE = 'true' WHERE REFERENCE = '".$c1Item[0]."'");
    }else{
        //Add It
        mysqli_query($conn, "INSERT INTO CProducts (REFERENCE, PRODUCT_DESCRIPTION, TILE_SIZE, RETAIL_PRICE, COST_PRICE) VALUES ('".$c1Item[0]."', '".$c1Item[1]."', '".$c1Item[2]."', '".$c1Item[3]."', '".$c1Item[4]."')");
    }
}
?>

标签: phpsqlcsvcron

解决方案


Fixed it. It was the path to the CSV's. Feel a bit silly now.


推荐阅读