検索

PHPのソケット関数

May 04, 2018 pm 03:16 PM
phpsocket関数

この記事では主に PHP のソケット関数を紹介します。これを必要な友人に共有します。

ソケットに基づいたアプリケーションを作成するには、ソケットの操作方法を理解する必要があります。詳細については、PHP の重要なソケット関数をいくつか紹介します。

1. socket_create ( int $domainint $typeint $pro tocol )

この関数はソケットを作成するには、ソケットに 3 つのパラメータがあり、戻り値はハンドル (リソース) です。

$domain は、ソケットの作成時に使用される通信プロトコル ファミリを指定します。オプションの値は次のとおりです。

  • AF_INET: IPv4 に基づくインターネット プロトコル

  • AF_INET6: ベースIPv6 インターネット プロトコル

  • AF_UNIX: Unix ローカル通信プロトコル

$ Type は、ソケット通信の対話型を指定します。 オプションの値は次のとおりです:

  • Sock_stream: シリアル化を提供します。 、信頼できる、全二重、接続ベースのバイト ストリーム送信、TCP をサポート

  • SOCK_DGRAM: データグラム スタイル、コネクションレス、固定最大長、自動アドレッシング関数送信を提供、UDP をサポート

  • SOCK_SEQPACKET: シリアル化されたデータを提供、信頼性の高いデュアルチャネル、接続ベースのデータグラム送信

  • SOCK_RAW: オリジナルのネットワークアクセスプロトコルを提供し、特別なプロトコルタイプのソケットを手動で構築でき、ICMP リクエスト (ping など) をサポートします

  • SOCK_RDM:信頼性の高いデータグラム送信を提供します。順序は保証できません

$protocol は、ICMP、UDP、TCP を含む、ソケットが使用する特定の送信プロトコルを指定します。定数 SOL_UDP は UDP に対応し、定数 SOL_TCP は一定の TCP。

2.文字列$address [, int $port = 0 ] ) この関数は、IP アドレスとこれは、socket_create によって作成されたハンドルへのポートであり、3 つのパラメーターを持ち、ブール値を返します。

$socket は必須パラメータであり、socket_create 関数によって作成されたハンドルを表します

$address は必須パラメータであり、バインドされる IP アドレスを表します

$port はオプションのパラメータで、バインドされるポート番号を表し、socket_create 関数の最初のパラメータが AF_INET の場合、このパラメータはソケット接続の監視に使用されるポートを指定します。を指定する必要があります。

3. $socket [, int $backlog = 0 ] ) この機能は監視するために使用されます接続しようとしているソケット接続。ソケットの対話タイプが SOCK_STREAM または SOCK_SEQPACKET の場合にのみ使用できます。ブール値を返します。 $socket

は必須パラメータであり、socket_create関数によって作成されたハンドルを表します(ホストにバインドされています) $backlogはオプションのパラメータで、待機中のハンドルを表しますキュー内で処理される (バックログに許可される接続の最大数。

4.

socket_set_block ( resource $socket )

この関数は、ソケット ハンドルをブロッキング モードに設定するために使用され、Boo を返します。痩せた価値。ノンブロッキング モードのソケットをブロッキング モードに変換できます。

ブロッキング モードのソケットで操作 (受信、送信、接続、受け入れなど) を実行すると、スクリプトはシグナルを受信するか操作が完了するまで実行を一時停止します。

$socket は必須パラメータであり、有効なソケット ハンドル (socket_create またはソケット_accept によって作成される) を表します。 ブロッキング モードと非ブロッキング モードの違いを簡単に紹介します:

ノンブロッキングとは、結果がすぐに得られなくなるまで関数操作が現在のスレッドをブロックせず、ただちに戻ることを意味します。ブロックとは、作業が完了するまで戻ることができないことを意味します。次のステップに進む前に、相手からの応答を得る必要があります。特にユーザー数が多い場合はノンブロッキングに設定する必要があります。ブロッキング モードの場合、2 つのクライアントが同時に接続されている場合、サーバーが 1 つのクライアントのリクエストを処理しているときに、他のクライアントのリクエストは前のクライアントの処理が完了した後でのみブロックされ、後のクライアントのリクエストが処理されます。に応じられます。 [ ,

int

$length = 0 ] ) この関数は、指定されたサイズのバッファ データをソケットに書き込むために使用され、3 つのパラメーターがあり、書き込まれたデータのバイト数を返します。 $socket は必須パラメータであり、有効なソケット ハンドルを表します。 $buffer は必須パラメータであり、書き込まれる文字列データを指定します。 $length は、ソケットに順番に書き込まれるデータのバイト数を指定するオプションのパラメータです。その値が $buffer のバイト数よりも大きい場合、サイレントにインターセプトします。それをバイト単位の $buffer の長さにします。


