Table of Contents
To create a socket-based application, you need to To learn more about socket operation, here are some important socket functions in PHP.
Home Backend Development PHP Tutorial socket function in PHP

socket function in PHP

May 04, 2018 pm 03:16 PM
php socket function

This article mainly introduces the socket function in PHP, which has certain reference value. Now I share it with everyone. Friends in need can refer to it.

To create a socket-based application, you need to To learn more about socket operation, here are some important socket functions in PHP.

1. socket_create ( int $domain , int $type , int $protocol )

This function is used to create a socket. It has three parameters and the return value is a handle (resource).

$domain specifies the communication protocol family used when creating the socket. The optional values ​​are:

  • AF_INET:Internet Protocol based on IPv4

  • AF_INET6:Internet Protocol based on IPv6

  • AF_UNIX: UNIX local communication protocol

$type specifies the interaction type of socket communication, which is optional The value is:

  • SOCK_STREAM: Provides serialized, reliable, full-duplex, connection-based byte stream transmission, supports TCP

  • SOCK_DGRAM: Provides datagram-style, connectionless, fixed maximum length, automatic addressing function transmission, supports UDP

  • SOCK_SEQPACKET: Provides serialized, reliable, dual-channel, connection-based datagram transmission

  • SOCK_RAW: Provides original network access protocol, can manually construct sockets of special protocol types, supports ICMP requests (such as ping)

  • SOCK_RDM: Provides reliable Datagram transmission, the order cannot be guaranteed

$protocol specifies which specific transmission protocol the socket uses, including ICMP, UDP, and TCP. The constant SOL_UDP corresponds to UDP, and the constant SOL_TCP corresponds to the constant TCP.

##2. socket_bind ( resource $socket , string $address [, int $port = 0 ] )

This function is used Bind the IP address and port to the handle created by socket_create. It has three parameters and returns a Boolean value.

$socket is a required parameter, representing the handle created by the socket_create function

$address is a required parameter, representing the IP address to be bound

##$port is an optional parameter, representing the port number to be bound. It specifies which port is used to listen for socket connections. When the first step of the socket_create function When the first parameter is AF_INET, this parameter needs to be specified.

##3. socket_listen ( resource $socket [, int $backlog = 0 ] )

This function is used to monitor The socket connection to be accessed can only be used when the interaction type of the socket is SOCK_STREAM or SOCK_SEQPACKET. It has Two parameters, returns a Boolean value.

$socket is a required parameter, representing the handle created by the socket_create function (and has been bound to the host)

$backlog is an optional parameter, indicating the maximum number of connections waiting to be processed in the queue (allowed to be backlogged).

4.

socket_set_block ( resource $socket )This function is used to set the socket handle to blocking mode. It has only one required parameter and returns a Boolean value. It can convert a non-blocking mode socket into blocking mode.

When performing an operation (receive, send, connect, accept, etc.) in a blocking mode socket, the script will pause execution until it receives a signal or it completes the operation.

$socket is a required parameter, representing a valid socket handle (created by socket_create or socket_accept).

Briefly introduce the difference between blocking mode and non-blocking mode:

Non-blocking means that the function operation will not block the current thread until the result cannot be obtained immediately, but will return immediately. Blocking means that you are not allowed to come back until you finish the work. You must get a response from the other party before you can continue with the next step. Especially when there are many users, it is necessary to set it to non-blocking. If it is blocking mode, if two clients are connected at the same time, when the server is processing one client's request, the other client's request will be blocked. Only after the previous client's affairs are processed, the latter client's request will be processed. will be responded to.

5. socket_write ( resource $socket , string $buffer [, int $length = 0 ] )

This function is used to write buffer data of a specified size into the socket. It has three parameters and returns the number of bytes of the written data.

$socket is a required parameter and represents a valid socket handle.

$buffer is a required parameter, specifying the string data to be written.

$length is an optional parameter that specifies the number of bytes of data written to the socket in turn, if its value is greater than # The number of bytes in ##$buffer, it will silently intercept to the number of bytes in $buffer.

#6. socket_read ( resource $socket , int $length [, int $type = PHP_BINARY_READ ] )This function is used to read data of specified byte length from the socket. It has three parameters and returns the read string data.

$socket is a required parameter and represents a valid socket handle.
$length is a required parameter, specifying the length of bytes to be read.

$type is an optional parameter, the default value is PHP_BINARY_READ, which means safe reading of binary data; the other optional value is PHP_NORMAL_READ means to stop reading when \r or \n is encountered.

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

This function is used to implement a persistent socket connection, that is, a long connection, and returns a handle. The difference between it and fsockopen is that the connection established by pfsockopen will not be disconnected after the script is executed.

##8. socket_set_option ( resource$socket , int$level , int$optname , mixed$optval )

This function is used to set the control options of the socket. It has four parameters and returns a Boolean value.

$socket is a required parameter and represents a valid socket handle.

##$level is a required parameter, specifying the protocol level at which the option takes effect. , generally take the constant SOL_SOCKET.

##$optname is a required parameter, specify The name of the option to control.

#$optval Is a required parameter that specifies the value of the option. ##9. socket_last_error

([ resource$socket ] )

This function is used to obtain the last error code generated by any socket function, and the return value is an integer.

#10. ##socket_strerror ( int $errno )This function is used to obtain the error description represented by the error code, and the return value is a string.

As a non-low-level programmer, it is very difficult to deeply understand the internal implementation mechanism of socket. We only need to understand that socket is a set of functions encapsulated by the operating system to implement process communication. It will create and Just calling is enough.

The language characteristics and positioning of PHP determine that it is only suitable for socket clients, not for socket servers.

Because socket is mainly oriented to the bottom layer and network service development, the server side is generally implemented in languages ​​​​such as C or Java. This can better operate the bottom layer and solve problems encountered in network service development (such as concurrency, blocking, etc.) There are also mature and complete solutions, but PHP is obviously not suitable for this application scenario. In fact, PHP operates the MySQL database through sockets. This is precisely because sockets shield the underlying protocol, making the interconnection between network services simple.

In addition to sockets implemented in traditional server-side languages, with the popularity of HTML5, WebSockets implemented in browser clients are also gradually emerging. This is worthy of attention. FlashSocket is also a good solution.

To operate the socket on the client, you can use functions such as fsockopen, socket_create or stream_socket_client. If it is PHP5, it is recommended Use stream_socket_client.

#Socket interactive application example: using socket to submit a form

##Create a new test.php file and go to ##http:// demo.com/index.php?id=1 Submit form data, the code is as follows

[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连接
?>
Copy after login

#The following points need to be noted:

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

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

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

  • 注意编码问题

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

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

改为:

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

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

相关推荐:

PHP中PDO事务处理操作示例


The above is the detailed content of socket function in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

See all articles