代码之家  ›  专栏  ›  技术社区  ›  mrpatg

用php对上传的文件使用fopen

  •  1
  • mrpatg  · 技术社区  · 14 年前

    我正在上载一个文件,然后尝试使用fgetcsv对其执行操作。

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

    我收到我的“文件上传”通知,文件保存正常,但计数器的条目数显示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>";
    }
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   Greg W    14 年前

    可能需要指定绝对服务器路径。

    $tempdir = $_SERVER['DOCUMENT_ROOT'] . "/csvtemp/";
    

    编辑:我测试了您的代码,只做了一些小的修改(绝对路径和添加引号到您的数组键名),它工作得很好。这可能超出了你所发布内容的范围。可能是文件权限错误或上传表单有问题。

    只是一个想法,但您可以尝试提高php错误级别。这可能会发现一些原本没有被注意到的东西。

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

    如果那失败了,你可以一直在那里扔一堆回声,直到你找到凶手。