三步FTP實現PHP上傳檔案代碼剖析_PHP教程

來源:互聯網
上載者:User
想知道上傳檔案的詳細步驟嗎,下面我就帶大家一起詳細分析一下吧。利用PHP,你總是可以有多種方式來完成某個特定的任務。我們就拿檔案上傳舉個例子。當然了,你可以按照傳統的方式來使用HTTP檔案上傳,把檔案直接傳輸到Web伺服器磁碟上。你還可以用更加奇異的方式上傳,用FTP協議兩步就完成上傳:從你的本地硬碟到Web伺服器,然後再到FTP伺服器。

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. <html>
  2. <head>head>
  3. <body>
  4. <h2>Pleaseprovidethefollowinginformation:h2>
  5. <formenctypeformenctype="multipart/form-data"method="post"action="upload.php">
  6. <inputtypeinputtype="hidden"name="MAX_FILE_SIZE"value="5000000"/>
  7. Host<br/>
  8. <inputtypeinputtype="text"name="host"/><p/>
  9. Username<br/>
  10. <inputtypeinputtype="text"name="user"/><p/>
  11. Password<br/>
  12. <inputtypeinputtype="password"name="pass"/><p/>
  13. Destinationdirectory<br/>
  14. <inputtypeinputtype="text"name="dir"/><p/>
  15. File<br/>
  16. <inputtypeinputtype="file"name="file"/><p/>
  17. <inputtypeinputtype="submit"name="submit"value="UploadFile"/>
  18. form>
  19. body>
  20. html>

在這裡,元素用來組建檔案選擇對話方塊,使用者通過它來選擇要被上傳的檔案。元素然後就把表單資料編碼成為多個部分提交,這可以讓PHP更容易地識別提交的檔案組件。

第三步:建立PHP上傳處理常式

一旦表單被提交給了Web伺服器,下一步(也是最後一步)是使用PHP的FTP函數按照使用者提供的訪問信任書把它傳輸到目標伺服器上。下面就是完成上述所有工作的指令碼(upload.php)。

PHP上傳檔案代碼清單C

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

http://www.bkjia.com/PHPjc/446550.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446550.htmlTechArticle想知道上傳檔案的詳細步驟嗎,下面我就帶大家一起詳細分析一下吧。利用PHP,你總是可以有多種方式來完成某個特定的任務。我們就拿文...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.