6.
,

int $length [, int $type] = PHP_BINARY_READ ] )

この関数はソケットから指定されたバイト長のデータを読み取るために使用され、3 つのパラメータがあり、読み取った文字列データを返します。

$socket は必須パラメータであり、有効なソケット ハンドルを表します。
$length は必須パラメータであり、読み取られるバイトの長さを指定します。

$type はオプションのパラメータで、デフォルト値は PHP_BINARY_READ で、バイナリ データの安全な読み取りを意味します。別のオプションの値は PHP_NORMAL_READ で、 r または n が見つかった場合は読み取りを停止することを意味します。

7. pfsockopen(string $hostname[, int $port = -1[, int &$errno[, 文字列 &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

この関数は、永続的なソケット接続、つまり長い接続を実装するために使用され、次の値を返します。ハンドル。 fsockopen との違いは、pfsockopen によって確立された接続はスクリプトの実行後に切断されないことです。

8. socket_set_option (resource$socketint$levelint$optname) mixed$optval)

この関数はソケット制御オプションを設定するために使用され、4 つのパラメーターがあり、ブール値を返します。

$socket は必須パラメータであり、有効なソケット ハンドルを表します。

$level は、オプションが有効になるプロトコル レベルを指定する必須パラメータです。通常、定数 SOL_SOCKET を受け取ります。

$optname は必須パラメータであり、制御するオプションの名前を指定します。

$optval は必須パラメータであり、オプションの値を指定します。

9.socket_last_error ([resource$socket ] )

この関数は、ソケット関数によって生成された最後のエラー コードを取得するために使用され、戻り値は整数です。 10. (int $errno

)

この関数は、エラーコードで表されるエラーの説明を取得するために使用されます、戻り値は文字列です。 低レベルのプログラマではない場合、ソケットの内部実装メカニズムを深く理解することは非常に困難です。ソケットはプロセス通信を実装するためにオペレーティング システムによってカプセル化された関数のセットであることを理解するだけで十分です。を作成して呼び出します。 PHP の言語特性と位置付けにより、PHP はソケット サーバーではなくソケット クライアントにのみ適していると判断されます。 ソケットは主に最下層とネットワークサービスの開発を指向しているため、サーバー側は一般にCやJavaなどの言語で実装されます。これにより最下層をより適切に操作でき、ネットワークで発生する問題の解決にも成熟しています。サービス開発 (同時実行性、ブロッキングなど) 完璧なソリューションですが、PHP は明らかにこのアプリケーション シナリオには適していません。 実際、PHP はソケットを通じて MySQL データベースを操作します。これはまさに、ソケットが基礎となるプロトコルを保護し、ネットワーク サービス間の相互接続をシンプルにするためです。 HTML5 の普及に伴い、従来のサーバーサイド言語で実装されたソケットに加えて、ブラウザクライアントで実装された WebSocket も徐々に登場しており、これも注目に値します。 クライアント上でソケットを操作するには、fsockopen、socket_create、またはstream_socket_clientなどの関数を使用できます。PHP5の場合は、stream_socket_clientを使用することを推奨します。

ソケット対話型アプリケーションの例: ソケットを使用してフォームを送信

新しいテストを作成する.php ファイル、フォーム データを

http://demo.com/index.php?id=1 に送信します。コードは次のとおりです

[php] view plain copy
<?php  
$data = array(&#39;comment&#39;=>&#39;this is a robot comment&#39;);  
$data = http_build_query($data);  
$out = "POST http://demo.com/index.php?id=1 HTTP/1.1\r\n";  // 通过POST方式发送数据  
$out .= "Host: demo.com\r\n";  
$out .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";  
$out .= "Content-length: ".strlen($data)."\r\n";  
$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0"."\r\n";  
$out .= "Connection: close"."\r\n"."\r\n";    // 注意:此处有两个 \r\n
$out .= $data."\r\n";   // 正文数据
$fp = fsockopen("demo.com", 80, $errno, $errstr, 30);  // 创建socket客户端连接
// $fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30);  推荐这种写法
fwrite($fp, $out);    // 向服务器发送数据
while (!feof($fp)) {  
    echo fgets($fp, 1280);    // 读取服务器响应的数据
}  
fclose($fp);  // 关闭socket连接
?>

次の点に注意する必要があります:

  • fsockopen的第一个参数,也可以使用IP地址,不要带 http:// 字符串,除非使用SSL等

  • 请求头(headers)不一定要带上所有的头域,一般只需带上几个核心的header即可

  • 在最后一个header处,即 Connection 后有两个换行

  • 注意编码问题

如果是PHP5,建议使用 stream_socket_client 代替 fsockopen,也就是将下面的代码:

$fp = fsockopen("demo.com", 80, $errno, $errstr, 30);

改为:

$fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30);

在PHP中,99.9%的socket应用属于流套接字的范畴,由于数据包套接字和原始套接字涉及比较底层的协议知识,这里就不作深究,有兴趣的朋友可自行学习。

相关推荐:

PHP中PDO事务处理操作示例


以上がPHPのソケット関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

セッションIDをどのくらいの頻度で再生する必要がありますか?セッションIDをどのくらいの頻度で再生する必要がありますか?Apr 23, 2025 am 12:03 AM

セッションIDは、機密操作の前、30分ごとにログイン時に定期的に再生する必要があります。 1.セッション固定攻撃を防ぐためにログインするときにセッションIDを再生します。 2。安全性を向上させるために、敏感な操作の前に再生します。 3.定期的な再生は長期的な利用リスクを減らしますが、ユーザーエクスペリエンスの重量を量る必要があります。

PHPでセッションCookieパラメーターをどのように設定しますか?PHPでセッションCookieパラメーターをどのように設定しますか?Apr 22, 2025 pm 05:33 PM

PHPのセッションCookieパラメーターの設定は、session_set_cookie_params()関数を通じて達成できます。 1)この関数を使用して、有効期限、パス、ドメイン名、セキュリティフラグなどのパラメーターを設定します。 2)session_start()を呼び出して、パラメーターを有効にします。 3)ユーザーログインステータスなど、ニーズに応じてパラメーターを動的に調整します。 4)セキュリティを改善するために、セキュアとhttponlyフラグを設定することに注意してください。

PHPでセッションを使用する主な目的は何ですか?PHPでセッションを使用する主な目的は何ですか?Apr 22, 2025 pm 05:25 PM

PHPでセッションを使用する主な目的は、異なるページ間でユーザーのステータスを維持することです。 1)セッションはsession_start()関数を介して開始され、一意のセッションIDを作成し、ユーザーCookieに保存します。 2)セッションデータはサーバーに保存され、ログインステータスやショッピングカートのコンテンツなど、さまざまなリクエスト間でデータを渡すことができます。

サブドメイン間でセッションをどのように共有できますか?サブドメイン間でセッションをどのように共有できますか?Apr 22, 2025 pm 05:21 PM

サブドメイン間でセッションを共有する方法は?一般的なドメイン名にセッションCookieを設定することにより実装されます。 1.セッションCookieのドメインをサーバー側の.example.comに設定します。 2。メモリ、データベース、分散キャッシュなど、適切なセッションストレージ方法を選択します。 3. Cookieを介してセッションIDを渡すと、サーバーはIDに基づいてセッションデータを取得および更新します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 中国語版

SublimeText3 中国語版

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

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。