dongyu8664 2015-10-02 11:23
浏览 88
已采纳

文件上传不适用于Mac

I have a csv upload script that works perfectly on my PC and other PC's have been tested as well. I have a client who is trying this script on their Mac and it returns an error: Error no file selected.

The permissions on the upload folder are 755.

Really need to find out the cause of this. You can see my script and form below.

        define("UPLOAD_DIR", "/home/path/public_html/uploads/".$company."/");
$message = null;
$allowed_extensions = array('csv');
if(!empty($_FILES['file'])){
    if($_FILES['file']['error'] === 0){
        $file = explode(".", $_FILES['file']['name']);
        $extension = array_pop($file);
            // ensure a safe filename
            $name = preg_replace("/[^A-Z0-9._-]/i", "_", $_FILES['file']["name"]);

            // don't overwrite an existing file
            $i = 0;
            $parts = pathinfo($name);
            while (file_exists(UPLOAD_DIR . $name)) {
                $i++;
                $name = $parts["filename"] . "-" . $i . "." . $parts["extension"];
            }

        if(in_array($extension, $allowed_extensions)){

            if(move_uploaded_file($_FILES['file']['tmp_name'],
            UPLOAD_DIR . $name)){

                if(($handle = fopen(UPLOAD_DIR . $name, "r")) !== false){

                    $keys = array();
                    $out = array();

                    $line =1;

                    while(($row = fgetcsv($handle, 0, ',', '"')) !== false){

                        foreach($row as $key => $value){
                            if($line === 1){
                                $keys[$key] = $value;
                            }else{
                                $out[$line][$key] = $value;
                            }

                        }

                        $line++;

                    }

                    fclose($handle);

                    if(!empty($keys) && !empty($out)){

                            foreach($out as $key => $value){

                                $sql = "INSERT INTO ".$company."(id,prefix,fullname,last_name,business,address1,address2,address3,town,county,postcode,email,website,telephone1,telephone2,telephone3,landing_page,assigned_to,question1,question2,question3,question4,question5,question6,date,status,leadtype,file,gclid,leadid,tostep,ip,client_xp)VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
                                $date = date("Y-m-d H:i:s");
                                $status = "New Lead";
                                $client_xp = 1;
                                $statement = $db->prepare($sql);
                                $statement->bindParam(1, $value[0], PDO::PARAM_STR);
                                $statement->bindParam(2, $value[1], PDO::PARAM_STR);
                                $statement->bindParam(3, $value[2], PDO::PARAM_STR);
                                $statement->bindParam(4, $value[3], PDO::PARAM_STR);
                                $statement->bindParam(5, $value[4], PDO::PARAM_STR);
                                $statement->bindParam(6, $value[5], PDO::PARAM_STR);
                                $statement->bindParam(7, $value[6], PDO::PARAM_STR);
                                $statement->bindParam(8, $value[7], PDO::PARAM_STR);
                                $statement->bindParam(9, $value[8], PDO::PARAM_STR);
                                $statement->bindParam(10, $value[9], PDO::PARAM_STR);
                                $statement->bindParam(11, $value[10], PDO::PARAM_STR);
                                $statement->bindParam(12, $value[11], PDO::PARAM_STR);
                                $statement->bindParam(13, $value[12], PDO::PARAM_STR);
                                $statement->bindParam(14, $value[13], PDO::PARAM_STR);
                                $statement->bindParam(15, $value[14], PDO::PARAM_STR);
                                $statement->bindParam(16, $value[15], PDO::PARAM_STR);
                                $statement->bindParam(17, $value[16], PDO::PARAM_STR);
                                $statement->bindParam(18, $value[17], PDO::PARAM_STR);
                                $statement->bindParam(19, $value[18], PDO::PARAM_STR);
                                $statement->bindParam(20, $value[19], PDO::PARAM_STR);
                                $statement->bindParam(21, $value[20], PDO::PARAM_STR);
                                $statement->bindParam(22, $value[21], PDO::PARAM_STR);
                                $statement->bindParam(23, $value[22], PDO::PARAM_STR);
                                $statement->bindParam(24, $value[23], PDO::PARAM_STR);
                                $statement->bindParam(25, $date, PDO::PARAM_STR);
                                $statement->bindParam(26, $status, PDO::PARAM_STR);
                                $statement->bindParam(27, $value[26], PDO::PARAM_STR);
                                $statement->bindParam(28, $value[27], PDO::PARAM_STR);
                                $statement->bindParam(29, $value[28], PDO::PARAM_STR);
                                $statement->bindParam(30, $value[29], PDO::PARAM_STR);
                                $statement->bindParam(31, $value[30], PDO::PARAM_STR);
                                $statement->bindParam(32, $value[31], PDO::PARAM_STR);
                                $statement->bindParam(33, $client_xp, PDO::PARAM_STR);
                                $statement->execute();

                            }

            $message = '
    <div class="row">
        <div class="col-lg-6">
            <div class="alert alert-success">
                Success. Import complete. <a href="/import/"><i class="fa fa-times pull-right"></i></a>
            </div>
        </div>
    </div>';

                    }

                }

            }

        } else {
            $message = '
    <div class="row">
        <div class="col-lg-6">
            <div class="alert alert-warning">
                Only CSV\'s allowed <a href="/import/"><i class="fa fa-times pull-right"></i></a>
            </div>
        </div>
    </div>';
        }
    } else {
            $message = '
    <div class="row">
        <div class="col-lg-6">
            <div class="alert alert-warning">
                There was a problem with your upload. Please try again. <a href="/import/"><i class="fa fa-times pull-right"></i></a>
            </div>
        </div>
    </div>';
    }
}

     <form enctype="multipart/form-data" method="POST" action="/import/">
                <div class="form-body pal"> 
                    <div class="row">                                                               
                        <div class="col-md-12">
                            <div class="form-group"> 
                                CSV file to import:<br /><br /><input type="file" name="file" id="file">
                            </div>
                        </div>
                    </div>                    
                    <input type="submit" name="submit" class="btn btn-blue" value="Upload">
                </div>
            </form>
  • 写回答

1条回答 默认 最新

  • dqz7636 2016-04-06 11:18
    关注

    Ok so this ended up being a really simple solution by changing the first line of code to this

        define("UPLOAD_DIR", "/home/path/public_html/uploads/$company/");
    

    The inverted commas were closing the string before the company variable could be used, making the upload path invalid.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图