简单的PHP图床程序
首先,我们需要创建一个登录页面,让用户输入密码进行登录验证。然后,我们需要创建一个上传页面,允许用户上传图片。接着,我们需要在上传图片的时候,给图片随机生成一个文件名,并将其保存在uploads目录下。最后,我们需要创建一个页面,用于展示uploads目录下的图片,按照上传时间倒序显示,并支持分页显示。让我们开始吧!
首先,我们需要创建一个登录页面:login.php。以下是一个简单的登录页面示例代码:
阿里云限量代金券 | 此广告位出租25元/月 |
<?php session_start(); if(isset($_POST['password'])) { $password = $_POST['password']; if($password == 'your_password') { $_SESSION['logged_in'] = true; header('Location: upload.php'); exit(); } else { $error = 'Invalid password!'; } } ?> <!DOCTYPE html> <html> <head> <title>Login</title> </head> <body> <h1>Login</h1> <?php if(isset($error)) { ?> <p><?php echo $error; ?></p> <?php } ?> <form method="post"> <label>Password:</label> <input type="password" name="password" required> <button type="submit">Login</button> </form> </body> </html>
在这个示例代码中,我们使用了PHP的session来保存用户的登录状态。当用户输入正确的密码后,我们将SESSION['logged_in']设置为true,然后重定向到上传页面upload.php。如果密码输入错误,我们将error设置为'Invalid password!',并在页面上显示错误消息。
接下来,我们需要创建一个上传页面upload.php。以下是一个简单的上传页面示例代码:
<?php session_start(); if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { header('Location: login.php'); exit(); } if(isset($_FILES['file'])) { $file_name = $_FILES['file']['name']; $file_tmp = $_FILES['file']['tmp_name']; $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); $allowed_ext = array('jpg', 'jpeg', 'png', 'gif'); if(in_array($file_ext, $allowed_ext)) { $new_file_name = uniqid('', true) . '.' . $file_ext; move_uploaded_file($file_tmp, 'uploads/' . $new_file_name); header('Location: index.php'); exit(); } else { $error = 'Invalid file type!'; } } ?> <!DOCTYPE html> <html> <head> <title>Upload</title> </head> <body> <h1>Upload</h1> <?php if(isset($error)) { ?> <p><?php echo $error; ?></p> <?php } ?> <form method="post" enctype="multipart/form-data"> <label>Choose file:</label> <input type="file" name="file" required> <button type="submit">Upload</button> </form> </body> </html>
在这个示例代码中,我们首先检查用户是否已经登录。如果用户没有登录,我们将重定向到登录页面login.php。如果用户已经登录,我们将检查用户是否上传了文件。如果用户上传了文件,我们将检查文件类型是否为jpg、jpeg、png或gif。如果文件类型正确,我们将为文件生成一个随机文件名,并将文件保存在uploads目录下。最后,我们将重定向到主页index.php。
现在,我们需要创建一个主页index.php,用于展示uploads目录下的图片。以下是一个简单的主页示例代码:
<?php session_start(); if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { header('Location: login.php'); exit(); } $per_page = 20; $page = isset($_GET['page']) ? intval($_GET['page']) : 1; $start = ($page - 1) * $per_page; $files = array(); $dir = opendir('uploads'); while($file = readdir($dir)) { if($file != '.' && $file != '..') { $files[$file] = filemtime('uploads/' . $file); } } closedir($dir); arsort($files); $total_files = count($files); $total_pages = ceil($total_files / $per_page); $files = array_slice($files, $start, $per_page); ?> <!DOCTYPE html> <html> <head> <title>Gallery</title> </head> <body> <h1>Gallery</h1> <a href="upload.php">Upload</a> <hr> <?php foreach($files as $file => $time) { ?> <a href="uploads/<?php echo $file; ?>"> <img src="uploads/<?php echo $file; ?>" style="max-width: 200px; max-height: 320px;"> </a> <?php } ?> <hr> <?php for($i = 1; $i <= $total_pages; $i++) { ?> <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php } ?> </body> </html>
在这个示例代码中,我们首先检查用户是否已经登录。如果用户没有登录,我们将重定向到登录页面login.php。如果用户已经登录,我们将获取uploads目录下的所有文件,并将它们按照上传时间倒序排序。我们还使用了分页功能,每页显示10个图片。最后,我们将循环遍历每个文件,并将其显示在页面上。我们还在页面底部添加了分页链接,允许用户浏览更多的图片。
这就是一个简单的PHP单文件图床的实现方法。需要注意的是,这个示例代码并没有考虑安全性问题,例如文件上传的安全性、SQL注入等问题。在真实的应用中,您需要考虑这些安全性问题并采取相应的措施。
本程序在php7.2下测试运行正常无报错