使用docker-compose建立一个简陋的文件上传网站

青瓦 / 2024-06-04 / 原文

闲聊

因为目前在学校,有时候懒得带U盘,机房的电脑没有ssh,自然也就没有scp了,所以闲来无聊就做个文件上传顺便练练技术。

最后弄了两天才弄好,最后又因为我服务器带宽那些太小没法传大文件,最后也算是小白练练技术吧。

正文

这次的实验是用nginx+php做的,docker-compose做托管

相关代码

实验文件结构

Dockerfile里就只是用php:7.4-fpm再设置一个工作目录;

docker-compose.yml文件内容

这里的networks可能是白设置了,我在nginx的配置文件直接使用的php的IP地址,关于那个version: "3"我也搞不懂,之前使用3.9显示版本低,搜了搜说最新版本没用这个了,所以就把它删了。

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/var/www/html
    depends_on:
      - php
    networks:
      - webnet

  php:
    build: ./
    volumes:
      - ./html:/var/www/html
    ports:
      - "9000:9000"
    networks:
      - webnet

networks:
   webnet:
     driver: bridge

nginx.conf内容

很平常的配置,就是与php连接那里弄了许久,第一天试了php:9000;ip:9000;php-upstream都没成功,第二天加了fastcgi_split_path_info这个,使用ip:9000就成功了;

还有一个可能,第二天我再次看了这个代码,它location ~ \\.php$多了个\,后面就给删了,所以我怀疑前一天是因为这个干的没成功。

events {
    worker_connections 1024;
}

http {

    server {
        listen 80;
        server_name localhost;
        root /var/www/html;
        index index.php index.html index.htm;

        location / {
            try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
            root /var/www/html;
            include fastcgi_params;
            fastcgi_pass 192.168.64.2:9000;
            fastcgi_index index.php;
            fastcgi_split_path_info  ^(.+\.php)(/.+)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

index.php内容

下面这两个文件内容都是上网搜的

<!DOCTYPE html>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
    <h2>上传文件</h2>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="上传文件" name="submit">
    </form>
</body>
</html>

upload.php内容

这个文件我后面改了那个检查文件大小,结果就一直访问超时

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// 检查文件是否已存在
if (file_exists($target_file)) {
    echo "抱歉,文件已存在。";
    $uploadOk = 0;
}

// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "抱歉,您的文件太大。";
    $uploadOk = 0;
}

// 允许的文件格式
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
    echo "抱歉,只允许 JPG, JPEG, PNG, GIF 文件格式。";
    $uploadOk = 0;
}

// 检查 $uploadOk 是否被设置为 0
if ($uploadOk == 0) {
    echo "抱歉,您的文件没有上传。";
// 如果一切都好,尝试上传文件
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "文件 ". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). " 上传成功。";
    } else {
        echo "抱歉,上传文件时出现了错误。";
    }
}
?>