我允许用户将文件提交到我网站上的数据库中。但每次提交文件时,我都会收到这些错误消息
( ! ) 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();
}
}
答案 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]));