PHP fsockopen で書かれた HTTP ダウンロード クラスを公開する
リモート コンテンツを開くオプションがサポートされている場合、PHP は実際に fopen または file_get_contents を使用して Web ページのコンテンツを取得できます。ただし、デフォルトの関数には HTTP ヘッダーを取得できないという欠点があり、一部の特殊なアプリケーションでは非常に不便です。たとえば、次のリンクがあります:
http://www.abc.com/showvd.asp?id=18
画像が返される場合、次のリンクを使用して識別するのは困難になります。デフォルトの関数ですが、HTTP レスポンスヘッダーで判断するほうが簡単です。また、相手がホットリンクを防ぐために Refer を使用している場合は、HTTP クラスを使用することでこれらの問題を完全に解決でき、速度も向上します。ほぼ同じです。
使用法:
$hd = new DedeHttpDown();
$hd->OpenUrl("http://www.dedecms.com"); >echo $hd->GetHtml();
//ファイルとして保存する場合は、$hd->SaveBin("dede.html");
$hd->Close(); 🎜>
$hd->GetHead("key") で http リクエスト ヘッダーを取得します。
リクエスト ヘッダーを設定します
$hd->SetHead(key, value); OpenUrl の後に呼び出されます。 以前に設定された)
コードは次のとおりです:
<
/* --------------- ----------- -------------------------------------- -----------
//Dream Weaving HTTP ダウンロード クラス V1.0
//From: Dream Weaving Journey http://www.dedecms.com
//著者: IT Plato
//時間: 2005- 11-13 12:39
//声明: Left Behind Web サイトで最初に公開されました。再版する場合は著作権情報を保持してください
-------- ---------------------------------------------------- ------------ */
class DedeHttpDown
{
var $m_url = "";
var $m_urlpath = ""; "http";
var $m_port = "80";
var $m_pass = ""; m_path = "/";
var $m_fp = "";
var $m_httphead = ""; $m_html = "";
var $m_puthead = "";
var $HomeUrl = ""; var $JumpCount = 0;無限ループに陥るのを防ぎます
//
//初期化システム
//
function PrivateInit($url)
{
if($url=="") return ;
$urls = "";
$urls = @parse_url( $url);
$this->m_host = $urls["host"];
if(!empty($urls["scheme"])) $this->m_scheme = $urls["scheme"];
if(!empty($url s["user" ])){
if(!empty($ urls ["pass"])){
$ this-&gt; m_pass = $ urls ["pass"];
}
if(!empty($urls["port"]))){ $this->m_port = $urls["ポート"];
}
if(!empty($urls["path"])) $this->m_path = $urls["path"];
$this->m_urlpath = $this->m_path;
if(!empty($urls["query"])){
$this->m_query = $urls["クエリ"];
$this->m_urlpath .= "?".$this->m_query;
}
$this->HomeUrl = $urls["host"];
$this->BaseUrlPath = $this->HomeUrl.$urls["path"];
$this->BaseUrlPath = ereg_replace("/([^/]*).(.*)$","/",$this->BaseUrlPath);
$this->BaseUrlPath = ereg_replace("/$","",$this->BaseUrlPath);
}
}
//
//打开指定网址
//
function OpenUrl($url)
{
// 重各パラメータ
$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 = "";
$this->JumpCount = 0;
$this->m_httphead = Array() ;
//$this->m_puthead = "";
$this->m_html = "";
$this->Close();
//初化系统
$this->PrivateInit($url);
$this->PrivateStartSession();
}
//
//打开303重定向网址
//
function JumpOpenUrl($url)
// 重设各パラメータ
$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 = "";
$this->JumpCount ;
$this->m_httphead = Array() ;
$this->m_html = "";
$this->Close();
//初化系统
$this->PrivateInit($url);
$this->PrivateStartSession();
}
//
//特定の操作错误の原因
//
function printError()
echo "错误情報:".$this-> ;m_エラー;
echo "特定の返头:
";
foreach($this->m_httphead as $k=>$v)
{ echo "$k =>> $v
rn"; }
}
//
//判别用Getメソッド送信的头的应答結果否か正确
//
function IsGetOK()
{
if( ereg( "^2",$this->GetHead("http-state")) )
{ return true; }
Head("http-describe") ."
";
テキスト型かどうか
//
function IsText()
{
if( ereg( "^2",$this->GetHead("http-state"))
&& eregi("^text",$this->GetHead ("content-type"))
$this ->m_error .= "コンテンツは非テキスト タイプまたは URL リダイレクトです
return false; // 🎜> {
{ $ctype))
{ return true; }
else
{
$this->m_error .= "間違ったタイプ".$this->GetHead("content-type") "
";ファイルをダウンロード
//
関数 SaveToBin($savefilename)
{ !"; return false; }
fwrite($fp,fread($ this->m_fp,1024)); true を返す 🎜> this->IsText()) $this->SaveBinFile($savefilename) ;
function GetHtml()
{ if(!$this->m_fp||@feof($this->m_fp)) return "" ;m_html .= fgets($this->m_fp) 、256); m_html;
if($this->GetHead("http-edition")=="HTTP/1.1") $httpv = "HTTP/1.1"
else $httpv = "HTTP/1.0"; ; > // 固定開始リクエストのヘッド GET と HOST 情報を送信
FPUTS ($ this- & gt; m_fp, "get". $ This- & gt; m_urlpath. "$ Httpvrn"); m_puthead["Accept"] = "*/*";
} { $this->m_puthead[ "ユーザーエージェント"] = "Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.2)" }
If(!isset($this->m_puthead["Refer" ])) { $this-> ;m_puthead["参照"] = "http://".$this->m_puthead["ホスト"] }
foreach($this->m_puthead as $k =>$v){
if($ k!= "" && $ v!= ""){
fputs($ this-&gt; m_fp、 "$ k:$ vrn"); end request header
.1 プロトコルは、ドキュメントの終了後にリンクが閉じられることを指定する必要があります。そうでない場合、ドキュメントの読み取り時に feof を使用して終了を判断することはできません
if($httpv=="HTTP/1.1") fputs($this->m_fp,"接続: Closernrn" );
else fputs($this->m_fp,"rn") ($this-> ;m_fp,256); this->m_httphead["http-edition"] = トリム($httpstas[0]);
$this->m_httphead["http-state"] = トリム($httpstas[1]); > $this->m_httphead["http-describe"] ){
$this->
//获取详细应答头
while(!feof($this->m_fp))
$line = trim(fget s($this->m_fp,256));
if($line == "") break;
$hkey = "";
$hvalue = "";
$v = 0;
for($i=0;$i
if($line[$i]==":") $v = 1;
if($v==0) $hkey .= $line[$i];
$hkey = trim($hkey);
if($hkey!="") $this->m_httphead[strto lower($hkey)] = trim($hvalue);
// 判断は3xx开头的应答
if(ereg("^3",$this->m_httphead["http-state"]))
{
if($this->JumpCount >3) return;
if(isset($this->m_httphead["location"])){
$newurl = $this->m_httphead["location"];
if(eregi("^http",$newurl)){
$this->JumpOpenUrl($newurl);
}
🎜> else
スルー"; }
> name)
{
$headname = str to lower($headname);
if(isset($this->m_httphead[$headname]))
return $this- >m_httphead[$headname]; else
return "" }
🎜> $this >m_puthead[$skey] = $svalue; {
if($this - &gt; m_host == "")false;
//
//补全相对网址
//
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)<=2) return "";
else if($surl[0]=="/")
{
$okurl = "http://".$this->BaseUrlPath."/".substr($surl, 2,strlen($surl)-2);
}
else{
$urls = explode("/",$surl);
foreach($urls as $u){
if($u=="..") $pathStep ;
else if($i
$i ;
}
$urls = explode("/",$this->BaseUrlPath);
if(count($urls) <= $pathStep)
return "";
else{
$pstr = "http://";
for($i=0;$i
$okurl = $pstr.$dstr;
}
}
}
else
{
if(strlen($surl)<7)
$okurl = "http://".$this- >BaseUrlPath."/".$surl;
else if(strto lower(substr($surl,0,7))=="http://")
$okurl = $surl;
else
$okurl = "http://".$this->BaseUrlPath."/".$surl;
}
$okurl = eregi_replace("^(http://)","",$okurl);
$okurl = eregi_replace("/{1,}","/",$okurl);
return "http://".$okurl;
}
}
?>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
