0

0

三步FTP实现PHP上传文件代码剖析_PHP教程

php中文网

php中文网

发布时间:2016-07-15 13:27:13

|

1090人浏览过

|

来源于php中文网

原创

想知道上传文件的详细步骤吗,下面我就带大家一起详细分析一下吧。利用PHP,你总是可以有多种方式来完成某个特定的任务。我们就拿文件上传举个例子。当然了,你可以按照传统的方式来使用HTTP文件上传,把文件直接传输到Web服务器磁盘上。你还可以用更加奇异的方式上传,用FTP协议两步就完成上传:从你的本地硬盘到Web服务器,然后再到FTP服务器。

PHP在本机同时支持FTP和HTTP上传,所以你可以根据自己应用程序的设计需要进行最佳的选择。使用PHP的FTP函数进行文件传输几乎与使用传统的FTP客户端相同——你会看到连函数的名字都和标准的FTP命令类似。关于HTTP文件上传的文章已经多得满天飞了,这就是为什么本文有必要把注意力放在基于FTP的文件上传上了(但是在后面给出的例子中,两种方式你都会看到)。要注意的是,本教程假设你已经安装好了PHP/Apache,而且HTTP文件上传和FTP的函数都已经激活了。本文可以从这里下载,所有的源代码都以单独的文本方式列出来了。

第一步:确信你拥有连接/上传到FTP服务器的权限

立即学习PHP免费学习笔记(深入)”;

PHP的FTP函数需要客户端-服务器连接,所以你需要在进行文件上传之前登录到目标服务器上。你的第一项任务是确信你已经拥有了完成这项任务的信任书。这一步可能看起来是理所当然的,但是你会惊奇地发现有多少开发人员忘了这么做,结果后来浪费大量的时间来解决因此而出现的问题。你可以通过使用命令行的FTP客户端登录到目标服务器上,以检查连接状况并尝试上传一个假文件。

PHP上传文件代码列表A

<ol class="dp-xml"><li class="alt"><span><span>$ftp  </span></span></li><li class=""><span>ftp</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>opensome.host.com  </span></li><li class="alt"><span>Connectedtosome.host.com.  </span></li><li class=""><span>220WelcometoleonFTPServer!  </span></li><li class="alt"><span>User:upload  </span></li><li class=""><span>331Useruploadokay,needpassword.  </span></li><li class="alt"><span>Password:***  </span></li><li class=""><span>230Restricteduserloggedin.  </span></li><li class="alt"><span>ftp</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>bin  </span></li><li class=""><span>200Typeokay.  </span></li><li class="alt"><span>ftp</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>hash  </span></li><li class=""><span>HashmarkprintingOn?ftp:(2048bytes/hashmark).  </span></li><li class="alt"><span>ftp</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>putfile.bin  </span></li><li class=""><span>200PORTcommandsuccessful.  </span></li><li class="alt"><span>150OpeningBINARYmodedataconnection.  </span></li><li class=""><span>##  </span></li><li class="alt"><span>226Transfercompleted.  </span></li><li class=""><span>ftp:4289bytessentin0.00Seconds4289000.00Kbytes/sec.  </span></li><li class="alt"><span>ftp</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>bye  </span></li><li class=""><span>221Goodbye. </span></li></ol>

一旦确认有相关的访问权限,你就可以登录出来。

悟智写作
悟智写作

易开即用的AI写作平台

下载

第二步:创建上传表单

然后,创建一个简单的HTML表单,向用户询问重要的参数——FTP服务器的访问信息、服务器上传的目录,以及完整的目录和上传文件的名字。下面这个例子就是这个表单的样式。

PHP上传文件代码列表B

