search

socket function in PHP

May 04, 2018 pm 03:16 PM
phpsocketfunction

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连接
?>

#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);

改为:

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

在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
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
The Continued Use of PHP: Reasons for Its EnduranceThe Continued Use of PHP: Reasons for Its EnduranceApr 19, 2025 am 12:23 AM

What’s still popular is the ease of use, flexibility and a strong ecosystem. 1) Ease of use and simple syntax make it the first choice for beginners. 2) Closely integrated with web development, excellent interaction with HTTP requests and database. 3) The huge ecosystem provides a wealth of tools and libraries. 4) Active community and open source nature adapts them to new needs and technology trends.

PHP and Python: Exploring Their Similarities and DifferencesPHP and Python: Exploring Their Similarities and DifferencesApr 19, 2025 am 12:21 AM

PHP and Python are both high-level programming languages ​​that are widely used in web development, data processing and automation tasks. 1.PHP is often used to build dynamic websites and content management systems, while Python is often used to build web frameworks and data science. 2.PHP uses echo to output content, Python uses print. 3. Both support object-oriented programming, but the syntax and keywords are different. 4. PHP supports weak type conversion, while Python is more stringent. 5. PHP performance optimization includes using OPcache and asynchronous programming, while Python uses cProfile and asynchronous programming.

PHP and Python: Different Paradigms ExplainedPHP and Python: Different Paradigms ExplainedApr 18, 2025 am 12:26 AM

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP and Python: A Deep Dive into Their HistoryPHP and Python: A Deep Dive into Their HistoryApr 18, 2025 am 12:25 AM

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

Choosing Between PHP and Python: A GuideChoosing Between PHP and Python: A GuideApr 18, 2025 am 12:24 AM

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

PHP and Frameworks: Modernizing the LanguagePHP and Frameworks: Modernizing the LanguageApr 18, 2025 am 12:14 AM

PHP remains important in the modernization process because it supports a large number of websites and applications and adapts to development needs through frameworks. 1.PHP7 improves performance and introduces new features. 2. Modern frameworks such as Laravel, Symfony and CodeIgniter simplify development and improve code quality. 3. Performance optimization and best practices further improve application efficiency.

PHP's Impact: Web Development and BeyondPHP's Impact: Web Development and BeyondApr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

How does PHP type hinting work, including scalar types, return types, union types, and nullable types?How does PHP type hinting work, including scalar types, return types, union types, and nullable types?Apr 17, 2025 am 12:25 AM

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values ​​and handle functions that may return null values.

See all articles

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.