如何使用 PHP 在文件上传后重定向用户

2024-07-04

正如标题所说,我希望在用户上传文件后将用户重定向回主页,到目前为止,这些代码所做的只是显示一个包含相关信息(文件名、文件大小等)的页面。我想要将他们重定向到自定义成功页面。

HTML:

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

PHP:

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
 "Upload: " . $_FILES["file"]["name"] . "<br>";
 "Type: " . $_FILES["file"]["type"] . "<br>";
 "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
 "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

if (file_exists("upload/" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. ";
  }
else
  {
  move_uploaded_file($_FILES["file"]["tmp_name"],
  "upload/" . $_FILES["file"]["name"]);
  header('Location: success.html');
  }
  }
 }
 else
 {
   echo "Invalid file";
 }
 ?>

假设您的成功页面是“success.html”,您可以使用:

    header('Location: success.html');

您需要删除所有回显行,因为这会导致“标头已发送”异常。

从工作流程的角度来看,回显到屏幕然后重定向也是没有意义的。

删除以下行:

echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

您还可以将所有文件类型存储在数组中,并使您的代码更加简洁:

$allowedTypes = array("image/gif",..,..,"image/png");

然后使用

in_array($_FILES["file"]["type"], $allowedTypes);

完整代码:

<?
$allowedExts = array("gif", "jpeg", "jpg", "png");
$allowedTypes = array("image/gif",'..','..',"image/png");

$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((in_array($_FILES["file"]["type"], $allowedTypes))
   && ($_FILES["file"]["size"] < 20000)
   && in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
   echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{

if (file_exists("upload/" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. ";
  }
  else
  {
    move_uploaded_file($_FILES["file"]["tmp_name"],  "upload/" . $_FILES["file"]["name"]);
    header('Location: success.html');
  }
  }
}
else
{
echo "Invalid file";
}
?>

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PHP 在文件上传后重定向用户 的相关文章

随机推荐

  • 使用指令刷新窗口时刷新元素高度和大小

    目前 以下指令在页面加载时获取元素的宽度和高度 如何让它在窗口调整大小时刷新它 angular module adsomaApp directive elementSize function timeout return restrict
  • 从子列表中切片元素 - Python

    我想从中返回数字 5 list 1 1 2 3 4 5 6 我以为这会起作用 但事实并非如此 print list 1 1 1 它返回一个空列表 它是索引 1 第二个列表 和位置 1 列表中的第二个数字 这不应该起作用吗 您需要两个单独的操
  • 特别处理Akka流的第一个元素

    有没有一种惯用的方法来处理 Akka 流Source第一个元素以特殊的方式 我现在拥有的是 var firstHandled false source map elem gt if firstHandled handle specially
  • Django - 旋转图像并保存

    我想在 django 中为图像添加 向左旋转 和 向右旋转 按钮 这似乎很容易 但我浪费了一些时间 尝试了在 stackoverflow 上找到的一些解决方案 但还没有结果 我的模型有一个 FileField class MyModel m
  • 如何使用 Spark SQL 解析 JSON 对象数组

    现在 JSON 数据如下 Id 11 data package com browser1 activetime 60000 package com browser6 activetime 1205000 package com browse
  • 使用正则表达式替换换行符

    如何使用正则表达式替换所有类型的换行符 CR LF 和 CrLf 我尝试过 n 和 r 的不同组合 但没有找到全部 formatedString System Text RegularExpressions Regex Replace te
  • eslint 导入/订购反应打字稿

    我想将 eslint import order 配置为自定义配置 但我无法使其在反应打字稿文件中工作 这是我的规则 import order error groups builtin external internal pathGroups
  • 使用蒙特卡罗方法计算 PI 给出的答案不精确

    我正在尝试使用蒙特卡罗方法计算 PI 无论 MAXLEN 有多大 我的代码给出的结果都是 3 000 经过多次调试 我无法明白我做错了什么 include
  • Firefox 和 Chrome 中的字体看起来不同

    我正在使用 Google Web Font 的 PT sans font family PT Sans Arial serif 但在 Chrome 和 Firefox 中看起来有所不同 我需要添加什么才能使其在所有浏览器中看起来都相同吗 对
  • Rails rspec 和omniauth(集成测试)

    我的 Rails 3 2 应用程序使用 OmniAuth 和 Devise 通过 Twitter 登录 身份验证系统运行良好 我想在 rspec 中编写一个集成测试以确保一切正常 使用维基中的信息 我编写了以下内容 但我知道我遗漏了一些东西
  • “错误:在 Grad 类中找不到 Main 方法,请将 main 方法定义为:public static void main(String[] args)”

    我收到这条消息 通过java编译器 错误 在 Grad 类中找不到 Main 方法 请将 main 方法定义为 公共静态无效主 字符串 参数 这是我的 来自书中的 代码 class Grad String naziv nepoznat in
  • Symfony2 验证日期时间 1 应早于日期时间 2

    我正在查看 Symfony2 验证参考 但没有找到我需要的东西 我有一个就业班开始日期 and EndDate 我想添加一个 Assert 来验证开始日期始终早于结束日期 是否有比较类属性作为验证约束的标准方法 或者我应该创建自定义验证约束
  • typedef 和 Define 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 c中typedef和 define一样吗 https stackoverflow com questions 1666353 is typedef and define the same in c 对
  • 如何在C语言中删除linux上的root权限?

    我想以非 root 用户身份分叉 执行和编程 同时父级保留 root 权限 伪代码 pid fork if pid 0 if RunAsUser ConvertStringToUserId John false stop if RunAsU
  • 如何实现一个单链表队列,使其入队和出队时间复杂度为O(1)?

    这是一个练习 来自CLRS 3rd 10 2 3 通过单向链表 L 实现队列 ENQUEUE 和 DEQUEUE 操作仍然需要 O 1 时间 使用单链表实现队列并不难 我的问题是关于时间复杂度的 如何实现耗时 O 1 的 ENQUEUE 和
  • 使用 Python 在 Yandex Images 中反向搜索图像

    我对自动化反向图像搜索感兴趣 Yandex 特别适合捕捞鲶鱼 甚至比 Google 图片还要好 因此 请考虑以下 Python 代码 import requests import webbrowser try filePath C path
  • Facebook 回调 JSON 有时不返回电子邮件

    Facebook 图形 API 我正在请求电子邮件权限 除了某些用户之外 一切正常 json 不返回电子邮件字段 我不知道为什么会发生这种情况 代码是相同的 它适用于所有用户 返回电子邮件字段 除了 100 个左右的用户中的 1 个 其中
  • 隐藏另一个布局的浮动操作按钮

    我有一个FloatingActionButton五月之内activity main xml名为的布局fabBtn 我的应用程序是用ViewPager和三个Fragments 我想隐藏FloatingActionButton当我的第一次Fra
  • Android Studio 0.2.7 使用 Gradle 构建异常

    我正在从 Eclipse 迁移到 Android Studio 尽管由于 Android Studio 仍处于 预览 模式 但我正在缓慢且增量地迁移 自从更新到最新版本的 Android Studio 0 2 7 以来 我在默认构建过程中遇
  • 如何使用 PHP 在文件上传后重定向用户

    正如标题所说 我希望在用户上传文件后将用户重定向回主页 到目前为止 这些代码所做的只是显示一个包含相关信息 文件名 文件大小等 的页面 我想要将他们重定向到自定义成功页面 HTML