PHP - 文件未发送到数据库错误

时间:2017-07-25 19:50:10

标签: php mysql file pdo

我允许用户将文件提交到我网站上的数据库中。但每次提交文件时,我都会收到这些错误消息

( ! ) Warning: file_get_contents() expects parameter 1 to be a valid path, array given in C:\wamp64\www\MT\developerUpload.php on line 8

( ! ) Warning: trim() expects parameter 1 to be string, array given in C:\wamp64\www\MT\developerUpload.php on line 9

但我被告知" file_get_contents"是您将文件内容发送到数据库的方式。没有" file_get_contents"它发送完美,但有了它,它给了我那些错误信息,我不知道为什么。所以我想要做的是,使用" file_get_contents"提交文件。所以稍后我可以在用户页面上显示内容。这是我的代码

PHP

$ query =" INSERT INTO pack_screenshots(pack_id,file_name,file_tmp)VALUES(:packid,:file_name,:file_tmp)&#34 ;;              $ stmtFileUpload = $ handler-> prepare($ query);              $ errors = array();

         foreach($_FILES['file']['tmp_name'] as $key => $error){

             if ($error != UPLOAD_ERR_OK) {
                $errors[] = $_FILES['file']['name'][$key] . ' was not uploaded.';
                continue;
            }

             $file_tmp = file_get_contents($_FILES['file']['tmp_name']);
            $file_name = addslashes(trim($_FILES['file']['name']));
             try{

                 $stmtFileUpload->bindParam(':packid', $packid, PDO::PARAM_STR);
                 $stmtFileUpload->bindParam(':file_name', $file_name, PDO::PARAM_STR);
                 $stmtFileUpload->bindParam(':file_tmp', $file_tmp, PDO::PARAM_STR);
                 $stmtFileUpload->execute();

                 $dir = "devFiles";

                 if(is_dir($dir)==false){

                     mkdir($dir, 0700);
                 }

                 if(is_file($dir.'/'.$file_name)==false){

                     move_uploaded_file($file_tmp,$dir.'/'.$file_name);

                 }else{

                      $_SESSION['invalid'] = true;
                      header("Location: developer_invalid.php");
                      exit;
                 }

                 $_SESSION['thankyou'] = true;
                 header("Location: developerUpload_thankyou.php");
                 exit;
             }catch(PDOException $e){

                 $errors[] = $file_name . 'not saved in db.';
                 echo $e->getMessage();
             }
         }

2 个答案:

答案 0 :(得分:1)

您的问题是您没有与2行相关联的键给您一个错误(可能在您的代码中的其他位置),因此它们是数组(因为您没有选择特定键)。

您需要将密钥关联到$ _FILES数组。

$file_tmp = file_get_contents($_FILES['file']['tmp_name'][$key]);
$file_name = addslashes(trim($_FILES['file']['name'][$key]));

答案 1 :(得分:1)

由于您使用的是多次上传,因此在继续之前必须先为其分配keys

file_get_contents()trim()接受字符串,您在其中传递数组而不指定密钥。

试试这个:

$file_tmp = file_get_contents($_FILES['file']['tmp_name'][$key]);
$file_name = addslashes(trim($_FILES['file']['name'][$key]));