Mayx's Home Page https://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

  1. ---
  2. layout: post
  3. title: 如何利用MySQL数据库制作一个图站
  4. tags: [MySQL, 数据库, 图站, PHP]
  5. ---
  6. 最近白嫖了一个500GB的数据库,想想怎么利用一下?<!--more-->
  7. # Talk is cheap,show me the code
  8. 数据库建表:
  9. ```sql
  10. CREATE TABLE `FileUP` (
  11. `ID` int(11) NOT NULL AUTO_INCREMENT,
  12. `Name` text NOT NULL,
  13. `File` longblob NOT NULL,
  14. `Size` int(11) NOT NULL,
  15. PRIMARY KEY (`ID`)
  16. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
  17. ```
  18. PHP代码:
  19. ```php
  20. <?php
  21. $con=mysqli_connect("数据库地址","用户名","密码","数据库名");
  22. if (mysqli_connect_errno($con))
  23. {
  24. die("连接 MySQL 失败: " . mysqli_connect_error());
  25. }
  26. if ( $_GET[ID] != '' ) {
  27. header('Access-Control-Allow-Origin: *');
  28. $sql = "SELECT * FROM `FileUP` WHERE `ID` = '".addslashes($_GET[ID])."' ";
  29. $result = $con->query($sql);
  30. if ($result->num_rows > 0) {
  31. while($row = $result->fetch_assoc()){
  32. Header ( "Content-type: application/octet-stream" );
  33. Header ( "Accept-Ranges: bytes" );
  34. Header ( "Accept-Length: " . $row["Size"] );
  35. Header ( "Content-Disposition: attachment; filename=" . $row["Name"] );
  36. echo $row["File"];
  37. }
  38. }
  39. else {
  40. header('HTTP/1.1 404 NOT FOUND');
  41. }
  42. } else {
  43. echo '<title>Mayx图床</title>
  44. <h1>Mayx图床</h1><hr>
  45. 请选择需要上传的文件
  46. <form enctype="multipart/form-data" method="post" action="">
  47. <input type="file" name="File" />
  48. <input type="submit" name="submit" value="submit" />
  49. </form>
  50. <br />';
  51. if ( $_SERVER['REQUEST_METHOD'] == "POST" ) {
  52. $error = $_FILES['File']['error'];
  53. $tmp_name = $_FILES['File']['tmp_name'];
  54. $size = $_FILES['File']['size'];
  55. $name = $_FILES['File']['name'];
  56. print("\n");
  57. if ($error == UPLOAD_ERR_OK && $size > 0) {
  58. $fp = fopen($tmp_name, 'r');
  59. $content = fread($fp, $size);
  60. fclose($fp);
  61. $content = addslashes($content);
  62. $sql = "INSERT INTO `FileUP` (`Name`, `File`, `Size`)
  63. VALUES ('".$name."', '".$content."', '".$size."');";
  64. $con->query($sql);
  65. $sql = "select @@identity;";
  66. $result = $con->query($sql);
  67. while($row = $result->fetch_assoc()) {
  68. 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>';
  69. }
  70. } else {
  71. echo "文件上传错误!";
  72. }
  73. }
  74. echo '<hr />
  75. <center><a href="https://mabbs.github.io/">By Mayx</a></center>';
  76. }
  77. mysqli_close($con);
  78. ```
  79. # 缺点
  80. ~~MySQL保存文件有限制,好像只能存16MB左右😓~~(改max_allowed_packet就可以了)
  81. 另外就是断点续传的问题,这个问题我回头再想一想吧。
  82. # 演示(随时GG)
  83. <https://mayx.leanapp.cn/up.php>
  84. # 下一步改进的打算
  85. ~~想搞成切片上传,这样就没有文件大小上传的限制了。
  86. 不过这个好像得前端支持,先放个链接在这里吧:<https://github.com/fex-team/webuploader>~~
  87. 不打算改进了……

Powered by TurnKey Linux.