首页 > 编程语言 >php 文件上传

php 文件上传

时间:2024-09-30 11:25:54浏览次数:1  
标签:FILES 文件 upload file php 上传

环境

  • ubuntu 22.04
  • thinkphp 6.1.0
  • php-fpm8.1
  • nginx 1.18.0

实现文件上传

本质上就是 html 页面这边提交一个表单, 请求上传文件

<form action="http://192.168.1.13:8888/view/upload" method="post" name="file_upload" target="_blank" enctype="multipart/form-data">
    <table>
        <tr>
            <td>file name: </td>
            <td><input name="upload_file", type="file"></td>
        </tr>
        <tr>
            <td><input name="submit_button", type="submit", value="submit"></td>
        </tr>
    </table>
</form>

然后php 这边获取相关变量, 并且保存相关文件.

// 尝试存储文件
if ($_FILES['upload_file']['error'] == 0) { // 文件上传成功
    // 存储文件
    // 不会自动创建文件夹; 需要有 www-data 的写入权限
    // 文件大小限制在php 中配置, 我这里使用的是php-fpm来解释php文件, 所以在 /etc/php/8.1/fpm/php.ini 中配置.
    // (File Uploads)
    // 临时文件会被 php-fpm 自动删除
    $file_path = '/var/www/html/test/learning-php/upload/';
    move_uploaded_file($_FILES['upload_file']['tmp_name'], $file_path . $_FILES['upload_file']['name']);
}

一些需要注意的点

  • 上传文件, 首先会生成一个临时文件, 默认在/tmp/目录下, 可以在php.ini配置文件中修改位置.
  • 跟上传文件相关的变量在php中存储在变量$_FILES中, 在thinkphp中可以通过dump()方法打印输出.
    dump($_FILES) 输出如下图片:
    一个输出例子
  • 使用move_uploaded_file()方法将文件保存起来, 即将临时文件保存到真正需要保存的位置.
  • 没有文件也会上传成功的, 需要服务器自己判断.
  • 上传文件相关限制, 比如文件大小限制等, 在php.ini中配置, 可以搜索关键字file upload快速定位.
  • 默认php-fpm 的执行用户是 www-data, 所以需要保证目标文件夹有www-data用户的写入权限.
  • 默认不会创建目的地文件夹, 上传前需要自己先创建好.
  • 如何有组织, 有结构的上传整个文件夹? 好像不行, 因为上传不会创建相关的文件夹, 比如文件名为sub/test.text, php拿到的只是test.text.

扩展

其实nginx本身可以通过配置直接实现一个文件上传服务器, 手册上能找到这句话

A file uploaded with the PUT method is first written to a temporary file, and then the file is renamed.

我需要做的就是通过配置控制这个文件临时文件写在哪里, 然后指定真正的位置, 再加上一些限制, 比如限制文件大小等. 我的配置如下

访问方式如下:
curl -T /path/to/filename http://host:port/upload/custum-filename.
本地简单的测试是没有问题的.

也有一些担忧, 没有看到实际相关的例子, 也没有经过专业的检测, 不知道一个正常的上传服务器是否可以这么做.

标签:FILES,文件,upload,file,php,上传
From: https://www.cnblogs.com/yinchaows/p/18214478

相关文章

  • 11招秘籍,用Python下载文件!
    今天我们一起学习如何使用不同的Python模块从web下载文件。此外,你将下载常规文件、web页面、AmazonS3和其他资源。如果你正在学习Python并且找不到方向的话可以试试我这一份学习方法+籽料呀!点击领取(不要米米) 最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的......
  • php email功能实现:详细步骤与配置技巧?
    phpemail发送功能详细教程?如何使用phpemail服务?无论是用户注册、密码重置,还是订单确认,电子邮件都是与用户沟通的重要手段。AokSend将详细介绍如何实现phpemail功能,并提供一些配置技巧,帮助你更好地掌握这一关键技术。phpemail:配置环境在开始使用phpemail功能之前,确保你......
  • thinkphp6调用微信商户支付-合单支付工具代码开发
    合单支付基本在加盟店或是分公司或是营销系统里面常见。他的出现,打破了传统提现支付或是转账支付。他的业务原理其实很简单,就是需要优先申请非普通商户,其次是每个入驻的商户都需要申请普通商户。在这之前一定要申请好对应的场景服务,比如公众号支付就需要优先申请公众号,小程序支......
  • PbootCMS如何实现上传的文件使用原名称
    要在PbootCMS中实现非图片类文件使用原名称保存,可以通过修改核心文件来实现。以下是具体的修改步骤和示例代码。修改步骤打开文件打开文件:\core\function\file.php获取文件真实名称在 file.php 文件中找到以下代码:php $file_ext=strtolower(end($file));......
  • pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
    遇到PbootCMS模板中出现类似 PHPWarning:Unknown:open_basedirrestrictionineffect.File 的错误提示,通常是由于PHP的 open_basedir 配置限制导致的。这种情况下,可以通过调整PHP版本或修改 open_basedir 配置来解决问题。解决方案1.更换PHP版本根据你的描......
  • mujoco 3.x版本导入urdf/xml文件并仿真显示
    我是在Ubuntu22.04下操作的~想要实现机器人相关控制,你需要正确地安装ROS2、mujoco等~关于URDFURDF(UniversalRobotDescriptionFormat)是一种用于描述机器人模型的标准格式,其实就相当于3维模型~常用于仿真。URDF文件(.urdf)通常以XML格式编写,允许定义机器人的链接(links)、......
  • PbootCMS百度编辑器ueditor在PHP7下多图上传名字重复问题
    针对百度编辑器UEditor在PHP7环境下多图上传名字重复的问题,PbootCMSV1.3.8已经进行了修复。以下是具体的修改步骤和详细说明,供遇到类似问题的开发者参考:修改步骤修改 /ueditor/dialogs/attachment/attachment.js 文件将 _this.fileList.push(json); 修改为:javascri......
  • 一文详解:跨国医疗机构安全合规文件流转的跨境传输解决办法
    跨国医疗机构是指那些能够在不同国家之间提供医疗服务的机构,它们通常具有国际化的医疗网络、专业的医疗团队和先进的医疗设备。这些机构不仅能够帮助患者获取国外优质的医疗资源,还能提供包括医疗咨询、治疗安排、病历翻译、签证办理、海外陪同等在内的全方位服务。跨国医疗机构......
  • 木偶人在线音乐播放器PHP网站源码
    源码介绍木偶人音乐播放器是一款开源的基于Meting的在线音乐播放器。具有音乐搜索、播放、下载、歌词同步显示、个人网易云音乐播放列表同步等功能。前端界面参照QQ音乐网页版进行布局,同时采用了流行的响应式设计,无论是在PC端还是在手机端,均能给您带来原生app般的使......
  • 使用rsync命令同步两台服务器之间的文件
    rsync是一种非常常用的文件同步工具,能够在两台服务器之间高效地同步文件和目录。它支持增量传输,只同步发生了变化的文件部分,极大提升了传输效率。以下是使用rsync命令同步两台服务器之间文件的步骤与详细示例。前提条件两台服务器,假设它们的IP分别为ServerA:192.16......