PHP读取行在某些计算机上不起作用,但在大多数计算机上都可以工作

时间:2019-01-31 13:57:05

标签: php

因此,我正在读取CSV文件并将其拆分以获取电子邮件,名称,姓氏,但是在我的平台上的不同计算机上这会以不同的方式输出,比如说,当我上传同一文件时,它会读取38行并保存。但是,在2台特定的计算机中,它只能读取1。

在我只读取TEMP文件之前,但是现在我将其保存到目录中并从那里读取,但是问题仍然存在,我比较了文件大小,即使内容也相同。 这是PHP错误吗?

<?php
global $user;
if(isset($_POST['submit'])) {

    if ($_FILES['file']['tmp_name']) {

        $nome = $_POST['nome'];
        $file = $_FILES['file']['tmp_name'];

        $user->criarLista($nome, $file);
    } else {
        $user->mensagem(1, "Não existe nenhum ficheiro");
    }

}
?>         

public function criarLista($nome,$file){

        // ADDED TO SAVE THE FILE IN THE SYSTEM AND READ FROM IT 
        if(file_exists("uploads/lista.txt")){ unlink("uploads/lista.txt"); }
        move_uploaded_file($file, "uploads/lista.txt");

        $file = file_get_contents("uploads/lista.txt");



        $user = $this->user;
        $get = $this->connect->query("SELECT * FROM users WHERE email = '$user'");
        $fetch = $get->fetch_array(MYSQLI_ASSOC);
        $user_id = $fetch['id'];

        if($insert = $this->connect->prepare("INSERT INTO lista(user_id,nome) VALUES(?,?)")){
            $insert->bind_param("is", $user_id,$nome);
            $insert->execute();
            $list_id = $insert->insert_id;

            $file = preg_replace('#\\x1b[[][^A-Za-z]*[A-Za-z]#', '', $file);
            $file = strip_tags($file);
            $lines = file("uploads/lista.txt");

            $emails = array();
            $fnames = array();
            $lnames = array();
            $linha = 0;
            foreach($lines as $line) {

                if($linha == 0){

                }else{
                echo $Linha."</br>";
                    if (strpos($line, ',') !== false) {

                        $arr = explode(",", $line);
                        // Email \ FNAME | LAST

                        $emailx = trim($arr[0]);
                        $emailx = trim(preg_replace("/[\\n\\r]+/", "", $emailx));
                        array_push($emails,$emailx); 


                        if(isset($arr[1])){
                           $fname = trim($arr[1]);
                           $fname = str_replace('"','',$fname);
                           array_push($fnames,$fname); 
                        }

                        if(isset($arr[2])){
                           $lname = trim($arr[2]);
                           array_push($lnames,$lname); 
                        }

                    }else{
                       array_push($emails,trim($line)); 
                    }  

                }   

                $linha++;

            }

            array_map('trim', $emails);
            array_map('trim', $fnames);
            array_map('trim', $lnames);

            $emails = implode(",",$emails);
            $fnames = implode(",",$fnames);
            $lnames = implode(",",$lnames);

            if($insert_list = $this->connect->prepare("INSERT INTO listas(lista_id,email,primeiro_nome,ultimo_nome) VALUES(?,?,?,?)")){
                $insert_list->bind_param("isss", $list_id,$emails,$fnames,$lnames);
                $insert_list->execute();

                $this->mensagem(2,"Lista adicionada com sucesso");

            }else{
                echo 
                '
                <div class="alert alert-danger">
                    Erro: '.$this->connect->error.'
                </div>
                ';
            }


        }else{

            echo 
            '
            <div class="alert alert-danger">
                Erro: '.$this->connect->error.'
            </div>
            ';

        }    

    }

已修复此问题,并将其添加到功能之上:

        ini_set('auto_detect_line_endings',true);

1 个答案:

答案 0 :(得分:1)

我不确定这是正在发生的事情的“答案”,尽管这是我必须解决的Mac用户发送文件的问题。

我发现的是,每次他上传文件时,它都会发送一个.zip文件,而不仅仅是文件(就像PC一样)。我没有其他Mac用户可以测试,因此,再次,我不能说这正是您遇到的问题,但是我相信它至少会对您的搜索有所帮助。

