mirror of https://github.com/Mabbs/mabbs.github.io
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							100 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
	
	
							100 lines
						
					
					
						
							3.0 KiB
						
					
					
				--- | 
						|
layout: post | 
						|
title: 如何利用MySQL数据库制作一个图站 | 
						|
tags: [MySQL, 数据库, 图站, PHP] | 
						|
---  | 
						|
 | 
						|
最近白嫖了一个500GB的数据库,想想怎么利用一下?<!--more-->     | 
						|
 | 
						|
# Talk is cheap,show me the code | 
						|
 | 
						|
  数据库建表: | 
						|
```sql | 
						|
CREATE TABLE `FileUP` ( | 
						|
 `ID` int(11) NOT NULL AUTO_INCREMENT, | 
						|
 `Name` text NOT NULL, | 
						|
 `File` longblob NOT NULL, | 
						|
 `Size` int(11) NOT NULL, | 
						|
 PRIMARY KEY (`ID`) | 
						|
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  | 
						|
``` | 
						|
 | 
						|
  PHP代码: | 
						|
```php | 
						|
<?php | 
						|
$con=mysqli_connect("数据库地址","用户名","密码","数据库名");  | 
						|
if (mysqli_connect_errno($con))  | 
						|
{  | 
						|
    die("连接 MySQL 失败: " . mysqli_connect_error());  | 
						|
} | 
						|
 | 
						|
if ( $_GET[ID] != '' ) { | 
						|
    header('Access-Control-Allow-Origin: *'); | 
						|
    $sql = "SELECT * FROM `FileUP` WHERE `ID` = '".addslashes($_GET[ID])."' "; | 
						|
    $result = $con->query($sql); | 
						|
    if ($result->num_rows > 0) { | 
						|
        while($row = $result->fetch_assoc()){  | 
						|
         Header ( "Content-type: application/octet-stream" );  | 
						|
         Header ( "Accept-Ranges: bytes" );  | 
						|
         Header ( "Accept-Length: " . $row["Size"] );  | 
						|
         Header ( "Content-Disposition: attachment; filename=" . $row["Name"] ); | 
						|
        echo $row["File"]; | 
						|
    } | 
						|
}  | 
						|
    else { | 
						|
 header('HTTP/1.1 404 NOT FOUND');  | 
						|
} | 
						|
} else { | 
						|
echo '<title>Mayx图床</title> | 
						|
<h1>Mayx图床</h1><hr> | 
						|
请选择需要上传的文件 | 
						|
<form enctype="multipart/form-data" method="post" action=""> | 
						|
  <input type="file" name="File" /> | 
						|
  <input type="submit" name="submit" value="submit" /> | 
						|
</form> | 
						|
<br />'; | 
						|
if ( $_SERVER['REQUEST_METHOD'] == "POST" ) { | 
						|
 $error = $_FILES['File']['error']; | 
						|
 $tmp_name = $_FILES['File']['tmp_name']; | 
						|
 $size = $_FILES['File']['size']; | 
						|
 $name = $_FILES['File']['name']; | 
						|
 print("\n"); | 
						|
 if ($error == UPLOAD_ERR_OK && $size > 0) { | 
						|
  $fp = fopen($tmp_name, 'r'); | 
						|
  $content = fread($fp, $size); | 
						|
  fclose($fp);   | 
						|
  $content = addslashes($content); | 
						|
  $sql = "INSERT INTO `FileUP` (`Name`, `File`, `Size`) | 
						|
 VALUES ('".$name."', '".$content."', '".$size."');"; | 
						|
  $con->query($sql); | 
						|
  $sql = "select @@identity;"; | 
						|
  $result = $con->query($sql); | 
						|
while($row = $result->fetch_assoc()) { | 
						|
echo '上传完成,文件下载地址:<a href="//'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?ID=".$row['@@identity'].'" >'.$_SERVER['HTTP_X_FORWARDED_PROTO'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?ID=".$row['@@identity'].'</a>'; | 
						|
} | 
						|
 | 
						|
 } else { | 
						|
  echo "文件上传错误!"; | 
						|
 } | 
						|
 | 
						|
} | 
						|
 | 
						|
echo '<hr /> | 
						|
<center><a href="https://mabbs.github.io/">By Mayx</a></center>'; | 
						|
 | 
						|
} | 
						|
 | 
						|
mysqli_close($con); | 
						|
``` | 
						|
 | 
						|
# 缺点 | 
						|
  ~~MySQL保存文件有限制,好像只能存16MB左右😓~~(改max_allowed_packet就可以了)    | 
						|
  另外就是断点续传的问题,这个问题我回头再想一想吧。 | 
						|
 | 
						|
# 演示(随时GG) | 
						|
  <https://mayx.leanapp.cn/up.php> | 
						|
 | 
						|
# 下一步改进的打算 | 
						|
  ~~想搞成切片上传,这样就没有文件大小上传的限制了。    | 
						|
  不过这个好像得前端支持,先放个链接在这里吧:<https://github.com/fex-team/webuploader>~~     | 
						|
  不打算改进了……
 | 
						|
 |