2010-04-11 54 views
1

我上传一个文件,然后尝试使用fgetcsv来做它的事情。使用fopen上传的文件与php

这是我的脚本。在添加文件上传部分之前,一切正常。现在它没有显示任何错误,只是没有显示上传的数据。

即时得到我的“文件上传”的通知,文件被正确保存,但参赛人数的计数器显示0

if(isset($_FILES[csvgo])){ 

    $tmp = $_FILES[csvgo][tmp_name]; 

    $name = "temp.csv"; 

    $tempdir = "csvtemp/"; 

    if(move_uploaded_file($tmp, $tempdir.$name)){ echo "file uploaded<br>"; } 

    $csvfile = $tempdir.$name; 

    $fh = fopen($csvfile, 'r'); 
    $headers = fgetcsv($fh); 
    $data = array(); 
    while (! feof($fh)) 
    { 
     $row = fgetcsv($fh); 
     if (!empty($row)) 
     { 
      $obj = new stdClass; 
      foreach ($row as $i => $value) 
      { 
       $key = $headers[$i]; 
       $obj->$key = $value; 
      } 
      $data[] = $obj; 
     } 
    } 
    fclose($fh); 

    $c=0; 

    foreach($data AS $key){ 

      $c++; 

      $phone = $key->PHONE; 

      $fax = $key->Fax; 

      $email = $key->Email; 

      // do things with the data here 

    } 

    echo "$c entries <br>"; 
} 
+0

如果您没有收到任何错误,那么您不显示所有错误。例如,$ _FILES [csvgo]应该生成一个E_NOTICE级别的错误,因为'csvgo'不是一个常量,你应该引用它。你应该确保你有error_reporting(E_ALL);和ini_set('display_errors','1');在你的代码中的某处。 – Rithiur 2010-04-11 03:39:41

回答

0

您可能需要指定一个绝对的服务器路径。编辑:我测试了你的代码,只做了一些小的修改(绝对路径和为你的数组键名添加引号),它工作得很好。它可能超出了你发布的范围。也许是一个文件权限错误或与上传形式的东西。

只是一个想法,但你可能会尝试提高你的PHP错误级别。这可能会发现一些本来未被注意的事情。

ini_set("display_errors", 1); 
ini_set("error_reporting", 2147483647); 

如果失败了,您可以随时在整个地方抛出一堆回声,直到找到罪魁祸首。

+0

作出了改变,但仍然没有。没有错误,没什么。 – mrpatg 2010-04-11 02:48:11

+0

嗯,喂。答案已更新! – 2010-04-11 03:35:38

+0

发现这个问题,结果发现它与CSV文件古怪。我不知道为什么/如何,但是当我打开它并将它保存在OpenOffice Calc中并保存它(数据是相同的,在记事本++中检查)它可以工作。不知道发生了什么事。 – mrpatg 2010-04-11 04:32:00