20
20
use Workerman \Protocols \Http \Request ;
21
21
use Workerman \Protocols \Http \Response ;
22
22
use function clearstatcache ;
23
+ use function count ;
23
24
use function explode ;
24
25
use function filesize ;
25
26
use function fopen ;
@@ -80,6 +81,10 @@ public static function requestClass(?string $className = null): string
80
81
*/
81
82
public static function input (string $ buffer , TcpConnection $ connection ): int
82
83
{
84
+ static $ input = [];
85
+ if (isset ($ input [$ buffer ])) {
86
+ return $ input [$ buffer ];
87
+ }
83
88
$ crlfPos = strpos ($ buffer , "\r\n\r\n" );
84
89
if (false === $ crlfPos ) {
85
90
// Judge whether the package length exceeds the limit.
@@ -115,6 +120,14 @@ public static function input(string $buffer, TcpConnection $connection): int
115
120
$ connection ->close ("HTTP/1.1 413 Payload Too Large \r\n\r\n" , true );
116
121
return 0 ;
117
122
}
123
+
124
+ if (!isset ($ buffer [TcpConnection::MAX_CACHE_STRING_LENGTH ])) {
125
+ $ input [$ buffer ] = $ length ;
126
+ if (count ($ input ) > TcpConnection::MAX_CACHE_SIZE ) {
127
+ unset($ input [key ($ input )]);
128
+ }
129
+ }
130
+
118
131
return $ length ;
119
132
}
120
133
@@ -139,7 +152,7 @@ public static function decode(string $buffer, TcpConnection $connection): Reques
139
152
$ request = new static::$ requestClass ($ buffer );
140
153
if (!isset ($ buffer [TcpConnection::MAX_CACHE_STRING_LENGTH ])) {
141
154
$ requests [$ buffer ] = $ request ;
142
- if (\ count ($ requests ) > TcpConnection::MAX_CACHE_SIZE ) {
155
+ if (count ($ requests ) > TcpConnection::MAX_CACHE_SIZE ) {
143
156
unset($ requests [key ($ requests )]);
144
157
}
145
158
$ request = clone $ request ;
0 commit comments