<ol class="dp-xml"><li class="alt"><span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">html</span><span class="tag">></span></font></strong><span> </span></span></li><li class=""><span></span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">head</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">head</span><span class="tag">></span></font></strong><span> </span></li><li class="alt"><span></span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">body</span><span class="tag">></span></font></strong><span> </span></li><li class=""><span></span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">h2</span><span class="tag">></span></font></strong><span>Pleaseprovidethefollowinginformation:</span><strong><font color="#006699"><span class="tag"></</span><span class="tag-name">h2</span><span class="tag">></span></font></strong><span> </span></li><li class="alt"><span> </span></li><li class=""><span></span><span class="tag"><strong><font color="#006699"><</font></strong></span><span class="attribute"><font color="#ff0000">formenctype</font></span><span class="tag-name"><strong><font color="#006699">formenctype</font></strong></span><span>="multipart/form-data"</span><span class="attribute-value"><font color="#0000ff">method</font></span><span>="post"</span><span class="attribute"><font color="#ff0000">action</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"upload.php"</font></span><span class="tag"><strong><font color="#006699">></font></strong></span><span> </span></li><li class="alt"><span></span><span class="tag"><strong><font color="#006699"><</font></strong></span><span class="attribute"><font color="#ff0000">inputtype</font></span><span class="tag-name"><strong><font color="#006699">inputtype</font></strong></span><span>="hidden"</span><span class="attribute-value"><font color="#0000ff">name</font></span><span>="MAX_FILE_SIZE"</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"5000000"</font></span><span class="tag"><strong><font color="#006699">/></font></strong></span><span> </span></li><li class=""><span>Host</span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">br</span><span class="tag">/></span></font></strong><span> </span></li><li class="alt"><span></span><span class="tag"><strong><font color="#006699"><</font></strong></span><span class="attribute"><font color="#ff0000">inputtype</font></span><span class="tag-name"><strong><font color="#006699">inputtype</font></strong></span><span>="text"</span><span class="attribute-value"><font color="#0000ff">name</font></span><span>="host"</span><strong><font color="#006699"><span class="tag">/></span><span class="tag"><</span><span class="tag-name">p</span><span class="tag">/></span></font></strong><span> </span></li><li class=""><span>Username</span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">br</span><span class="tag">/></span></font></strong><span> </span></li><li class="alt"><span></span><span class="tag"><strong><font color="#006699"><</font></strong></span><span class="attribute"><font color="#ff0000">inputtype</font></span><span class="tag-name"><strong><font color="#006699">inputtype</font></strong></span><span>="text"</span><span class="attribute-value"><font color="#0000ff">name</font></span><span>="user"</span><strong><font color="#006699"><span class="tag">/></span><span class="tag"><</span><span class="tag-name">p</span><span class="tag">/></span></font></strong><span> </span></li><li class=""><span>Password</span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">br</span><span class="tag">/></span></font></strong><span> </span></li><li class="alt"><span></span><span class="tag"><strong><font color="#006699"><</font></strong></span><span class="attribute"><font color="#ff0000">inputtype</font></span><span class="tag-name"><strong><font color="#006699">inputtype</font></strong></span><span>="password"</span><span class="attribute-value"><font color="#0000ff">name</font></span><span>="pass"</span><strong><font color="#006699"><span class="tag">/></span><span class="tag"><</span><span class="tag-name">p</span><span class="tag">/></span></font></strong><span> </span></li><li class=""><span>Destinationdirectory</span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">br</span><span class="tag">/></span></font></strong><span> </span></li><li class="alt"><span></span><span class="tag"><strong><font color="#006699"><</font></strong></span><span class="attribute"><font color="#ff0000">inputtype</font></span><span class="tag-name"><strong><font color="#006699">inputtype</font></strong></span><span>="text"</span><span class="attribute-value"><font color="#0000ff">name</font></span><span>="dir"</span><strong><font color="#006699"><span class="tag">/></span><span class="tag"><</span><span class="tag-name">p</span><span class="tag">/></span></font></strong><span> </span></li><li class=""><span>File</span><strong><font color="#006699"><span class="tag"><</span><span class="tag-name">br</span><span class="tag">/></span></font></strong><span> </span></li><li class="alt"><span></span><span class="tag"><strong><font color="#006699"><</font></strong></span><span class="attribute"><font color="#ff0000">inputtype</font></span><span class="tag-name"><strong><font color="#006699">inputtype</font></strong></span><span>="file"</span><span class="attribute-value"><font color="#0000ff">name</font></span><span>="file"</span><strong><font color="#006699"><span class="tag">/></span><span class="tag"><</span><span class="tag-name">p</span><span class="tag">/></span></font></strong><span> </span></li><li class=""><span></span><span class="tag"><strong><font color="#006699"><</font></strong></span><span class="attribute"><font color="#ff0000">inputtype</font></span><span class="tag-name"><strong><font color="#006699">inputtype</font></strong></span><span>="submit"</span><span class="attribute-value"><font color="#0000ff">name</font></span><span>="submit"</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"UploadFile"</font></span><span class="tag"><strong><font color="#006699">/></font></strong></span><span> </span></li><li class="alt"><span></span><strong><font color="#006699"><span class="tag"></</span><span class="tag-name">form</span><span class="tag">></span></font></strong><span> </span></li><li class=""><span></span><strong><font color="#006699"><span class="tag"></</span><span class="tag-name">body</span><span class="tag">></span></font></strong><span> </span></li><li class="alt"><span></span><strong><font color="#006699"><span class="tag"></</span><span class="tag-name">html</span><span class="tag">></span></font></strong><span> </span></li></ol>

