三步FTP实现PHP上传文件代码剖析
创始人
2024-06-11 18:51:06
0

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

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

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

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

PHP上传文件代码列表A

  1. $ftp  
  2. ftp>opensome.host.com  
  3. Connectedtosome.host.com.  
  4. 220WelcometoleonFTPServer!  
  5. User:upload  
  6. 331Useruploadokay,needpassword.  
  7. Password:***  
  8. 230Restricteduserloggedin.  
  9. ftp>bin  
  10. 200Typeokay.  
  11. ftp>hash  
  12. HashmarkprintingOn?ftp:(2048bytes/hashmark).  
  13. ftp>putfile.bin  
  14. 200PORTcommandsuccessful.  
  15. 150OpeningBINARYmodedataconnection.  
  16. ##  
  17. 226Transfercompleted.  
  18. ftp:4289bytessentin0.00Seconds4289000.00Kbytes/sec.  
  19. ftp>bye  
  20. 221Goodbye. 

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

第二步:创建上传表单

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

PHP上传文件代码列表B

  1.  
  2.  
  3.  
  4. Pleaseprovidethefollowinginformation:

     
  5.  
  6. <formenctypeformenctype="multipart/form-data"method="post"action="upload.php"> 
  7. <inputtypeinputtype="hidden"name="MAX_FILE_SIZE"value="5000000"/> 
  8. Host
     
  9. <inputtypeinputtype="text"name="host"/>

     

  10. Username
     
  11. <inputtypeinputtype="text"name="user"/>

     

  12. Password
     
  13. <inputtypeinputtype="password"name="pass"/>

     

  14. Destinationdirectory
     
  15. <inputtypeinputtype="text"name="dir"/>

     

  16. File
     
  17. <inputtypeinputtype="file"name="file"/>

     

  18. <inputtypeinputtype="submit"name="submit"value="UploadFile"/> 
  19.  
  20.  
  21.  

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

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

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

PHP上传文件代码列表C

  1. //getFTPaccessparameters  
  2. $host=$_POST['host'];  
  3. $user=$_POST['user'];$pass=$_POST['pass'];  
  4. $destDir=$_POST['dir'];  
  5. $workDir="/usr/local/temp";//definethisasperlocalsystem  
  6. //gettemporaryfilenamefortheuploadedfile  
  7. $tmpName=basename($_FILES['file']['tmp_name']);  
  8. //copyuploadedfileintocurrentdirectory  
  9. move_uploaded_file($_FILES['file']['tmp_name'],$workDir."/".$tmpName)ordie("Cannotmoveuploadedfiletoworkingdirectory");  
  10. //openconnection  
  11. $conn=ftp_connect($host)ordie("Cannotinitiateconnectiontohost");  
  12. //sendaccessparameters  
  13. ftp_login($conn,$user,$pass)ordie("Cannotlogin");  
  14. //performfileupload  
  15. $upload=ftp_put($conn,$destDir."/".$_FILES['file']['name'],$workDir."/".$tmpName,FTP_BINARY);  
  16. //checkuploadstatus  
  17. //displaymessage  
  18. if(!$upload){  
  19. echo"Cannotupload";  
  20. }else{  
  21. echo"Uploadcomplete";  
  22. }  
  23. //closetheFTPstream  
  24. ftp_close($conn);  
  25. //deletelocalcopyofuploadedfile  
  26. unlink($workDir."/".$tmpName)ordie("Cannotdeleteuploadedfilefromworkingdirectory--manualdeletionrecommended");  
  27. ?> 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...