2010-04-11 53 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