PHP特點(diǎn)之使用遠(yuǎn)程HTTP文件及FTP文件操作
只要在 php.ini 文件中激活了 allow_url_fopen 選項(xiàng),就可以在大多數(shù)需要用文件名作為參數(shù)的函數(shù)中使用 HTTP 和 FTP 的 URL 來(lái)代替文件名。同時(shí),也可以在 include、include_once、 require 及 require_once 語(yǔ)句中使用 URL。PHP 所支持協(xié)議的更多信息參見(jiàn)支持的協(xié)議和封裝協(xié)議。
注意:
要在 PHP 4.0.3 及其更早的版本中使用 URL 封裝協(xié)議,需要在編譯時(shí)用 --enable-url-fopen-wrapper 參數(shù)來(lái)配置 PHP。
Windows 版本的 PHP 4.3 版之前不支持以下函數(shù)的遠(yuǎn)程訪問(wèn): include, include_once, require, require_once 以及GD and Image 函數(shù)中的 imagecreatefromXXX 函數(shù)。
例如,可以用以下范例來(lái)打開(kāi)遠(yuǎn)程 web 服務(wù)器上的文件,解析需要的輸出數(shù)據(jù),然后將這些數(shù)據(jù)用在數(shù)據(jù)庫(kù)的檢索中,或者簡(jiǎn)單地以和自己網(wǎng)站其它頁(yè)面相同的風(fēng)格輸出其內(nèi)容。
Example #1 獲取遠(yuǎn)程文件的標(biāo)題
<?php $file = fopen ('/', 'r'); if (!$file) {echo '<p>Unable to open remote file.n';exit; } while (!feof ($file)) {$line = fgets ($file, 1024);/* This only works if the title and its tags are on one line */if (eregi ('<title>(.*)</title>', $line, $out)) { $title = $out[1]; break;} } fclose($file);?>
運(yùn)行結(jié)果如下:
如果有合法的訪問(wèn)權(quán)限,以一個(gè)用戶的身份和某 FTP 服務(wù)器建立了鏈接,還可以向該 FTP 服務(wù)器端的文件進(jìn)行寫(xiě)操作。僅能用該方法來(lái)創(chuàng)建新的文件;如果嘗試覆蓋已經(jīng)存在的文件, fopen() 函數(shù)的調(diào)用將會(huì)失敗。
要以“anonymous”以外的用戶名連接服務(wù)器,需要指明用戶名(可能還有密碼),例如“ftp://user:[email protected]/path/to/file”(也可以在通過(guò)需要 Basic 認(rèn)證的 HTTP 協(xié)議訪問(wèn)遠(yuǎn)程文件時(shí)使用相同的語(yǔ)法)。
Example #2 將數(shù)據(jù)保存到遠(yuǎn)程服務(wù)器
<?php $file = fopen ('ftp://ftp.example.com/incoming/outputfile', 'w'); if (!$file) {echo '<p>Unable to open remote file for writing.n';exit; } /* Write the data here. */ fwrite ($file, $_SERVER[’HTTP_USER_AGENT’] . 'n'); fclose ($file);?>
注意:
或許可以從以上范例中得到啟發(fā),用該技術(shù)來(lái)存儲(chǔ)遠(yuǎn)程日志文件。但是正如以上提到的,在用 fopen() 方式打開(kāi)的 URL 中,僅能對(duì)新文件進(jìn)行寫(xiě)操作。如果遠(yuǎn)程文件已經(jīng)存在則 fopen() 函數(shù)的操作將會(huì)失敗。要做類(lèi)似于分布式日志的事,可以參考 syslog() 函數(shù)。
相關(guān)文章:
1. Python如何實(shí)現(xiàn)感知器的邏輯電路2. JS實(shí)現(xiàn)表單中點(diǎn)擊小眼睛顯示隱藏密碼框中的密碼3. JS錯(cuò)誤處理與調(diào)試操作實(shí)例分析4. asp讀取xml文件和記數(shù)5. python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進(jìn)行簡(jiǎn)單處理和分析6. 原生js實(shí)現(xiàn)的觀察者和訂閱者模式簡(jiǎn)單示例7. Python ellipsis 的用法詳解8. 在終端啟動(dòng)Python時(shí)報(bào)錯(cuò)的解決方案9. vue 驗(yàn)證兩次輸入的密碼是否一致的方法示例10. xml中的空格之完全解說(shuō)
