導航:首頁 > 編程語言 > phpfetchurl

phpfetchurl

發布時間:2022-08-20 02:19:58

php實現http抓取。想要在本地實現sae里fetchurl函數的功能,返回json格式數據,求大神指導

參考sae的分布式抓取http頁面的原理/

參考地址:http://e.sae.sina.com.cn/?m=detail&a=service&itm=appstore

⑵ fetch.php是什麼類型的文件

PHP,一個嵌套的縮寫名稱,是英文「超級文本預處理語言」(PHP:Hypertext Preprocessor)的縮寫。PHP 是一種 HTML 內嵌式的語言,PHP與微軟的ASP頗有幾分相似,都是一種在伺服器端執行的「嵌入HTML文檔的腳本語言」,語言的風格有類似於C語言,現在被很多的網站編程人員廣泛的運用。PHP 獨特的語法混合了 C、java、Perl 以及 PHP 自創新的語法。它可以比 CGI 或者 Perl 更快速的執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;與同樣是嵌入HTML文檔的腳本語言JavaScript相比,PHP在伺服器端執行,成分利用了伺服器的性能;PHP執行引擎還會將用戶經常訪問的PHP程序駐留在內存中,其他用戶在一次訪問這個程序時就不需要誠信編譯程序了,只要直接執行內存中的代碼就可以了,這也是PHP高效率的體現之一。PHP具有非常強大的功能,所有的CGI或者JavaScript的功能PHP都能實現,而且支持幾乎所有流行的資料庫以及操作系統。

PHP 最初是1994年Rasmus Lerdorf創建的,剛剛開始只是一個簡單的用Perl語言編寫的程序,用來統計他自己網站的訪問者。後來又用C語言重新編寫,包括可以訪問資料庫。在1995年以Personal Home Page Tools (PHP Tools) 開始對外發表第一個版本,Lerdorf寫了一些介紹此程序的文檔,並且發布了PHP1.0。在這早期的版本中,提供了訪客留言本、訪客計數器等簡單的功能。以後越來越多的網站使用了PHP,別且強烈要且增加一些特性,比如循環語句和數組變數等等,在新的成員加入開發行列之後,在1995年中,PHP2.0發布了。第二版定名為PHP/FI(Form Interpreter)。PHP/FI加入了對mSQL的支持,從此建立了PHP在動態網頁開發上的地位。到了1996年底,有15000個網站使用 PHP/FI;時間到了1997年中,使用PHP/FI的網站數字超過五萬個。而在1997年中,開始了第三版的開發計劃,開發小組加入了 Zeev Suraski 及 Andi Gutmans,而第三版就定名為PHP3。2000年,PHP4.0又問世了,其中增加了許多新的特性。

PHP的特性包括:

開放的源代碼:所有的PHP源代碼事實上都可以得到。
PHP是免費的。
基於伺服器端:由於PHP是運行在服務鞫說模�詞乖俁嗟撓沒В�俑叢擁某絛蛞膊換嵊跋煸誦械乃俁取?lt;BR>跨平台:PHP可以運行在UNIX、LINUX、WINDOWS下。
嵌入HTML:因為PHP可以嵌入HTML語言,所以學習起來並不困難。
簡單的語言:PHP堅持腳本語言為主,與Java以C++不同。
效率高:PHP消耗相當少的系統資源。
圖像處理:用PHP動態創建圖像

PHP 3與PHP 4的比較

PHP3跟Apache伺服器緊密結合的特性;加上它不斷的更新及加入新的功能;而且幾乎支持所有主流與非主流資料庫;再以它能高速的執行效率,使得PHP在1999年中的使用站點已經超過了150000萬。加上它的源代碼完全公開,在 Open Source意識抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數庫加入,以及不停地更新的活力,使得PHP無論在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供豐富的函數,使得在程序設計方面有著更好的支持。

PHP4.0整個腳本程序的核心大幅更動,讓程序的執行速度,滿足更快的要求。在最佳化之後的效率,已較傳統CGI或者ASP等程序有更好的表現。而且還有更強的新功能、更豐富的函數庫。無論您接不接受,PHP 都將在 Web CGI 的領域上,掀起巔覆性的革命。對於一位專業的Web Master 而言,它將也是必修課程之一。

