使用fgetcsv时PHP返回错误

时间:2010-12-01 18:41:17

标签: php fgetcsv

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

您好我正在尝试使用fgetcsv处理csv,但我所有我要去的是一个无限循环的错误

警告:第5行的testcsv.php中的fopen(“Tile”,“User”...)

警告:fgetcsv()期望参数1为资源,第6行/home/ratena/public_html/proc_files/testcsv.php中给出布尔值

<?php
$uploadcsv = "/home/ratena/public_html/temp/files/BatchLoadPM15.csv";
$filecsv = file_get_contents($uploadcsv);
         //$batchid = $_POST['batchid'];
         $handle = fopen("$filecsv", "r");
         while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) {
           print_r($data);   
        }
?>

4 个答案:

答案 0 :(得分:5)

这部分有问题

/* this is un-necessary */
$filecsv = file_get_contents($uploadcsv);
/* this expecting a file in */
$handle = fopen("$filecsv", "r");

尝试用这个

替换3行
$handle = fopen($uploadcsv, 'r');

跳过第一行

$column_headers = array();
$row_count = 0;
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) 
{
  if ($row_count==0)
  {
    $column_headers = $data;
  }
  else
  {
    print_r($data);
  }
  ++$row_count;
}

答案 1 :(得分:4)

您正在将CSV文件下载到字符串$filecsv中,并使用此字符串作为fopen中的文件名!!

无需下载文件,只需将CSV文件的名称传递给fopen即可。

另请记得先检查fopen 的返回值,然后继续阅读。

$uploadcsv = "/home/namebob/public_html/temp/files/BatchLoadPM15.csv";

// try to open the file.
$handle = fopen($uploadcsv, "r");

// error checking.
if($handle === false) {
   die("Error opening $uploadcsv");
}

// to skip the header.
$skip = true;

// file successfully open..now read from it.
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) { 

    // if header..don't print and negate the flag.
    if($skip) {
      $skip = !$skip;
    // else..print.
    } else {      
      print_r($data);               
    }
}  

答案 2 :(得分:0)

这是因为你试图打开文件的内容,而不是文件名。移除file_get_contents行,并将fopen来电替换为:

$handle = fopen($uploadcsv, 'r');

应该这样做......

答案 3 :(得分:-2)

看起来你的第一行包含标题。跳过第一行。