在这里,元素用来生成文件选择对话框,用户通过它来选择要被上传的文件。元素然后就把表单数据编码成为多个部分提交,这可以让PHP更容易地识别提交的文件组件。

第三步:创建PHP上传处理程序

一旦表单被提交给了Web服务器,下一步(也是最后一步)是使用PHP的FTP函数按照用户提供的访问信任书把它传输到目标服务器上。下面就是完成上述所有工作的脚本(upload.php)。

PHP上传文件代码列表C

<ol class="dp-xml"><li class="alt"><span><span class="tag"><?</span><span class="tag-name">php</span><span> </span></span></li><li class=""><span>//getFTPaccessparameters  </span></li><li class="alt"><span>$</span><span class="attribute">host</span><span>=$_POST['host'];  </span></li><li class=""><span>$</span><span class="attribute">user</span><span>=$_POST['user'];$</span><span class="attribute">pass</span><span>=$_POST['pass'];  </span></li><li class="alt"><span>$</span><span class="attribute">destDir</span><span>=$_POST['dir'];  </span></li><li class=""><span>$</span><span class="attribute">workDir</span><span>=</span><span class="attribute-value">"/usr/local/temp"</span><span>;//definethisasperlocalsystem  </span></li><li class="alt"><span>//gettemporaryfilenamefortheuploadedfile  </span></li><li class=""><span>$</span><span class="attribute">tmpName</span><span>=</span><span class="attribute-value">basename</span><span>($_FILES['file']['tmp_name']);  </span></li><li class="alt"><span>//copyuploadedfileintocurrentdirectory  </span></li><li class=""><span>move_uploaded_file($_FILES['file']['tmp_name'],$workDir."/".$tmpName)ordie("Cannotmoveuploadedfiletoworkingdirectory");  </span></li><li class="alt"><span>//openconnection  </span></li><li class=""><span>$</span><span class="attribute">conn</span><span>=</span><span class="attribute-value">ftp_connect</span><span>($host)ordie("Cannotinitiateconnectiontohost");  </span></li><li class="alt"><span>//sendaccessparameters  </span></li><li class=""><span>ftp_login($conn,$user,$pass)ordie("Cannotlogin");  </span></li><li class="alt"><span>//performfileupload  </span></li><li class=""><span>$</span><span class="attribute">upload</span><span>=</span><span class="attribute-value">ftp_put</span><span>($conn,$destDir."/".$_FILES['file']['name'],$workDir."/".$tmpName,FTP_BINARY);  </span></li><li class="alt"><span>//checkuploadstatus  </span></li><li class=""><span>//displaymessage  </span></li><li class="alt"><span>if(!$upload){  </span></li><li class=""><span>echo"Cannotupload";  </span></li><li class="alt"><span>}else{  </span></li><li class=""><span>echo"Uploadcomplete";  </span></li><li class="alt"><span>}  </span></li><li class=""><span>//closetheFTPstream  </span></li><li class="alt"><span>ftp_close($conn);  </span></li><li class=""><span>//deletelocalcopyofuploadedfile  </span></li><li class="alt"><span>unlink($workDir."/".$tmpName)ordie("Cannotdeleteuploadedfilefromworkingdirectory--manualdeletionrecommended");  </span></li><li class=""><span></span><span class="tag">?></span><span> </span></li></ol>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446550.htmlTechArticle想知道上传文件的详细步骤吗,下面我就带大家一起详细分析一下吧。利用PHP,你总是可以有多种方式来完成某个特定的任务。我们就拿文...

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2.1万人学习

550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号