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

PHPのソケット関数

May 04, 2018 pm 03:16 PM
php socket 関数

この記事では主に 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 までご連絡ください。

ホット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

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

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

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

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

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用して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での後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

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

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

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

See all articles