请注意,我必须从中砍掉很多代码(我在其中使用数据库执行其他各种功能,等等),因此这可能无法直接运行,但是我想我关闭了所有的“ ifs”和这样-或您可以弄清楚(如果没有,请告诉我,我会再次进行处理)。

希望这会有所帮助!

$save_file = basename($_FILES["fileToUpload"]["name"]);
$zipfile='maps/'.$save_file;  // location of a temp location (stops double uploads)
$alert_upload_file_exists = "Uploaded file exists!";   
$alert_upload_successful = "UPLOAD SUCCESSFUL"; 
$action_failed_text = "Action FAILED";
if(file_exists($zipfile) && (empty($_GET['overwrite']) || $_GET['overwrite'] == 'false')) 
    die($alert_upload_file_exists);
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $zipfile))
{
    // I found this mac to be sending a .zip file, not a standard one..... :(
    $uploadOk = 0;
    $mac_file = 0;
    if($basename = basename($_FILES["fileToUpload"]["name"],".zip"))
    {
        $zip = new ZipArchive;
        if($zip->open($zipfile) === true){
            // echo "basename is $basename<BR>";
            for($i = 0; $i < $zip->numFiles; $i++) {
                $filename = $zip->getNameIndex($i);
                $fileinfo = pathinfo($filename);
                // look for the file we really want (in our case, any sort of img file)
                if($fileinfo['basename'] == $basename . '.png' || $fileinfo['basename'] == $basename . '.jpg'  || $fileinfo['basename'] == $basename . '.gif') {
                    $imgfile = $_GET['loc_data_id'].".".$fileinfo['extension'];
                    $files[]=$fileinfo['basename'];
                //      echo "file added to the list <BR>";
                }
                 //  echo "filename is $filename, basename is ->".$fileinfo['basename']."<- fileinfo = ";print_r($fileinfo);
                 // CHECK TO SEE IF THIS WAS THE 'WEIRD' MAC FILE               
                 if($fileinfo['basename'] == "__MACOSX") 
                     $mac_file = 1;
                //   echo "mac_file is $mac_file ";
            }
            if(($imglist = array_keys(array_flip(preg_grep('/^.*\.(jpg|jpeg|png|gif)$/i',$files))))
            {
            //          echo "imglist = ";print_r($imglist);
            //  echo "files = ";print_r($files);
                foreach($files as $key => $value)
                {
                    if ($imglist[0]==$value) {$file = $imgfile;}
                    $upgrade += file_exists('maps/'.$file);
                    //  echo "imgfile is $imgfile, file is $file upgrade is $upgrade and value is ".$basename."/".$value." ............";
                    // more 'FUNNY BUSINESS' to work the Mac file....
                    if($mac_file){
                        $extracted = $zip->extractTo('maps/',$basename."/".$value);
                        rename("maps/$basename/$value","maps/$file");   
                    }
                    else {
                        $extracted = $zip->extractTo('maps/',$value);
                        rename("maps/$value","maps/$file"); 
                    }
                }
                // AND A BIT MORE.....
                if($mac_file){
                    rmdir ("maps/$basename");
                }
                $zip->close();
                $imgcount=0;$mapcount=0;$uploadOk=1;
                $html = file_get_html('maps/'.$mapfile);
                $imgck = strpos($html,'<img ');
                if(($imgck===false) || $imgck<>0) {
                    $uploadOk += 2;
                }
                //      echo "uploadOk is $uploadOk<br>";
                if($uploadOk==1)
                {
                    $mapname = pathinfo('maps/'.$mapfile);
                    //  echo "mapfile is $mapfile, mapname = ";print_r($mapname);
                }
            }
            else $uploadOk += 20;
        }
    }
    if($uploadOk==1) echo basename($_FILES["fileToUpload"]["name"])." ".$alert_upload_successful;
    else echo $action_failed_text . " ".$uploadOk;
    // delete the original .zip file (and any that are in the 'maps/' folder)
    array_map('unlink', glob("maps/*.zip"));
}
else
{
    echo "Sorry, there was an error uploading your file.";
    echo "temp name is " . $_FILES["fileToUpload"]["tmp_name"]. " save file is ". $save_file."<br>";
}