我创建的东西像谷歌驱动器或一些云使用PHP和HTML,你可以保存你的文件,但我有问题保存文件到二进制代码并上传到数据库.我的意思是我想这样做:
用户通过html格式上传文件-〉将文件转换为二进制-〉将其保存在数据库中。用户可以通过一些按钮或smh下载他的文件-〉文件从二进制转换为文件。
我试着做一个脚本什么将保存bin代码在我的数据库中,但当我试图发送一些文件,我得到这样的错误:
Fatal error: Uncaught TypeError: fopen(): Argument #1 ($filename) must be of type string, array given in C:\xampp\htdocs\fileshub\src\send_file.php:12 Stack trace: #0 C:\xampp\htdocs\fileshub\src\send_file.php(12): fopen(Array, 'rb') #1 {main} thrown in C:\xampp\htdocs\fileshub\src\send_file.php on line 12
这是我在html中的表单:
<form class="upload-form" action="./src/send_file.php" method="post" enctype="multipart/form-data"><br>
<input type="text" name="filename" id="filename" placeholder="File name">
<input type="file" name="file" id="file"><br>
<button type="sumbit" class="submit">Submit</button>
</form>
这是我在php中编写的脚本:
<?php
session_start();
include "../src/db_conn.php";
if(isset($_SESSION['id'])) {
$id = $_SESSION['id']; // id usera
$filename = $_POST['filename']; // nazwa pliku
$file = $_FILES['file'];
$data = fopen ($file, 'rb');
$size = filesize ($file);
$contents = fread ($data, $size);
fclose ($data);
$binfile = base64_encode($contents);
if(!$filename|| !$file) {
header("Location: ../index.php?error=Enter your data!");
exit();
} else {
$check = "SELECT bin_code FROM files WHERE user_id = '$id' AND bin_code = '$binfile' AND file_name = '$filename'";
$result = mysqli_query($conn, $check);
if(mysqli_num_rows($result) === 1){
header("Location: ../index.php?error=Your file exsist.");
exit();
}else {
$save = "INSERT INTO files (user_id, file_name, bin_code) values('$id', '$filename', $binfile)";
$saveresult = mysqli_query($conn, $save);
$saveresult;
header("Location: ../index.php?error=Your file has been saved");
exit();
}
}
}
?>
数据库连接:
<?php
$server = "localhost";
$user ="root";
$password = "";
$db = "fileshub";
$conn = mysqli_connect($server, $user, $password, $db);
?>
如果你知道我的问题的任何解决方案,请帮助:)
Files tableUsers table and example user显示器
2条答案
按热度按时间xqkwcwgp1#
我相信你知道,上传一个图像到一个目录是一个更有效的方式来存储它。
请注意,$_FILES ['file']是一个
array
,包含了上传文件的所有信息,对于您的情况,您必须使用上传文件的filename
。(即“tmp_name”)所以改变
至
另一方面,另一种方法是使用file_get_contents代替fopen、fread等。
z3yyvxxp2#
所以首先你需要确保你有一个PHP可以访问的目录,并且有权限访问,但是不能公开访问.通常,在web主机上web根文件夹是home目录的一个子文件夹,所以你可以在那里创建一个新的文件夹来存储文件.例如:
或者,如果您的Web服务器是Apache,则可以在Web根目录中创建一个文件夹,并使用.htaccess文件保护该文件夹
在文件服务器上存储上传文件的最简单方法是使用PHP提供的move_uploaded_file命令,下面是我将如何实现这一点: