摘自织梦CMS的HTTP文件下载类_PHP
本文实例讲述了摘自织梦CMS的HTTP文件下载类。分享给大家供大家参考。具体如下:
<?php if(!defined('DEDEINC')) exit("Request Error!"); /** * 织梦HTTP下载类 * * @version $Id: dedehttpdown.class.php 1 11:42 2010年7月6日Z tianya $ * @package DedeCMS.Libraries * @copyright Copyright (c) 2007 - 2010, DesDev, Inc. * @license http://help.dedecms.com/usersguide/license.html * @link http://www.dedecms.com */ @set_time_limit(0); class DedeHttpDown { var $m_url = ''; var $m_urlpath = ''; var $m_scheme = 'http'; var $m_host = ''; var $m_port = '80'; var $m_user = ''; var $m_pass = ''; var $m_path = '/'; var $m_query = ''; var $m_fp = ''; var $m_error = ''; var $m_httphead = ''; var $m_html = ''; var $m_puthead = ''; var $BaseUrlPath = ''; var $HomeUrl = ''; var $reTry = 0; var $JumpCount = 0; /** * 初始化系统 * * @access public * @param string $url 需要下载的地址 * @return string */ function PrivateInit($url) { if($url=='') { return ; } $urls = ''; $urls = @parse_url($url); $this->m_url = $url; if(is_array($urls)) { $this->m_host = $urls["host"]; if(!empty($urls["scheme"])) { $this->m_scheme = $urls["scheme"]; } if(!empty($urls["user"])) { $this->m_user = $urls["user"]; } if(!empty($urls["pass"])) { $this->m_pass = $urls["pass"]; } if(!empty($urls["port"])) { $this->m_port = $urls["port"]; } if(!empty($urls["path"])) { $this->m_path = $urls["path"]; } $this->m_urlpath = $this->m_path; if(!empty($urls["query"])) { $this->m_query = $urls["query"]; $this->m_urlpath .= "?".$this->m_query; } $this->HomeUrl = $urls["host"]; $this->BaseUrlPath = $this->HomeUrl.$urls["path"]; $this->BaseUrlPath = preg_replace("/\/([^\/]*)\.(.*)$/","/",$this->BaseUrlPath); $this->BaseUrlPath = preg_replace("/\/$/","",$this->BaseUrlPath); } } /** * 重设各参数 * * @access public * @return void */ function ResetAny() { $this->m_url = ""; $this->m_urlpath = ""; $this->m_scheme = "http"; $this->m_host = ""; $this->m_port = "80"; $this->m_user = ""; $this->m_pass = ""; $this->m_path = "/"; $this->m_query = ""; $this->m_error = ""; } /** * 打开指定网址 * * @access public * @param string $url 地址 * @param string $requestType 请求类型 * @return string */ function OpenUrl($url,$requestType="GET") { $this->ResetAny(); $this->JumpCount = 0; $this->m_httphead = Array() ; $this->m_html = ''; $this->reTry = 0; $this->Close(); //初始化系统 $this->PrivateInit($url); $this->PrivateStartSession($requestType); } /** * 转到303重定向网址 * * @access public * @param string $url 地址 * @return string */ function JumpOpenUrl($url) { $this->ResetAny(); $this->JumpCount++; $this->m_httphead = Array() ; $this->m_html = ""; $this->Close(); //初始化系统 $this->PrivateInit($url); $this->PrivateStartSession('GET'); } /** * 获得某操作错误的原因 * * @access public * @return void */ function printError() { echo "错误信息:".$this->m_error; echo "<br/>具体返回头:<br/>"; foreach($this->m_httphead as $k=>$v){ echo "$k => $v <br/>\r\n"; } } /** * 判别用Get方法发送的头的应答结果是否正确 * * @access public * @return bool */ function IsGetOK() { if( preg_match("/^2/",$this->GetHead("http-state")) ) { return TRUE; } else { $this->m_error .= $this->GetHead("http-state")." - ".$this->GetHead("http-describe")."<br/>"; return FALSE; } } /** * 看看返回的网页是否是text类型 * * @access public * @return bool */ function IsText() { if( preg_match("/^2/",$this->GetHead("http-state")) && preg_match("/text|xml/i",$this->GetHead("content-type")) ) { return TRUE; } else { $this->m_error .= "内容为非文本类型或网址重定向<br/>"; return FALSE; } } /** * 判断返回的网页是否是特定的类型 * * @access public * @param string $ctype 内容类型 * @return string */ function IsContentType($ctype) { if(preg_match("/^2/",$this->GetHead("http-state")) && $this->GetHead("content-type")==strtolower($ctype)) { return TRUE; } else { $this->m_error .= "类型不对 ".$this->GetHead("content-type")."<br/>"; return FALSE; } } /** * 用Http协议下载文件 * * @access public * @param string $savefilename 保存文件名称 * @return string */ function SaveToBin($savefilename) { if(!$this->IsGetOK()) { return FALSE; } if(@feof($this->m_fp)) { $this->m_error = "连接已经关闭!"; return FALSE; } $fp = fopen($savefilename,"w"); while(!feof($this->m_fp)) { fwrite($fp, fread($this->m_fp, 1024)); } fclose($this->m_fp); fclose($fp); return TRUE; } /** * 保存网页内容为Text文件 * * @access public * @param string $savefilename 保存文件名称 * @return string */ function SaveToText($savefilename) { if($this->IsText()) { $this->SaveBinFile($savefilename); } else { return ""; } } /** * 用Http协议获得一个网页的内容 * * @access public * @return string */ function GetHtml() { if(!$this->IsText()) { return ''; } if($this->m_html!='') { return $this->m_html; } if(!$this->m_fp||@feof($this->m_fp)) { return ''; } while(!feof($this->m_fp)) { $this->m_html .= fgets($this->m_fp,256); } @fclose($this->m_fp); return $this->m_html; } /** * 开始HTTP会话 * * @access public * @param string $requestType 请求类型 * @return string */ function PrivateStartSession($requestType="GET") { if(!$this->PrivateOpenHost()) { $this->m_error .= "打开远程主机出错!"; return FALSE; } $this->reTry++; if($this->GetHead("http-edition")=="HTTP/1.1") { $httpv = "HTTP/1.1"; } else { $httpv = "HTTP/1.0"; } $ps = explode('?',$this->m_urlpath); $headString = ''; //发送固定的起始请求头GET、Host信息 if($requestType=="GET") { $headString .= "GET ".$this->m_urlpath." $httpv\r\n"; } else { $headString .= "POST ".$ps[0]." $httpv\r\n"; } $this->m_puthead["Host"] = $this->m_host; //发送用户自定义的请求头 if(!isset($this->m_puthead["Accept"])) { $this->m_puthead["Accept"] = "*/*"; } if(!isset($this->m_puthead["User-Agent"])) { $this->m_puthead["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)"; } if(!isset($this->m_puthead["Refer"])) { $this->m_puthead["Refer"] = "http://".$this->m_puthead["Host"]; } foreach($this->m_puthead as $k=>$v) { $k = trim($k); $v = trim($v); if($k!=""&&$v!="") { $headString .= "$k: $v\r\n"; } } fputs($this->m_fp, $headString); if($requestType=="POST") { $postdata = ""; if(count($ps)>1) { for($i=1;$i<count($ps);$i++) { $postdata .= $ps[$i]; } } else { $postdata = "OK"; } $plen = strlen($postdata); fputs($this->m_fp,"Content-Type: application/x-www-form-urlencoded\r\n"); fputs($this->m_fp,"Content-Length: $plen\r\n"); } //发送固定的结束请求头 //HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束 if($httpv=="HTTP/1.1") { fputs($this->m_fp,"Connection: Close\r\n\r\n"); } else { fputs($this->m_fp,"\r\n"); } if($requestType=="POST") { fputs($this->m_fp,$postdata); } //获取应答头状态信息 $httpstas = explode(" ",fgets($this->m_fp,256)); $this->m_httphead["http-edition"] = trim($httpstas[0]); $this->m_httphead["http-state"] = trim($httpstas[1]); $this->m_httphead["http-describe"] = ""; for($i=2;$i<count($httpstas);$i++) { $this->m_httphead["http-describe"] .= " ".trim($httpstas[$i]); } //获取详细应答头 while(!feof($this->m_fp)) { $line = trim(fgets($this->m_fp,256)); if($line == "") { break; } $hkey = ""; $hvalue = ""; $v = 0; for($i=0;$i<strlen($line);$i++) { if($v==1) { $hvalue .= $line[$i]; } if($line[$i]==":") { $v = 1; } if($v==0) { $hkey .= $line[$i]; } } $hkey = trim($hkey); if($hkey!="") { $this->m_httphead[strtolower($hkey)] = trim($hvalue); } } //如果连接被不正常关闭,重试 if(feof($this->m_fp)) { if($this->reTry > 10) { return FALSE; } $this->PrivateStartSession($requestType); } //判断是否是3xx开头的应答 if(preg_match("/^3/",$this->m_httphead["http-state"])) { if($this->JumpCount > 3) { return; } if(isset($this->m_httphead["location"])) { $newurl = $this->m_httphead["location"]; if(preg_match("/^http/i",$newurl)) { $this->JumpOpenUrl($newurl); } else { $newurl = $this->FillUrl($newurl); $this->JumpOpenUrl($newurl); } } else { $this->m_error = "无法识别的答复!"; } } } /** * 获得一个Http头的值 * * @access public * @param string $headname 头文件名称 * @return string */ function GetHead($headname) { $headname = strtolower($headname); return isset($this->m_httphead[$headname]) ? $this->m_httphead[$headname] : ''; } /** * 设置Http头的值 * * @access public * @param string $skey 键 * @param string $svalue 值 * @return string */ function SetHead($skey,$svalue) { $this->m_puthead[$skey] = $svalue; } /** * 打开连接 * * @access public * @return bool */ function PrivateOpenHost() { if($this->m_host=="") { return FALSE; } $errno = ""; $errstr = ""; $this->m_fp = @fsockopen($this->m_host, $this->m_port, $errno, $errstr,10); if(!$this->m_fp) { $this->m_error = $errstr; return FALSE; } else { return TRUE; } } /** * 关闭连接 * * @access public * @return void */ function Close() { @fclose($this->m_fp); } /** * 补全相对网址 * * @access public * @param string $surl 需要不全的地址 * @return string */ function FillUrl($surl) { $i = 0; $dstr = ""; $pstr = ""; $okurl = ""; $pathStep = 0; $surl = trim($surl); if($surl=="") { return ""; } $pos = strpos($surl,"#"); if($pos>0) { $surl = substr($surl,0,$pos); } if($surl[0]=="/") { $okurl = "http://".$this->HomeUrl.$surl; } else if($surl[0]==".") { if(strlen($surl)<=1) { return ""; } else if($surl[1]=="/") { $okurl = "http://".$this->BaseUrlPath."/".substr($surl,2,strlen($surl)-2); } else { $urls = explode("/",$surl); foreach($urls as $u) { if($u=="..") { $pathStep++; } else if($i<count($urls)-1) { $dstr .= $urls[$i]."/"; } else { $dstr .= $urls[$i]; } $i++; } $urls = explode("/",$this->BaseUrlPath); if(count($urls) <= $pathStep) { return ""; } else { $pstr = "http://"; for($i=0;$i<count($urls)-$pathStep;$i++) { $pstr .= $urls[$i]."/"; } $okurl = $pstr.$dstr; } } } else { if(strlen($surl)<7) { $okurl = "http://".$this->BaseUrlPath."/".$surl; } else if(strtolower(substr($surl,0,7))=="http://") { $okurl = $surl; } else { $okurl = "http://".$this->BaseUrlPath."/".$surl; } } $okurl = preg_replace("/^(http:\/\/)/i","",$okurl); $okurl = preg_replace("/\/{1,}/", "/", $okurl); return "http://".$okurl; } }//End Class
希望本文所述对大家的php程序设计有所帮助。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Python menyediakan pilihan berikut untuk membuka fail yang dimuat turun: open() function: buka fail menggunakan laluan dan mod yang ditentukan (seperti 'r', 'w', 'a'). Pustaka permintaan: Gunakan kaedah muat turun() untuk memberikan nama secara automatik dan membuka fail secara terus. Pustaka Pathlib: Gunakan kaedah write_bytes() dan read_text() untuk menulis dan membaca kandungan fail.

Perkongsian Amalan Kumpulan Dream Weaver CMS Station Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat Internet, pembinaan laman web menjadi semakin penting. Apabila membina berbilang tapak web, teknologi kumpulan tapak telah menjadi kaedah yang sangat berkesan. Di antara banyak alat pembinaan laman web, Dreamweaver CMS telah menjadi pilihan pertama ramai peminat laman web kerana fleksibiliti dan kemudahan penggunaannya. Artikel ini akan berkongsi beberapa pengalaman praktikal tentang kumpulan stesen CMS Dreamweaver, serta beberapa contoh kod khusus, dengan harapan dapat memberikan sedikit bantuan kepada pembaca yang meneroka teknologi kumpulan stesen. 1. Apakah kumpulan stesen Dreamweaver CMS? CMS Penenun Impian

Bagaimana untuk melaksanakan penstriman HTTP dalam C++? Cipta soket strim SSL menggunakan Boost.Asio dan pustaka klien asiohttps. Sambung ke pelayan dan hantar permintaan HTTP. Terima pengepala respons HTTP dan cetaknya. Menerima badan respons HTTP dan mencetaknya.

Tajuk: Analisis sebab dan penyelesaian mengapa direktori sekunder DreamWeaver CMS tidak boleh dibuka Dreamweaver CMS (DedeCMS) ialah sistem pengurusan kandungan sumber terbuka yang berkuasa yang digunakan secara meluas dalam pembinaan pelbagai laman web. Walau bagaimanapun, kadangkala semasa proses membina tapak web, anda mungkin menghadapi situasi di mana direktori sekunder tidak boleh dibuka, yang membawa masalah kepada operasi biasa tapak web. Dalam artikel ini, kami akan menganalisis kemungkinan sebab mengapa direktori sekunder tidak boleh dibuka dan memberikan contoh kod khusus untuk menyelesaikan masalah ini. 1. Analisis sebab yang mungkin: Masalah konfigurasi peraturan pseudo-statik: Semasa penggunaan

Penyelesaian: 1. Cuba semula: Anda boleh menunggu untuk tempoh masa dan cuba lagi, atau muat semula halaman; 2. Semak beban pelayan: Periksa penggunaan CPU, memori dan cakera pelayan Jika melebihi had kapasiti, anda boleh mencuba untuk mengoptimumkan konfigurasi pelayan atau meningkatkan kapasiti sumber pelayan; tetapan peranti, tembok api atau proksi adalah betul 5. Pastikan konfigurasi cache atau CDN Betul 6. Hubungi pentadbir pelayan, dsb.

Maaf, saya tidak dapat memberikan maklumat tentang memecahkan atau memintas captcha. Jika anda mempunyai soalan lanjut atau memerlukan bantuan, sila beritahu saya.

Dreamweaver CMS ialah sistem pembinaan laman web yang sangat popular dengan fungsi berkuasa, antara muka mesra dan mudah digunakan. Tetapi kadangkala, kita akan mendapati bahawa untuk mencapai beberapa keperluan khas, fungsi yang asalnya disediakan mungkin tidak mencukupi. Sebagai tindak balas kepada situasi ini, kami boleh menjalankan pembangunan sekunder dan merealisasikan keperluan laman web yang diperibadikan melalui kod tersuai. Artikel ini akan berkongsi beberapa rahsia tentang pembangunan sekunder DreamWeaver CMS untuk membantu anda membuka kunci kemahiran penyesuaian laman web yang diperibadikan. 1. Perihalan keperluan penyesuaian untuk karusel halaman utama: halaman utama DreamWeaver CMS asal

Melaksanakan keselamatan muat naik fail HTTP di Golang memerlukan langkah berikut: Sahkan jenis fail. Hadkan saiz fail. Kesan virus dan perisian hasad. Simpan fail dengan selamat.