PHP 4.0是更有效的,更可靠的動態Web頁開發工具,在大多數情況運行比 PHP 3.0要快,其腳本描述更強大並且更復雜, 最顯著的特徵是速率比的增加。PHP4.0這些優異的性能是PHP 腳本引擎重新設計產生的結果:引擎由 AndiGutmans 和 Zeev Suraski從底層全面重寫。PHP4.0 腳本引擎 ——Zend 引擎,使用了一種更有效的「編譯——執行」方式, 而不是PHP 3.0 採用的「執行 ——當解析時」模型。

PHP4在3.0版的基礎上增加或增強了許多有用的特徵,主要如下:

(1)別名:在PHP4中,可以利用引用為變數賦值,這給編程帶來了很大的靈活性。

(2)擴充了API 模塊:PHP 4.0 為擴展的 API 模塊的提供了擴展PHP介面模塊, 它比舊的 API 版本顯著地快。 PHP 模塊已有的及最常用的介面多數被轉換到使用這個擴展的介面。

(3)自動資源釋放:PHP4增加了引用計數功能,這種新技術的引入使PHP4具有了自動內存管理功能,減輕了開發人員的負擔。

(4)布爾類型:PHP 4.0 支持布爾類型。

(5)進程生成:在 UNIX 環境下的 PHP 4.0 提供了一個很智能和通用的生成進程, 使用了一種名為基於automake/libtool的系統生成技術。

(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 僅用於Windows 環境 ) 可以無縫地存取和訪問 COM 對象。

(7)與PHP 3.0 兼容性很好:PHP 4.0 是與 PHP 3.0 代碼向後兼容性接近100% 。由於 PHP 4 的改進的體系結構,兩者有一些細微的差別,但是大多數人將可能永遠不可能遇上這種情況。
PHP介紹

(8)配置:PHP4重新設計和增強了PHP。ini文件,這使得用PHP。ini來配置PHP顯得極為容易,這個文件可以在運行時被Apache(unix系統)或由Windows 注冊(Windows 環境)。

(9)加密支持:PHP4實現了完整的加密, 這些加密功能是一個完整的mycrypt庫,並且 PHP 4.0 支持哈希函數。Blowfish,TripleDES,MD5,並且SHA1 也是可使用的一些加密演算法

(10)類型檢查:PHP 4.0 支持同一操作符用於評類型檢查:「===「( 3 等號運算符 ), 為在兩個值和其類型之間作檢查。例如,「 3 」 ===3 將視為假 ( 類型是不同的 ), 而「 3 」 ==3 ( 相等判斷 ) 將視為真。

(11)FTP 支持:PHP 4.0 支持 FTP 。通常, 你會為通過一個數據機連接下載一個大文件提供一個介面。然而, 如果你確實有需要,可以使用PHP 。

(12)PHP4新增函數或功能增強函數:PHP 4.0 新增了許多函數,同時也將許多現有的函數功能進行了增強,以下是一些例子。 array_count_values() eval() foreach() nclude() ob_end_clean() ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()

(13)「here」列印:PHP 4.0 的「Here」列印是與Perl類似的, 盡管完全不相同。「Here」是列印大容量文章的一個有用的方法,例如在 HTML文件中,不會漏掉任何一個字元,例如目錄標記。

(14)HTTP Session fallback 系統:為 HTTP Session管理的一個 fallback 系統在 PHP 4.0被實現 。預設情況下,Session標識符由cookies存儲。如果沒有cookies支持或一項cookies任務失敗,Session標識符自動被創建並在 URL 的查詢字元串中被攜帶。

(15)ISAPI 支持:PHP 4.0 能作為一個個性化的 ISAPI 模塊作為 IIS插件 。這比 PHP 3.0 更有效, 它作為一個外部的程序來運行。

