2013-05-01 104 views
-3

我想从csv文件导入到数据库的数据,但我不能这样做。我有下面的代码。我想从csv打印数据呢,但它给了我错误:symfony文件导入(csv)

Warning: fopen(soubor.csv): failed to open stream: No such file or directory in /var/www/VWM/src/VWM/ProjektBundle/Controller/DefaultController.php line 56

我该如何解决它?

public function addProductAction() { 
    $product = new Product; 
    $form = $this->createForm(new ProductType(), $product); 
    $form2 = $this->get('form.factory')->createNamedBuilder('form2name') 
     ->add('submitFile', 'file', array('label' => 'CSV')) 
     ->getForm(); 

    $m = 'nevyplněno'; 
    $request = $this->getRequest(); 
    if('POST' === $request->getMethod()) { 

     // add one product, it works 
     if($request->request->has('vwm_projektbundle_producttype')) { 
      $form->bindRequest($request); 
      if($form->isValid()) { 
       return $this->forward('VWMProjektBundle:Default:result', array('product' => $product)); 
      } else { 
       $m = 'Chybně vyplněný formulář'; 
      } 
     } 

     // add products from CSV 
     if($request->request->has('form2name')) { 
      $form2->bindRequest($request); 
      if($form2->isValid()) { 
       // Get File 
       $file = $form2->get('submitFile'); 
       // your csv file here when you hit submit button 
       $filename = $file->getData();   
       //print_r($data); // this returns filename.csv 
       $row = 1; 
       if (($handle = fopen($filename, "r")) !== FALSE) { 
        while (($data = fgetcsv($handle, 100, ";")) !== FALSE) { 
         $num = count($data); 
         echo "<p> $num fields in line $row: <br /></p>\n"; 
         $row++; 
         for ($c=0; $c < $num; $c++) { 
          echo $data[$c] . "<br />\n"; 
         } 
        } 
        fclose($handle); 
       } 
      } 
     } 
    } 

    return array(
     'form' => $form->createView(), 
     'form2' => $form2->createView(), 
     'm' => $m, 
     ); 
} 
+2

您已回答了您自己的问题。该文件不存在(您需要更正路径)。警告说明了这一点。 – 2013-05-01 15:27:03

+0

那么,我的代码有什么问题? :-( – user2129659 2013-05-01 15:39:39

+0

您正在打开一个文件** **无路径 – 2013-05-01 22:16:31

回答

0

替换这些行:

$filename = $file->getData();   
//print_r($data); // this returns filename.csv 

有了:

$filename = $file->getData();   
print_r($data); // this returns filename.csv 
die(' <-- actual path'); 

你看到一个正确的文件的路径?

要测试你的代码,你可以简单地把绝对路径放在$ filename var首先。如果它不适用于正确的绝对路径,请检查文件的权限。

0

尝试使用:

$csvFile = $form->get('csvFile')->getData()->getPathName(); 

它会回报你完整的临时文件路径名。