mirror of
				https://github.com/Mabbs/mabbs.github.io
				synced 2025-10-28 03:27:44 +00:00 
			
		
		
		
	
		
			
	
	
		
			101 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			101 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | 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>~~     | |||
|  |   不打算改进了…… |