如果CSV文件不存在,则函数继续将空行添加到数据库中


If CSV file not exsist then function keep adding empty rows in to database

我需要一点帮助。我有一个模型文件,这会将 CSV 文件导入数据库。但是我的模型文件从C:'wamp'www'cakephp-2.5.6'app'tmp'uploads'Kontaktid中获取此 CSV,如果名为 export.csv 的 CSV 文件不在此文件夹中存在,那么我的函数会不断向数据库添加空行。

我可以做这样的事情吗(我试图将其添加到控制器中,但这不起作用)?

If empty(Kontaktid) {
   echo ("CSV file is not found");exit;
}

这是我的控制器文件:

function import() {
            $this->Kontaktid->import('export.csv');
        }

这是我的模型文件:

<?php  
class Kontaktid extends AppModel {
    public $validate = array(
        'title' => array('rule' => 'notEmpty'),
        'body' => array('rule' => 'notEmpty')
    );
    var $name = 'Kontaktid';
    function import($filename) {
        // set the filename to read CSV from
        $filename = TMP . 'uploads' . DS . 'Kontaktid' . DS . $filename;
        // open the file
        $handle = fopen($filename, "r");
        // read the 1st row as headings
        $header = fgetcsv($handle);
        // read each data row in the file
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $this->query ("INSERT into kontaktids(id,Eesnimi,Perenimi,Maakond,Linn,Tanav,Maja,Telefon,lisanumbrid) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]')");
            $this->query;
        }
         print "Import done";
        // close the file
        fclose($handle);
    }
}

感谢您的帮助!

您可以使用:

<?php
$filename = '/path/to/export.csv';
if (file_exists($filename)) {
    // do your import stuff.
} else {
    // File is not exist.
}
?>

查看此链接以获取更多信息 : http://php.net/manual/en/function.file-exists.php

我建议不要自己编码,这里有很棒的库,可以为您解析csv https://github.com/parsecsv/parsecsv-for-php

function import($filename) {
            // set the filename to read CSV from
            $filename = TMP . 'uploads' . DS . 'Kontaktid' . DS . $filename;
            if (file_exists($filename)) {
                // do your import stuff.
                // open the file
            $csv = new parseCSV($filename);
            //print_r($csv->data);
            //count the rows
                if( count($csv->data) > 0) {
                    foreach($csv->data as $data) {
                       $this->query ("INSERT into kontaktids(id,Eesnimi,Perenimi,Maakond,Linn,Tanav,Maja,Telefon,lisanumbrid) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]')");
                       $this->query;
                    }
                }
                print "Import done";
            } else {
               print "File is not exist";.
         }  
}

while条件应该检查返回值是否也NULL。如果文件无效,则会出现这种情况。来源:http://php.net/manual/en/function.fgetcsv.php