(16)內存:PHP 4.0 能更有效的使用內存, 導致較少的內存佔用消耗,這主要歸功於引用計數技術的實現。

(17)其他類成員函數:在 PHP 4.0 你能在成員函數本身的作用域或全局范圍內調用其他類的成員函數。例如,你能用一個子函數覆蓋父函數,並在子函數中調用父函數。

(18)多維數組:在 PHP 4.0 ,利用GET,POST,Cookies的進行的數據傳輸支持多維數組。

(19)個性化的 HTTP Session支持:HTTP Session處理, 包括 fallback 系統管理,在 PHP 4.0被它的新庫函數實現 。在版本 3.0 中處理Session要求使用 PHPLIB 和第三方的庫函數, 它比把Session直接地由 PHP 支持慢了許多。

(20)個性化的 Java 支持:PHP 4.0 支持和java的交互。這種個性化的Java 支持為PHP 在 Java 對象上創建和使用方法提供一個簡單並且有效的工具。
21)對象和數嵌套組:PHP 4.0 實現了功能更加強大的對象, 移去了 PHP 3.0存在的種種句法限制。對象能在數組以內被嵌套並且反過來也如此, 可以根據你的需要實現嵌套。

(22)面向對象的編程:PHP 4.0 為面向對象的編程和構造類及對象提供擴展的功能和新特徵。PHP4實現了對象重載,引用技術等新技術。

(23)對象重載支持:對象重載語法允許第三方的基於面向對象的類庫使用 PHP4 的面向對象的特徵存取他們自身的功能。使用這個特徵的一個 COM 模塊已經被實現了。

