ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるcurlとsocketの違い

PHPにおけるcurlとsocketの違い

WBOY
WBOYオリジナル
2016-06-20 13:05:081476ブラウズ

php におけるカールとソケットの違い

まず、ソケットとは何かについて話しましょう:

php は berkely のソケット ライブラリを使用して接続を作成します。ソケットはデータの結果であり、このソケットを使用してサーバーとクライアントの間のセッションを開くことができます。サーバーは常に待機状態にあり、クライアントがサーバーに接続すると、サーバーがセッションを待機しているポートが開きます。このとき、サーバーはクライアントの接続要求を受信し、ループを実行します。これで、クライアントはサーバーに情報を送信できるようになり、サーバーもクライアントに情報を送信できるようになります。

ソケットを生成するには、合計 3 つの変数が必要です:

1. 合意

2.ソケットタイプ

3. パブリックプロトコルタイプ

以下にこれら 3 つの変数について詳しく説明します。大まかに理解してください (覚えていただければ幸いです)

プロトコル: ソケットを生成するときに選択できるプロトコルは 3 つあります:

1. AF_INET これは、送信に tcp または udp プロトコルを使用し、ipv4 アドレスを使用するために広く使用されているプロトコルです。

2. AF_INET6 IPv6 アドレスが使用されることを除いて、明らかに上記と同じです

3. AF_UNIX は Unix または Linux マシンで使用されます。これはめったに使用されず、UNIX または Linux システムのサーバーとクライアントでのみ使用されます。

ソケットタイプ:

1. SOCK_STREAM このプロトコルは、シーケンシャルで信頼性の高い、データ完全なバイト ストリーム ベースの接続です。これは最も一般的に使用されるソケットのタイプです。このソケットは送信に TCP を使用します。

2. SOCK_DGRAM このプロトコルは、コネクションレス型の固定長転送呼び出しです。このプロトコルは信頼性が低く、接続に UDP を使用します。
3. SOCK_SEQPACKET このプロトコルは、送信用の固定長データ パケットを送信するデュアルラインの信頼性の高い接続です。このパッケージを読み取る前に、完全に受け入れる必要があります。
4. SOCK_RAW このソケット タイプは、ICMP パブリック プロトコルを使用して単一のネットワーク アクセスを提供します。 (ping とtraceroute はこのプロトコルを使用します)
5. SOCK_RDM このタイプはめったに使用されず、ほとんどのオペレーティング システムでは実装されていません。これはデータ リンク層に提供され、データ パケットの順序を保証しません。
パブリックプロトコルタイプ:

1. ICMP (Internet Control Message Protocol) インターネット制御メッセージ プロトコル。主にゲートウェイとホストでネットワーク状態を検出し、エラー メッセージを報告するために使用されます。

2. TCP (Transmission Control Protocol) は最も広く使用されているプロトコルで、途中でエラーが発生した場合にデータ パケットを確実に再送信します。

3. UDP (ユーザー データグラム プロトコル) は、コネクションレスで信頼性の低いデータ送信プロトコルです。

ソケットの生成には 3 つの要素が必要であることがわかりました。そのため、php のsocket_create() には、プロトコル、ソケット タイプ、パブリック プロトコルの 3 つのパラメータが必要です。作成が成功すると、socket_create() はソケット リソース タイプを返します。失敗した場合は false を受け取ります。

カール

cURL は、URL 構文を使用してファイルとデータを転送するツールです。 HTTP、FTP、TELNET をサポートします。

なぜ cURL を使用するのですか?

Cookie の処理、検証、フォームの送信、ファイルのアップロードなど、Web ページ上のコンテンツを柔軟に取得したい場合があるからです。次に、cURL を使用する必要があります。PHP には強力な cURL ライブラリがあると言われています (どこに力があるのか​​わからないので、「と言われている」とします)。

PHP で cURL オプションを使用するための基本的な手順は次のとおりです:

1.初期化

2.パラメータ設定

3. ページコンテンツを取得または操作します

4. ハンドルを解放します

<?php  

//初始化curl  

$ch = curl_init ();  

/* 

 * 设置curl 

 * php手册对于curl_setopt的解释为:设置对于curl传输的操作 

 * curl_setopt有三个参数:资源(一般为你建立的curl句柄)、操作(你将对这个句柄作何操作)、参数(对于这个操作你给出的参数) 

 */  

//例如你想对百度进行某些操作  

curl_setopt ( $ch, CURLOPT_URL, "http://www.baidu.com");  

//现在看来你要向百度post数据  

curl_setopt ( $ch, CURLOPT_POST, 1 );  

/*给出了要post的数据:$post_string,post的数据可以是一个文件, 

*那么你需要以@加上文件的全路径给出,或者你要post一些数据, 

*那么你可以按照数组形式给出,或者按照字符串给出, 

*如果你想按照字符串形式给出,请把字符串urlencode,嘿嘿 

*/  

curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_string );  

/* 

 *把curl操作的结果以字符串形式 从curl_exec ()返回,而不是直接就输出了 

 */  

curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );  

//得到操作返回结果  

$result = curl_exec ( $ch );  

//关闭curl句柄  

curl_close ( $ch );   

?>  

PHP のカールには多くの操作があるので、すべてを覚えるのはおそらく非常に難しいでしょう。とにかく、誰もが使用するであろういくつかの操作について話しましょう。

サーバーに関する情報を取得します

<?php  

//初始化curl  

$ch = curl_init ();  

  

curl_setopt ( $ch, CURLOPT_URL, "http://www.baidu.com");  

curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );  

curl_exec($ch);  

$info = curl_getinfo($ch);  

var_dump($info);  

?>  
上記の例を通じて、次の情報を取得します:


"url" //リソースネットワークアドレス

"content_type" //コンテンツのエンコーディング

"http_code" //HTTP ステータス コード

“header_size” //ヘッダーのサイズ

"request_size" //リクエストのサイズ

"filetime" //ファイル作成時間

"ssl_verify_result" //SSL 検証結果

“redirect_count” //ジャンプテクノロジー

“total_time” //かかった合計時間

“namelookup_time” //DNS クエリ時間

“connect_time” //接続時間の待機中

“pretransfer_time” //転送前の準備時間

“size_upload” //アップロードされたデータのサイズ

“size_download” //ダウンロードしたデータのサイズ

“speed_download” //ダウンロード速度

"speed_upload" //アップロード速度

"download_content_length" //ダウンロード コンテンツの長さ

“upload_content_length” //アップロードされたコンテンツの長さ

“starttransfer_time” //転送開始時間

"redirect_time" //リダイレクト時間の消費

curl を使用すると、次の操作も実行できます:

ページのポスト操作をシミュレートします

ファイルのアップロード

HTTP 認証

FTP アップロード

壁を登る

コールバック関数

追記:

curl に関する上記の大前提は、PHP のインストールおよびコンパイル時に --with-curlwrappers を追加したことです。phpinfo() 操作を使用して、コンパイル中にこの拡張ライブラリを追加したかどうかを確認できます。

この拡張機能がロードされると、次のような内容が表示されます:

この拡張機能をお持ちでない場合は、php.ini ファイルを変更し、extension=php_curl.dll の前のセミコロンを削除する必要があります。

ソケットとカールが何であるかがわかりました。ソケットはサーバーとクライアント間の通信に使用できるデータ構造です。 Curl は URL 構文ルールを使用してファイルとデータを転送し、FTP、HTTP、TELNET などの多くのプロトコルをサポートします。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。