导入CSV文件Crontab

时间:2018-07-05 07:15:26

标签: php linux csv

我创建了一个脚本来导入CSV文件。当我用php命令在服务器上手动运行脚本时,脚本运行没有问题。另一方面,当crontab执行时,会出现错误:

  

SPLFILEOBJECT :: __ CONSTRUCT(IMPORTS / STOCK_EXPRESS_FR.CSV):失败于   开放式流:没有此类文件或目录。

这是我的导入脚本。

 <?php

require(dirname(__FILE__) . '/config/config.inc.php');

$dir_fichier = 'IMPORTS/STOCK_EXPRESS_FR.csv';
//error_reporting(E_ALL);
ini_set('display_errors', 0);

tntProduct($dir_fichier);

function tntProduct($dir_fichier)
{
    $errors = [];

    try{
    $csv = new SplFileObject($dir_fichier);
    $csv->setFlags(SplFileObject::READ_CSV);
    $csv->setCsvControl(';');
    } catch (Exception $exception) {
        $errors[] = $exception->getMessage();
    }
    $nbProducts = 0;
    $nbProductsSuccess = 0;

    foreach ($csv as $ligne) {
        if ($ligne[1] === '0') {
            $result = getIdsProducts($ligne[0]);
        if (!empty($result)) {
                foreach ($result as $key => $item) {
            $nbProducts++;
            try {
                setCarrier($item['id_product']);
                $nbProductsSuccess++;
            }catch (Exception $exception) {
                $errors[] = $exception->getMessage();               
            }
                }
            }
        }
    }


    if (count($errors)>0) {
    sendMail($errors);
    } else {
        sendMail($nbProducts);
    }

    if (file_exists ($dir_fichier)) {
        unlink($dir_fichier);
    }
}

function getIdsProducts($ref)
{
    $sql = Db::getInstance()->executeS('
            SELECT p.id_product 
            FROM ' . _DB_PREFIX_ . 'product p
            WHERE p.reference = ' . '"' . $ref . '"');

    return $sql;
}

function setCarrier($productId)
{
    $shop = 1;

    $carriersFR = [
        0 => 1,
        1 => 72,
        2 => 87
    ];

    $products = new Product((int)$productId, false, 1, $shop);
    $products->setCarriers($carriersFR);
}

function sendMail($result)
{
    $data['{message}'] = $result;

    Mail::Send(
            1,
            'tnt_fr',
            'Mise à jour TNT France',
            $data,
            'test@test.fr',
            'test',
            null,
            null,
            null,
            true,
            _PS_MAIL_DIR_,
            false,
            1
        );
}

你对这个问题有想法吗?谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

在crontab中运行脚本,该脚本不在文件夹中,因此您需要编写完整路径或正确的相对路径。