(24)輸出緩沖支持:PHP 提供了一個輸出緩沖函數集合。輸出緩沖支持允許你寫包裹函數功能壓縮緩沖區。在 PHP4 的輸出緩沖支持允許 HTML 頭信息存放, 無論 HTML的正文是否輸出。頭信息( (header(), content type, and cookies ) 不採用緩沖 。

(25)增加了PCRE 庫:PHP 4.0 包括一個 Perl 兼容的正則表達式 (PCRE ) 庫, 和正常regex庫一起與 PHP 綁定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正規表達式之間有一些細微差別。

(26)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新設計, 使用的 PHP 的配置PHP.ini是更容易並且更有效的。全部文件能被Apache 在運行時間操作 ( 在 Apache環境 下 ) 或由 Windows 注冊表 ( 在 Windows 下面 ) 。被加入PHP.ini文件的配置指令自動地在所有相關的模塊中被支持。

(27)引用計數:PHP 4.0 為系統中的每個數值提供了引用計數, 包括資源。一旦一個資源不再被任何變數引用,它自動地被釋放以節省內存資源。利用這個特徵的最明顯的例子一個內置SQL查詢的循環語句。在PHP 3.0中 ,每次遞歸另外的 SQL 結果集合重復申請內存,直到腳本執行完畢,這些結果集合佔用的內存才被釋放。

(28)支持引用:通過引用可以改變一個變數的值。

(29)函數的運行時綁定:PHP 4.0 的運行時間綁定功能允許你在他們被聲明以前調用, 無論聲明是否在代碼以後或是在運行時間。

(30)類的運行時信息:PHP 4.0 支持在運行時刻存取下列類信息:一個對象的類名,一個對象的父類的類名字,以及對象函數所在的名字。

(31)伺服器抽象層:為支持Web伺服器提供了增強型 SAPI ( 伺服器 API ) 介面,是 PHP 4。0 不可分的一部分。這個伺服器抽象層,提供了通用的WEB伺服器介面支持,支持多線程WEB伺服器,為大多數的WEB伺服器提供透明的支持, 這些伺服器包括 Apache ,IIS ( ISAPI ), 以及 AOL 伺服器。

(32)語法的點亮顯示:PHP 4.0 語法的點亮顯示允許開發者看見源代碼而不是腳本, 這個功能比PHP 3。0中的更有效。它跑得更快,更執行得更好,並且產生更緊湊的HTML代碼。

(33)由引用改變變數的值:PHP 4.0 由引用支持可變的賦值, 「關聯」的2個變數之中個的任何一個的值被改變,另外的變數的值同樣被改變,這類似與C中的指針類型。

(34)在引用字元串中的變數引用:PHP 4.0 增強了在引用字元串中的變數引用。例如, 這個例子在 PHP 3.0中 是不可能做到的 : print 「${a[0]->bingo}「

PHP 在資料庫方面的豐富支持,也是它迅速走紅的原因之一,它支持下列的資料庫或是數據文件:

· Adabas D
· DBA
· dBase
· dbm
· filePro
· Informix
· InterBase
· mSQL
· Microsoft SQL Server
· MySQL
· Solid
· Sybase
· ODBC
· Oracle 8
· Oracle
· PostgreSQL

而在 Internet 上它也支持了相當多的通訊協議 (protocol),包括了與電子郵件相關的 IMAP, POP3;網管系統 SNMP;網路新聞 NNTP;帳號共用 NIS;全球信息網 HTTP 及 Apache 伺服器;目錄協議 LDAP 以及其它網路的相關函數。

除此之外,用 PHP 寫出來的 Web 後端 CGI 程序,可以很輕易的移植到不同的操作系統上。例如,先以 Linux 架的網站,在系統負荷過高時,可以快速地將整個系統移到 SUN 工作站上,不用重新編譯 CGI 程序。面對快速發展的 Internet,這是長期規劃的最好選擇。
在加入其它的模塊之後,提供了更多樣的支持如下:

· 英文拼寫檢查
· BC 高精確度計算
· 西洋歷法
· PDF 文件格式
· Hyperwave 伺服器
· 圖形處理
· 加密與解碼功能
· 散列處理
· WDDX 功能
· qmail 與 vmailmgr 系統
· 壓縮文件處理
· XML 解析

除此之外,一般語言有的數學運算、時間處理、文件系統、字元串處理、行程處理等功能,它一樣都不缺。再加上它是免費的系統,使得成本與效益比,幾乎等於無限大!

3.3 PHP 及其語言比較

無可置疑的,寫 CGI 的方式有很多種,而 PHP 只是其中的一種選擇罷了。對資深的網站站長來說,CGI 的寫作語言應是隨著需求而更動。畢竟,在一個對系統反映速度要求極嚴格的系統而言,恐怕只有 NSAPI 語言寫的 CGI 程序才能符合要求了。在其它的場合,相信使用 PHP 來作為 CGI 的語言是游刃有餘,而且是最適合的。
以下是幾種語言的比較:

程序語言 PHP ASP CGI NSAPI ISAPI
操作系統 均可 Win32 均可 均可 Win32
Web伺服器 幾種 IIS 均可 Netscape Server IIS
執行效率 快 快 慢 極快 極快
穩定性 佳 中等 最高 差 差
開發時間 短 短 中等 長 長
修改時間 短 短 中等 長 長
程序語言 PHP VB 不限 C/C++ C/Delphi
網頁結合 佳 佳 差 差 差
學習門檻 低 低 高 極高 高
函數支持 多 少 不定 中等 少
系統安全 佳 極差 最佳 佳 尚可
使用站點 超多 多 多 極少 少
改版速度 快 慢 無 慢 慢

其中的 PHP 可用在幾種 Web 伺服器上;傳統 CGI 就不限是哪種操作系統或 Web 伺服器平台;NSAPI 一定要在 Netscape 的伺服器 (如 Netscape Enterprise Server 或 FastTrack Server) 上才可以執行,但可支持多種操作系統 (UNIX 或 Win32);ASP 及 ISAPI 只在 IIS 上有完整的功能。

在穩定性上,由於 NSAPI 或 ISAPI 是動態連結的方式,因此在執行若出現問題,會使得 Web 伺服器一起癱瘓。而 ASP 在吾人實際應用經驗上,隔陣子就會使系統不穩定,需要重開操作系統。PHP 在許多的站點使用上,不但長期使用都沒有問題,而且程序的穩定性也不錯。當然最穩的還是傳統 CGI 程序,因為它是由操作系統負責控制,不會因 CGI 程序的錯誤導致 Web 伺服器的不穩定。

在開發及維護時間上,PHP 及 ASP 都有不錯的表現。而 NSAPI 及 ISAPI 則需要長時間的開發過程,在穩定上線後,這二種語言反倒是效率最佳的方法。傳統的 CGI 程序則要視開發工具語言而定了,用 Perl 或是 shell script 不需要編譯的過程,直接就可以執行,若用 Delphi 或 VC/BCB 甚至用組合語言等都要經過編譯才能執行,至於用 VB 來寫傳統 CGI,唉....。

要比較和網頁結合的能力,PHP 和 ASP 是並駕齊驅的,其它的方式就不能內嵌 HTML 語法了。而這也是影響開發時間的因素之一。

就系統安全性而言,ASP 是最差的,在沒有經過微軟的 IIS Service Pack 處理過,使用 ::$DATA 就可以看到 ASP 的源代碼,這真是叫人不敢領教。當然,傳統 CGI 的程序,由於是由操作系統直接管理,要破解的難度最高,黑客必須由操作系統下手,而不能由 Web 伺服器下手。PHP 在許多商業及非商業使用時,也沒有聽過有什麼安全的問題。

在新增功能及改版方面,傳統的 CGI 由於不受任何語言限制,沒有這方面的問題。PHP 是最有活力的,數天至數周就有一個新版本出現,每次的新版,就代表更多的功能及更改更多的錯誤。其它的 ASP、NSAPI、ISAPI 就視它的 Web 伺服器改版速度了,ASP要等到 IIS 5.0 出現時,才會有 ASP 3.0。

總而言之,在 Web 的後端 CGI 程序,就像魚與熊掌一般,沒有高效能又開發方便的選擇。不過相信 PHP 是處於開發容易、效能亦不錯的平衡點上。

如果說ASP是一個COM,那麼PHP說的更精確了可以說PHP是一個純粹的Script翻譯器。這也是PHP由3.0升級為4.0的一個重大原因,在4。0這個版本中,由於重寫了語法分析器,從而加快了PHP整體的效能。而且從中你也就會明白為什麼PHP需要支持這種或是那種擴充功能時它一定要與相應系統的lib庫進行再編繹的原因。正因為它是正宗的「翻譯器」,所以它是將script翻譯成為需要執行的函數,再去執行它們,外部擴充不能由一些「動態載入」的方式進行,所以只能靜態的編繹進PHP中(這只能在windows中除外)。

⑶ 使用thinkphp 怎麼實現反向代理

改自PHP Reverse Proxy PRP,修改了原版中的一些錯誤,支持了文件上傳以及上傳文件類型識別,支持指定IP,自適應SAE環境。
使用方法
?123456789 <?php $proxy=new PhpReverseProxy(); $proxy->port="8080"; $proxy->host="ww"; //$proxy->ip="1.1.1.1"; $proxy->forward_path=""; $proxy->connect(); $proxy->output(); ?>
源代碼
<?php //Source Code: http //www xiumu.org/technology/php-reverse-proxy-class.shtml class PhpReverseProxy{ public $publicBaseURL; public $outsideHeaders; public $XRequestedWith; public $sendPost; public $port,$host,$ip,$content,$forward_path,$content_type,$user_agent, $XFF,$request_method,$IMS,$cacheTime,$cookie,$authorization; private $http_code,$lastModified,$version,$resultHeader; const chunkSize = 10000; function __construct(){ $this->version="PHP Reverse Proxy (PRP) 1.0"; $this->port="8080"; $this->host="127.0.0.1"; $this->ip=""; $this->content=""; $this->forward_path=""; $this->path=""; $this->content_type=""; $this->user_agent=""; $this->http_code=""; $this->XFF=""; $this->request_method="GET"; $this->IMS=false; $this->cacheTime=72000; $this->lastModified=gmdate("D, d M Y H:i:s",time()-72000)." GMT"; $this->cookie=""; $this->XRequestedWith = ""; $this->authorization = ""; } function translateURL($serverName) { $this->path=$this->forward_path.$_SERVER['REQUEST_URI']; if(IS_SAE) return $this->translateServer($serverName).$this->path; if($_SERVER['QUERY_STRING']=="") return $this->translateServer($serverName).$this->path; else return $this->translateServer($serverName).$this->path."?".$_SERVER['QUERY_STRING']; } function translateServer($serverName) { $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; $protocol = $this->left(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; if($this->port=="") return $protocol."://".$serverName; else return $protocol."://".$serverName.":".$this->port; } function left($s1, $s2) { return substr($s1, 0, strpos($s1, $s2)); } function preConnect(){ $this->user_agent=$_SERVER['HTTP_USER_AGENT']; $this->request_method=$_SERVER['REQUEST_METHOD']; $tempCookie=""; foreach ($_COOKIE as $i => $value) { $tempCookie=$tempCookie." $i=$_COOKIE[$i];"; } $this->cookie=$tempCookie; if(empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ $this->XFF=$_SERVER['REMOTE_ADDR']; } else { $this->XFF=$_SERVER['HTTP_X_FORWARDED_FOR'].", ".$_SERVER['REMOTE_ADDR']; } } function connect(){ if(empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])){ $this->preConnect(); $ch=curl_init(); if($this->request_method=="POST"){ curl_setopt($ch, CURLOPT_POST,1); $postData = array(); $filePost = false; $uploadPath = 'uploads/'; if (IS_SAE) $uploadPath = SAE_TMP_PATH; if(count($_FILES)>0){ if(!is_writable($uploadPath)){ die('You cannot upload to the specified directory, please CHMOD it to 777.'); } foreach($_FILES as $key => $fileArray){ ($fileArray["tmp_name"], $uploadPath . $fileArray["name"]); $proxyLocation = "@" . $uploadPath . $fileArray["name"] . ";type=" . $fileArray["type"]; $postData = array($key => $proxyLocation); $filePost = true; } } foreach($_POST as $key => $value){ if(!is_array($value)){ $postData[$key] = $value; } else{ $postData[$key] = serialize($value); } } if(!$filePost){ //$postData = http_build_query($postData); $postString = ""; $firstLoop = true; foreach($postData as $key => $value){ $parameterItem = urlencode($key)."=".urlencode($value); if($firstLoop){ $postString .= $parameterItem; } else{ $postString .= "&".$parameterItem; } $firstLoop = false; } $postData = $postString; } //echo print_r($postData); //curl_setopt($ch, CURLOPT_VERBOSE, 0); //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); $this->sendPost = $postData; //var_mp(file_exists(str_replace('@','',$postData['imgfile'])));exit; curl_setopt($ch, CURLOPT_POSTFIELDS,$postData); //curl_setopt($ch, CURLOPT_POSTFIELDS,file_get_contents($proxyLocation)); //curl_setopt($ch, CURLOPT_POSTFIELDS,file_get_contents("php://input")); } //gets rid of mulitple ? in URL $translateURL = $this->translateURL(($this->ip)?$this->ip:$this->host); if(substr_count($translateURL, "?")>1){ $firstPos = strpos($translateURL, "?", 0); $secondPos = strpos($translateURL, "?", $firstPos + 1); $translateURL = substr($translateURL, 0, $secondPos); } curl_setopt($ch,CURLOPT_URL,$translateURL); $proxyHeaders = array( "X-Forwarded-For: ".$this->XFF, "User-Agent: ".$this->user_agent, "Host: ".$this->host ); if(strlen($this->XRequestedWith)>1){ $proxyHeaders[] = "X-Requested-With: ".$this->XRequestedWith; //echo print_r($proxyHeaders); } curl_setopt($ch,CURLOPT_HTTPHEADER, $proxyHeaders); if($this->cookie!=""){ curl_setopt($ch,CURLOPT_COOKIE,$this->cookie); } curl_setopt($ch,CURLOPT_FOLLOWLOCATION,false); curl_setopt($ch,CURLOPT_AUTOREFERER,true); curl_setopt($ch,CURLOPT_HEADER,true); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $output=curl_exec($ch); $info = curl_getinfo( $ch ); curl_close($ch); $this->postConnect($info,$output); }else { $this->lastModified=$_SERVER['HTTP_IF_MODIFIED_SINCE']; $this->IMS=true; } } function postConnect($info,$output){ $this->content_type=$info["content_type"]; $this->http_code=$info['http_code']; //var_mp($info);exit; if(!empty($info['last_modified'])){ $this->lastModified=$info['last_modified']; } $this->resultHeader=substr($output,0,$info['header_size']); $content = substr($output,$info['header_size']); if($this->http_code=='200'){ $this->content=$content; }elseif( ($this->http_code=='302' || $this->http_code=='301') && isset($info['redirect_url'])){ $redirect_url = str_replace($this->host,$_SERVER['HTTP_HOST'],$info['redirect_url']); if (IS_SAE) $redirect_url = str_replace('http://fetchurl.sae.sina.com.cn/','',$info['redirect_url']); header("Location: $redirect_url"); exit; }elseif($this->http_code=='404'){ header("HTTP/1.1 404 Not Found"); exit("HTTP/1.1 404 Not Found"); }elseif($this->http_code=='500'){ header('HTTP/1.1 500 Internal Server Error'); exit("HTTP/1.1 500 Internal Server Error"); }else{ exit("HTTP/1.1 ".$this->http_code." Internal Server Error"); } } function output(){ $currentTimeString=gmdate("D, d M Y H:i:s",time()); $expiredTime=gmdate("D, d M Y H:i:s",(time()+$this->cacheTime)); $doOriginalHeaders = true; if($doOriginalHeaders){ if($this->IMS){ header("HTTP/1.1 304 Not Modified"); header("Date: Wed, $currentTimeString GMT"); header("Last-Modified: $this->lastModified"); header("Server: $this->version"); }else{ header("HTTP/1.1 200 OK"); header("Date: Wed, $currentTimeString GMT"); header("Content-Type: ".$this->content_type); header("Last-Modified: $this->lastModified"); header("Cache-Control: max-age=$this->cacheTime"); header("Expires: $expiredTime GMT"); header("Server: $this->version"); preg_match("/Set-Cookie:[^\n]*/i",$this->resultHeader,$result); foreach($result as $i=>$value){ header($result[$i]); } preg_match("/Content-Encoding:[^\n]*/i",$this->resultHeader,$result); foreach($result as $i=>$value){ //header($result[$i]); } preg_match("/Transfer-Encoding:[^\n]*/i",$this->resultHeader,$result); foreach($result as $i=>$value){ //header($result[$i]); } echo($this->content); /* if(stristr($this->content, "error")){ echo print_r($this->sendPost); } */ } } else{ $headerString = $this->resultHeader; //string $headerArray = explode("\n", $headerString); foreach($headerArray as $privHeader){ header($privHeader); } if(stristr($headerString, "Transfer-encoding: chunked")){ flush(); ob_flush(); $i = 0; $maxLen = strlen($this->content); while($i < $maxLen){ $endChar = $i + self::chunkSize; if($endChar >= $maxLen){ $endChar = $maxLen - 1; } $chunk = substr($this->content, $i, $endChar); $this->mp_chunk($chunk); flush(); ob_flush(); $i = $i + $endChar; } } else{ echo($this->content); } //echo "header: ".print_r($headerArray); //header($this->resultHeader); } } function mp_chunk($chunk) { echo sprintf("%x\r\n", strlen($chunk)); echo $chunk; echo "\r\n"; } function getOutsideHeaders(){ $headers = array(); foreach ($_SERVER as $name => $value){ if (substr($name, 0, 5) == 'HTTP_') { $name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5))))); $headers[$name] = $value; }elseif ($name == "CONTENT_TYPE") { $headers["Content-Type"] = $value; }elseif ($name == "CONTENT_LENGTH") { $headers["Content-Length"] = $value; }elseif(stristr($name, "X-Requested-With")) { $headers["X-Requested-With"] = $value; $this->XRequestedWith = $value; } } //echo print_r($headers); $this->outsideHeaders = $headers; return $headers; } } ?>

⑷ php 從資料庫中提取的數據加上超鏈接該如何做

你是指在點擊超鏈接的時候同時插入一條紀錄嗎?
那得用ajax來實現了.
<script>
funciton save_rec(url){
//在此寫ajax保存動作.在此就寫具體調用的代碼了,需要後台腳本配合.
保存結束後,再跳轉
window.location.href= url;//跳轉.

}
</script>
<a href="javascript:void(0)" onclick="save_rec('')">Demo</a>

⑸ PHP PDO中fetch的問題

query得到$rs後
$rs->setFetchMode(PDO::FETCH_ASSOC); //設置關聯模式
然後再$rs->fetchAll
即可得到欄位->值的關聯形式

⑹ $snoopy = new Snoopy; $snoopy->fetch($url); $contents = $snoopy->results; 這段php代碼是什麼意思呢

$snoopy = new Snoopy; 實例化一個類。

$snoopy->fetch($url); 執行類裡面的一個方法。

$contents = $snoopy->results; 類里執行結果放在類的一個對象里,然後賦值給$contents

⑺ thinkphp中->fetch()如何使用

模板文件的調用方法和display方法完全一樣,區別就在於fetch方法渲染後不是直接輸出,而是返回渲染後的內容,例如:

$content=$this->fetch('Member:edit');

就是拿到Member 下edit的模板進行渲染。好比公共的模板一樣的,多次地方調用可以採用fetch方法

望採納 Thx

⑻ php難題(url連接符號)

&用在url中一般用作get獲取

用在語句中一般用作變數傳址賦值

變數在聲明並賦值後,會在內存中會分別產生兩個內存單元,其中一個是變數名,另一個是變數值。
傳址賦值的意義就在於可以將一個聲明的空變數直接指向另一個變數的資源地址,即變數值的內存單元,而不需要為新的變數聲明一個內存地址。

⑼ php 如何將數據Get提交到其他的網站,而且不跳轉

直接用 curl_init 就行了 寫一小段代碼 給你個例子 改改就能測試

<?php
$ch = curl_init();

$str ='http://127.0.0.1/form.php?id=10';
curl_setopt($ch, CURLOPT_URL, $str);
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec($ch);
var_mp( $output );
?>

⑽ fetch.php文件怎麼用

迅雷下載BT的時候由於版本太低或者其問題會出現這種問題:
1、到迅雷官網下載最新的迅雷版本。
2、保存該文件,將擴展名里的.php改成.torrent,拖到BT客戶端軟體里就可以下載了.
迅雷:
迅雷是迅雷公司開發的互聯網下載軟體。迅雷是一款基於多資源超線程技術的下載軟體,作為「寬頻時期的下載工具」,迅雷針對寬頻用戶做了優化,並同時推出了「智能下載」的服務。

閱讀全文

與phpfetchurl相關的資料

熱點內容
方維團購系統源碼 瀏覽:988
linux反彈shell 瀏覽:152
列印機介面加密狗還能用嗎 瀏覽:299
二板股票源碼 瀏覽:446
度人經pdf 瀏覽:900
怎麼配置android遠程伺服器地址 瀏覽:959
java程序員看哪些書 瀏覽:942
什麼app可以免費和外國人聊天 瀏覽:795
pdf手寫筆 瀏覽:182
別永遠傷在童年pdf 瀏覽:990
愛上北斗星男友在哪個app上看 瀏覽:421
主力散戶派發源碼 瀏覽:671
linux如何修復伺服器時間 瀏覽:61
榮縣優途網約車app叫什麼 瀏覽:479
百姓網app截圖是什麼意思 瀏覽:229
php如何嵌入html 瀏覽:817
解壓專家怎麼傳輸 瀏覽:745
如何共享伺服器的網路連接 瀏覽:136
程序員簡易表白代碼 瀏覽:170
什麼是無線加密狗 瀏覽:66