Completed
Pull Request — develop (#1492)
by Zack
33:18 queued 12:17
created
PHPCompatibility/Sniffs/Constants/NewMagicClassConstantSniff.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -30,46 +30,46 @@
 block discarded – undo
30 30
 class NewMagicClassConstantSniff extends Sniff
31 31
 {
32 32
 
33
-    /**
34
-     * Returns an array of tokens this test wants to listen for.
35
-     *
36
-     * @return array
37
-     */
38
-    public function register()
39
-    {
40
-        return array(\T_STRING);
41
-    }
33
+	/**
34
+	 * Returns an array of tokens this test wants to listen for.
35
+	 *
36
+	 * @return array
37
+	 */
38
+	public function register()
39
+	{
40
+		return array(\T_STRING);
41
+	}
42 42
 
43
-    /**
44
-     * Processes this test, when one of its tokens is encountered.
45
-     *
46
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
47
-     * @param int                   $stackPtr  The position of the current token in the
48
-     *                                         stack passed in $tokens.
49
-     *
50
-     * @return void
51
-     */
52
-    public function process(File $phpcsFile, $stackPtr)
53
-    {
54
-        if ($this->supportsBelow('5.4') === false) {
55
-            return;
56
-        }
43
+	/**
44
+	 * Processes this test, when one of its tokens is encountered.
45
+	 *
46
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
47
+	 * @param int                   $stackPtr  The position of the current token in the
48
+	 *                                         stack passed in $tokens.
49
+	 *
50
+	 * @return void
51
+	 */
52
+	public function process(File $phpcsFile, $stackPtr)
53
+	{
54
+		if ($this->supportsBelow('5.4') === false) {
55
+			return;
56
+		}
57 57
 
58
-        $tokens = $phpcsFile->getTokens();
58
+		$tokens = $phpcsFile->getTokens();
59 59
 
60
-        if (strtolower($tokens[$stackPtr]['content']) !== 'class') {
61
-            return;
62
-        }
60
+		if (strtolower($tokens[$stackPtr]['content']) !== 'class') {
61
+			return;
62
+		}
63 63
 
64
-        $prevToken = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true, null, true);
65
-        if ($prevToken === false || $tokens[$prevToken]['code'] !== \T_DOUBLE_COLON) {
66
-            return;
67
-        }
64
+		$prevToken = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true, null, true);
65
+		if ($prevToken === false || $tokens[$prevToken]['code'] !== \T_DOUBLE_COLON) {
66
+			return;
67
+		}
68 68
 
69
-        $phpcsFile->addError(
70
-            'The magic class constant ClassName::class was not available in PHP 5.4 or earlier',
71
-            $stackPtr,
72
-            'Found'
73
-        );
74
-    }
69
+		$phpcsFile->addError(
70
+			'The magic class constant ClassName::class was not available in PHP 5.4 or earlier',
71
+			$stackPtr,
72
+			'Found'
73
+		);
74
+	}
75 75
 }
Please login to merge, or discard this patch.
php-compatibility/PHPCompatibility/Sniffs/Constants/NewConstantsSniff.php 1 patch
Indentation   +3631 added lines, -3631 removed lines patch added patch discarded remove patch
@@ -22,3635 +22,3635 @@
 block discarded – undo
22 22
 class NewConstantsSniff extends AbstractNewFeatureSniff
23 23
 {
24 24
 
25
-    /**
26
-     * A list of new PHP Constants, not present in older versions.
27
-     *
28
-     * The array lists : version number with false (not present) or true (present).
29
-     * If's sufficient to list the first version where the constant appears.
30
-     *
31
-     * Note: PHP Constants are case-sensitive!
32
-     *
33
-     * @var array(string => array(string => bool|string|null))
34
-     */
35
-    protected $newConstants = array(
36
-        'E_STRICT' => array(
37
-            '4.4' => false,
38
-            '5.0' => true,
39
-        ),
40
-        // Curl:
41
-        'CURLOPT_FTP_USE_EPRT' => array(
42
-            '4.4' => false,
43
-            '5.0' => true,
44
-        ),
45
-        'CURLOPT_NOSIGNAL' => array(
46
-            '4.4' => false,
47
-            '5.0' => true,
48
-        ),
49
-        'CURLOPT_UNRESTRICTED_AUTH' => array(
50
-            '4.4' => false,
51
-            '5.0' => true,
52
-        ),
53
-        'CURLOPT_BUFFERSIZE' => array(
54
-            '4.4' => false,
55
-            '5.0' => true,
56
-        ),
57
-        'CURLOPT_HTTPAUTH' => array(
58
-            '4.4' => false,
59
-            '5.0' => true,
60
-        ),
61
-        'CURLOPT_PROXYPORT' => array(
62
-            '4.4' => false,
63
-            '5.0' => true,
64
-        ),
65
-        'CURLOPT_PROXYTYPE' => array(
66
-            '4.4' => false,
67
-            '5.0' => true,
68
-        ),
69
-        'CURLOPT_SSLCERTTYPE' => array(
70
-            '4.4' => false,
71
-            '5.0' => true,
72
-        ),
73
-        'CURLOPT_HTTP200ALIASES' => array(
74
-            '4.4' => false,
75
-            '5.0' => true,
76
-        ),
77
-        // OpenSSL:
78
-        'OPENSSL_ALGO_MD2' => array(
79
-            '4.4' => false,
80
-            '5.0' => true,
81
-        ),
82
-        'OPENSSL_ALGO_MD4' => array(
83
-            '4.4' => false,
84
-            '5.0' => true,
85
-        ),
86
-        'OPENSSL_ALGO_MD5' => array(
87
-            '4.4' => false,
88
-            '5.0' => true,
89
-        ),
90
-        'OPENSSL_ALGO_SHA1' => array(
91
-            '4.4' => false,
92
-            '5.0' => true,
93
-        ),
94
-        'OPENSSL_ALGO_DSS1' => array(
95
-            '4.4' => false,
96
-            '5.0' => true,
97
-        ),
98
-        // Tokenizer:
99
-        'T_ABSTRACT' => array(
100
-            '4.4' => false,
101
-            '5.0' => true,
102
-        ),
103
-        'T_CATCH' => array(
104
-            '4.4' => false,
105
-            '5.0' => true,
106
-        ),
107
-
108
-        'SORT_LOCALE_STRING' => array(
109
-            '5.0.1' => false,
110
-            '5.0.2' => true,
111
-        ),
112
-        'PHP_EOL' => array(
113
-            '5.0.1' => false,
114
-            '5.0.2' => true,
115
-        ),
116
-
117
-        'PHP_INT_MAX' => array(
118
-            '5.0.4' => false,
119
-            '5.0.5' => true,
120
-        ),
121
-        'PHP_INT_SIZE' => array(
122
-            '5.0.4' => false,
123
-            '5.0.5' => true,
124
-        ),
125
-
126
-        '__COMPILER_HALT_OFFSET__' => array(
127
-            '5.0' => false,
128
-            '5.1' => true,
129
-        ),
130
-        'GLOB_ERR' => array(
131
-            '5.0' => false,
132
-            '5.1' => true,
133
-        ),
134
-        // Curl:
135
-        'CURLOPT_AUTOREFERER' => array(
136
-            '5.0' => false,
137
-            '5.1' => true,
138
-        ),
139
-        'CURLOPT_BINARYTRANSFER' => array(
140
-            '5.0' => false,
141
-            '5.1' => true,
142
-        ),
143
-        'CURLOPT_COOKIESESSION' => array(
144
-            '5.0' => false,
145
-            '5.1' => true,
146
-        ),
147
-        'CURLOPT_FTPSSLAUTH' => array(
148
-            '5.0' => false,
149
-            '5.1' => true,
150
-        ),
151
-        'CURLOPT_PROXYAUTH' => array(
152
-            '5.0' => false,
153
-            '5.1' => true,
154
-        ),
155
-        'CURLOPT_TIMECONDITION' => array(
156
-            '5.0' => false,
157
-            '5.1' => true,
158
-        ),
159
-        // POSIX:
160
-        'POSIX_F_OK' => array(
161
-            '5.0' => false,
162
-            '5.1' => true,
163
-        ),
164
-        'POSIX_R_OK' => array(
165
-            '5.0' => false,
166
-            '5.1' => true,
167
-        ),
168
-        'POSIX_W_OK' => array(
169
-            '5.0' => false,
170
-            '5.1' => true,
171
-        ),
172
-        'POSIX_X_OK' => array(
173
-            '5.0' => false,
174
-            '5.1' => true,
175
-        ),
176
-        'POSIX_S_IFBLK' => array(
177
-            '5.0' => false,
178
-            '5.1' => true,
179
-        ),
180
-        'POSIX_S_IFCHR' => array(
181
-            '5.0' => false,
182
-            '5.1' => true,
183
-        ),
184
-        'POSIX_S_IFIFO' => array(
185
-            '5.0' => false,
186
-            '5.1' => true,
187
-        ),
188
-        'POSIX_S_IFREG' => array(
189
-            '5.0' => false,
190
-            '5.1' => true,
191
-        ),
192
-        'POSIX_S_IFSOCK' => array(
193
-            '5.0' => false,
194
-            '5.1' => true,
195
-        ),
196
-        // Streams:
197
-        'STREAM_IPPROTO_ICMP' => array(
198
-            '5.0' => false,
199
-            '5.1' => true,
200
-        ),
201
-        'STREAM_IPPROTO_IP' => array(
202
-            '5.0' => false,
203
-            '5.1' => true,
204
-        ),
205
-        'STREAM_IPPROTO_RAW' => array(
206
-            '5.0' => false,
207
-            '5.1' => true,
208
-        ),
209
-        'STREAM_IPPROTO_TCP' => array(
210
-            '5.0' => false,
211
-            '5.1' => true,
212
-        ),
213
-        'STREAM_IPPROTO_UDP' => array(
214
-            '5.0' => false,
215
-            '5.1' => true,
216
-        ),
217
-        'STREAM_PF_INET' => array(
218
-            '5.0' => false,
219
-            '5.1' => true,
220
-        ),
221
-        'STREAM_PF_INET6' => array(
222
-            '5.0' => false,
223
-            '5.1' => true,
224
-        ),
225
-        'STREAM_PF_UNIX' => array(
226
-            '5.0' => false,
227
-            '5.1' => true,
228
-        ),
229
-        'STREAM_SOCK_DGRAM' => array(
230
-            '5.0' => false,
231
-            '5.1' => true,
232
-        ),
233
-        'STREAM_SOCK_RAW' => array(
234
-            '5.0' => false,
235
-            '5.1' => true,
236
-        ),
237
-        'STREAM_SOCK_RDM' => array(
238
-            '5.0' => false,
239
-            '5.1' => true,
240
-        ),
241
-        'STREAM_SOCK_SEQPACKET' => array(
242
-            '5.0' => false,
243
-            '5.1' => true,
244
-        ),
245
-        'STREAM_SOCK_STREAM' => array(
246
-            '5.0' => false,
247
-            '5.1' => true,
248
-        ),
249
-        // Tokenizer:
250
-        'T_HALT_COMPILER' => array(
251
-            '5.0' => false,
252
-            '5.1' => true,
253
-        ),
254
-
255
-        // Date/Time:
256
-        'DATE_ATOM' => array(
257
-            '5.1.0' => false,
258
-            '5.1.1' => true,
259
-        ),
260
-        'DATE_COOKIE' => array(
261
-            '5.1.0' => false,
262
-            '5.1.1' => true,
263
-        ),
264
-        'DATE_ISO8601' => array(
265
-            '5.1.0' => false,
266
-            '5.1.1' => true,
267
-        ),
268
-        'DATE_RFC822' => array(
269
-            '5.1.0' => false,
270
-            '5.1.1' => true,
271
-        ),
272
-        'DATE_RFC850' => array(
273
-            '5.1.0' => false,
274
-            '5.1.1' => true,
275
-        ),
276
-        'DATE_RFC1036' => array(
277
-            '5.1.0' => false,
278
-            '5.1.1' => true,
279
-        ),
280
-        'DATE_RFC1123' => array(
281
-            '5.1.0' => false,
282
-            '5.1.1' => true,
283
-        ),
284
-        'DATE_RFC2822' => array(
285
-            '5.1.0' => false,
286
-            '5.1.1' => true,
287
-        ),
288
-        'DATE_RFC3339' => array(
289
-            '5.1.0' => false,
290
-            '5.1.1' => true,
291
-        ),
292
-        'DATE_RSS' => array(
293
-            '5.1.0' => false,
294
-            '5.1.1' => true,
295
-        ),
296
-        'DATE_W3C' => array(
297
-            '5.1.0' => false,
298
-            '5.1.1' => true,
299
-        ),
300
-
301
-        // Date/Time:
302
-        'SUNFUNCS_RET_TIMESTAMP' => array(
303
-            '5.1.1' => false,
304
-            '5.1.2' => true,
305
-        ),
306
-        'SUNFUNCS_RET_STRING' => array(
307
-            '5.1.1' => false,
308
-            '5.1.2' => true,
309
-        ),
310
-        'SUNFUNCS_RET_DOUBLE' => array(
311
-            '5.1.1' => false,
312
-            '5.1.2' => true,
313
-        ),
314
-        // XSL:
315
-        'LIBXSLT_VERSION' => array(
316
-            '5.1.1' => false,
317
-            '5.1.2' => true,
318
-        ),
319
-        'LIBXSLT_DOTTED_VERSION' => array(
320
-            '5.1.1' => false,
321
-            '5.1.2' => true,
322
-        ),
323
-        'LIBEXSLT_VERSION' => array(
324
-            '5.1.1' => false,
325
-            '5.1.2' => true,
326
-        ),
327
-        'LIBEXSLT_DOTTED_VERSION' => array(
328
-            '5.1.1' => false,
329
-            '5.1.2' => true,
330
-        ),
331
-        // URL:
332
-        'PHP_URL_SCHEME' => array(
333
-            '5.1.1' => false,
334
-            '5.1.2' => true,
335
-        ),
336
-        'PHP_URL_HOST' => array(
337
-            '5.1.1' => false,
338
-            '5.1.2' => true,
339
-        ),
340
-        'PHP_URL_PORT' => array(
341
-            '5.1.1' => false,
342
-            '5.1.2' => true,
343
-        ),
344
-        'PHP_URL_USER' => array(
345
-            '5.1.1' => false,
346
-            '5.1.2' => true,
347
-        ),
348
-        'PHP_URL_PASS' => array(
349
-            '5.1.1' => false,
350
-            '5.1.2' => true,
351
-        ),
352
-        'PHP_URL_PATH' => array(
353
-            '5.1.1' => false,
354
-            '5.1.2' => true,
355
-        ),
356
-        'PHP_URL_QUERY' => array(
357
-            '5.1.1' => false,
358
-            '5.1.2' => true,
359
-        ),
360
-        'PHP_URL_FRAGMENT' => array(
361
-            '5.1.1' => false,
362
-            '5.1.2' => true,
363
-        ),
364
-        'PHP_QUERY_RFC1738' => array(
365
-            '5.1.1' => false,
366
-            '5.1.2' => true,
367
-        ),
368
-        'PHP_QUERY_RFC3986' => array(
369
-            '5.1.1' => false,
370
-            '5.1.2' => true,
371
-        ),
372
-
373
-        // Curl:
374
-        'CURLINFO_HEADER_OUT' => array(
375
-            '5.1.2' => false,
376
-            '5.1.3' => true,
377
-        ),
378
-
379
-        // Core:
380
-        'E_RECOVERABLE_ERROR' => array(
381
-            '5.1' => false,
382
-            '5.2' => true,
383
-        ),
384
-        // Math:
385
-        'M_EULER' => array(
386
-            '5.1' => false,
387
-            '5.2' => true,
388
-        ),
389
-        'M_LNPI' => array(
390
-            '5.1' => false,
391
-            '5.2' => true,
392
-        ),
393
-        'M_SQRT3' => array(
394
-            '5.1' => false,
395
-            '5.2' => true,
396
-        ),
397
-        'M_SQRTPI' => array(
398
-            '5.1' => false,
399
-            '5.2' => true,
400
-        ),
401
-        'PATHINFO_FILENAME' => array(
402
-            '5.1' => false,
403
-            '5.2' => true,
404
-        ),
405
-        'UPLOAD_ERR_EXTENSION' => array(
406
-            '5.1' => false,
407
-            '5.2' => true,
408
-        ),
409
-        // Curl:
410
-        'CURLE_FILESIZE_EXCEEDED' => array(
411
-            '5.1' => false,
412
-            '5.2' => true,
413
-        ),
414
-        'CURLE_FTP_SSL_FAILED' => array(
415
-            '5.1' => false,
416
-            '5.2' => true,
417
-        ),
418
-        'CURLE_LDAP_INVALID_URL' => array(
419
-            '5.1' => false,
420
-            '5.2' => true,
421
-        ),
422
-        'CURLFTPAUTH_DEFAULT' => array(
423
-            '5.1' => false,
424
-            '5.2' => true,
425
-        ),
426
-        'CURLFTPAUTH_SSL' => array(
427
-            '5.1' => false,
428
-            '5.2' => true,
429
-        ),
430
-        'CURLFTPAUTH_TLS' => array(
431
-            '5.1' => false,
432
-            '5.2' => true,
433
-        ),
434
-        'CURLFTPSSL_ALL' => array(
435
-            '5.1' => false,
436
-            '5.2' => true,
437
-        ),
438
-        'CURLFTPSSL_CONTROL' => array(
439
-            '5.1' => false,
440
-            '5.2' => true,
441
-        ),
442
-        'CURLFTPSSL_NONE' => array(
443
-            '5.1' => false,
444
-            '5.2' => true,
445
-        ),
446
-        'CURLFTPSSL_TRY' => array(
447
-            '5.1' => false,
448
-            '5.2' => true,
449
-        ),
450
-        'CURLOPT_FTP_SSL' => array(
451
-            '5.1' => false,
452
-            '5.2' => true,
453
-        ),
454
-        // Ming:
455
-        'SWFTEXTFIELD_USEFONT' => array(
456
-            '5.1' => false,
457
-            '5.2' => true,
458
-        ),
459
-        'SWFTEXTFIELD_AUTOSIZE' => array(
460
-            '5.1' => false,
461
-            '5.2' => true,
462
-        ),
463
-        'SWF_SOUND_NOT_COMPRESSED' => array(
464
-            '5.1' => false,
465
-            '5.2' => true,
466
-        ),
467
-        'SWF_SOUND_ADPCM_COMPRESSED' => array(
468
-            '5.1' => false,
469
-            '5.2' => true,
470
-        ),
471
-        'SWF_SOUND_MP3_COMPRESSED' => array(
472
-            '5.1' => false,
473
-            '5.2' => true,
474
-        ),
475
-        'SWF_SOUND_NOT_COMPRESSED_LE' => array(
476
-            '5.1' => false,
477
-            '5.2' => true,
478
-        ),
479
-        'SWF_SOUND_NELLY_COMPRESSED' => array(
480
-            '5.1' => false,
481
-            '5.2' => true,
482
-        ),
483
-        'SWF_SOUND_5KHZ' => array(
484
-            '5.1' => false,
485
-            '5.2' => true,
486
-        ),
487
-        'SWF_SOUND_11KHZ' => array(
488
-            '5.1' => false,
489
-            '5.2' => true,
490
-        ),
491
-        'SWF_SOUND_22KHZ' => array(
492
-            '5.1' => false,
493
-            '5.2' => true,
494
-        ),
495
-        'SWF_SOUND_44KHZ' => array(
496
-            '5.1' => false,
497
-            '5.2' => true,
498
-        ),
499
-        'SWF_SOUND_8BITS' => array(
500
-            '5.1' => false,
501
-            '5.2' => true,
502
-        ),
503
-        'SWF_SOUND_16BITS' => array(
504
-            '5.1' => false,
505
-            '5.2' => true,
506
-        ),
507
-        'SWF_SOUND_MONO' => array(
508
-            '5.1' => false,
509
-            '5.2' => true,
510
-        ),
511
-        'SWF_SOUND_STEREO' => array(
512
-            '5.1' => false,
513
-            '5.2' => true,
514
-        ),
515
-        // OpenSSL:
516
-        'OPENSSL_KEYTYPE_EC' => array(
517
-            '5.1' => false,
518
-            '5.2' => true,
519
-        ),
520
-        'OPENSSL_VERSION_NUMBER' => array(
521
-            '5.1' => false,
522
-            '5.2' => true,
523
-        ),
524
-        'OPENSSL_VERSION_TEXT' => array(
525
-            '5.1' => false,
526
-            '5.2' => true,
527
-        ),
528
-        // PCRE:
529
-        'PREG_BACKTRACK_LIMIT_ERROR' => array(
530
-            '5.1' => false,
531
-            '5.2' => true,
532
-        ),
533
-        'PREG_BAD_UTF8_ERROR' => array(
534
-            '5.1' => false,
535
-            '5.2' => true,
536
-        ),
537
-        'PREG_INTERNAL_ERROR' => array(
538
-            '5.1' => false,
539
-            '5.2' => true,
540
-        ),
541
-        'PREG_NO_ERROR' => array(
542
-            '5.1' => false,
543
-            '5.2' => true,
544
-        ),
545
-        'PREG_RECURSION_LIMIT_ERROR' => array(
546
-            '5.1' => false,
547
-            '5.2' => true,
548
-        ),
549
-        // Snmp:
550
-        'SNMP_OID_OUTPUT_FULL' => array(
551
-            '5.1' => false,
552
-            '5.2' => true,
553
-        ),
554
-        'SNMP_OID_OUTPUT_NUMERIC' => array(
555
-            '5.1' => false,
556
-            '5.2' => true,
557
-        ),
558
-        // Semaphore:
559
-        'MSG_EAGAIN' => array(
560
-            '5.1' => false,
561
-            '5.2' => true,
562
-        ),
563
-        'MSG_ENOMSG' => array(
564
-            '5.1' => false,
565
-            '5.2' => true,
566
-        ),
567
-
568
-        // Curl:
569
-        'CURLOPT_TCP_NODELAY' => array(
570
-            '5.2.0' => false,
571
-            '5.2.1' => true,
572
-        ),
573
-
574
-        // Stream:
575
-        'STREAM_SHUT_RD' => array(
576
-            '5.2.0' => false,
577
-            '5.2.1' => true,
578
-        ),
579
-        'STREAM_SHUT_WR' => array(
580
-            '5.2.0' => false,
581
-            '5.2.1' => true,
582
-        ),
583
-        'STREAM_SHUT_RDWR' => array(
584
-            '5.2.0' => false,
585
-            '5.2.1' => true,
586
-        ),
587
-
588
-        'GMP_VERSION' => array(
589
-            '5.2.1' => false,
590
-            '5.2.2' => true,
591
-        ),
592
-
593
-        // Curl:
594
-        'CURLOPT_TIMEOUT_MS' => array(
595
-            '5.2.2' => false,
596
-            '5.2.3' => true,
597
-        ),
598
-        'CURLOPT_CONNECTTIMEOUT_MS' => array(
599
-            '5.2.2' => false,
600
-            '5.2.3' => true,
601
-        ),
602
-
603
-        // Curl:
604
-        'CURLOPT_PRIVATE' => array(
605
-            '5.2.3' => false,
606
-            '5.2.4' => true,
607
-        ),
608
-        'CURLINFO_PRIVATE' => array(
609
-            '5.2.3' => false,
610
-            '5.2.4' => true,
611
-        ),
612
-        // GD:
613
-        'GD_VERSION' => array(
614
-            '5.2.3' => false,
615
-            '5.2.4' => true,
616
-        ),
617
-        'GD_MAJOR_VERSION' => array(
618
-            '5.2.3' => false,
619
-            '5.2.4' => true,
620
-        ),
621
-        'GD_MINOR_VERSION' => array(
622
-            '5.2.3' => false,
623
-            '5.2.4' => true,
624
-        ),
625
-        'GD_RELEASE_VERSION' => array(
626
-            '5.2.3' => false,
627
-            '5.2.4' => true,
628
-        ),
629
-        'GD_EXTRA_VERSION' => array(
630
-            '5.2.3' => false,
631
-            '5.2.4' => true,
632
-        ),
633
-        // PCRE:
634
-        'PCRE_VERSION' => array(
635
-            '5.2.3' => false,
636
-            '5.2.4' => true,
637
-        ),
638
-
639
-        'PHP_MAJOR_VERSION' => array(
640
-            '5.2.6' => false,
641
-            '5.2.7' => true,
642
-        ),
643
-        'PHP_MINOR_VERSION' => array(
644
-            '5.2.6' => false,
645
-            '5.2.7' => true,
646
-        ),
647
-        'PHP_RELEASE_VERSION' => array(
648
-            '5.2.6' => false,
649
-            '5.2.7' => true,
650
-        ),
651
-        'PHP_VERSION_ID' => array(
652
-            '5.2.6' => false,
653
-            '5.2.7' => true,
654
-        ),
655
-        'PHP_EXTRA_VERSION' => array(
656
-            '5.2.6' => false,
657
-            '5.2.7' => true,
658
-        ),
659
-        'PHP_ZTS' => array(
660
-            '5.2.6' => false,
661
-            '5.2.7' => true,
662
-        ),
663
-        'PHP_DEBUG' => array(
664
-            '5.2.6' => false,
665
-            '5.2.7' => true,
666
-        ),
667
-        'FILE_BINARY' => array(
668
-            '5.2.6' => false,
669
-            '5.2.7' => true,
670
-        ),
671
-        'FILE_TEXT' => array(
672
-            '5.2.6' => false,
673
-            '5.2.7' => true,
674
-        ),
675
-        // Sockets:
676
-        'TCP_NODELAY' => array(
677
-            '5.2.6' => false,
678
-            '5.2.7' => true,
679
-        ),
680
-
681
-        // Curl:
682
-        'CURLOPT_PROTOCOLS' => array(
683
-            '5.2.9'  => false,
684
-            '5.2.10' => true,
685
-        ),
686
-        'CURLOPT_REDIR_PROTOCOLS' => array(
687
-            '5.2.9'  => false,
688
-            '5.2.10' => true,
689
-        ),
690
-        'CURLPROXY_SOCKS4' => array(
691
-            '5.2.9'  => false,
692
-            '5.2.10' => true,
693
-        ),
694
-
695
-        // Libxml:
696
-        'LIBXML_PARSEHUGE' => array(
697
-            '5.2.11' => false,
698
-            '5.2.12' => true,
699
-        ),
700
-
701
-        // Core:
702
-        'ENT_IGNORE' => array(
703
-            '5.2' => false,
704
-            '5.3' => true,
705
-        ),
706
-        'E_DEPRECATED' => array(
707
-            '5.2' => false,
708
-            '5.3' => true,
709
-        ),
710
-        'E_USER_DEPRECATED' => array(
711
-            '5.2' => false,
712
-            '5.3' => true,
713
-        ),
714
-        'INI_SCANNER_NORMAL' => array(
715
-            '5.2' => false,
716
-            '5.3' => true,
717
-        ),
718
-        'INI_SCANNER_RAW' => array(
719
-            '5.2' => false,
720
-            '5.3' => true,
721
-        ),
722
-        'PHP_MAXPATHLEN' => array(
723
-            '5.2' => false,
724
-            '5.3' => true,
725
-        ),
726
-        'PHP_WINDOWS_NT_DOMAIN_CONTROLLER' => array(
727
-            '5.2' => false,
728
-            '5.3' => true,
729
-        ),
730
-        'PHP_WINDOWS_NT_SERVER' => array(
731
-            '5.2' => false,
732
-            '5.3' => true,
733
-        ),
734
-        'PHP_WINDOWS_NT_WORKSTATION' => array(
735
-            '5.2' => false,
736
-            '5.3' => true,
737
-        ),
738
-        'PHP_WINDOWS_VERSION_BUILD' => array(
739
-            '5.2' => false,
740
-            '5.3' => true,
741
-        ),
742
-        'PHP_WINDOWS_VERSION_MAJOR' => array(
743
-            '5.2' => false,
744
-            '5.3' => true,
745
-        ),
746
-        'PHP_WINDOWS_VERSION_MINOR' => array(
747
-            '5.2' => false,
748
-            '5.3' => true,
749
-        ),
750
-        'PHP_WINDOWS_VERSION_PLATFORM' => array(
751
-            '5.2' => false,
752
-            '5.3' => true,
753
-        ),
754
-        'PHP_WINDOWS_VERSION_PRODUCTTYPE' => array(
755
-            '5.2' => false,
756
-            '5.3' => true,
757
-        ),
758
-        'PHP_WINDOWS_VERSION_SP_MAJOR' => array(
759
-            '5.2' => false,
760
-            '5.3' => true,
761
-        ),
762
-        'PHP_WINDOWS_VERSION_SP_MINOR' => array(
763
-            '5.2' => false,
764
-            '5.3' => true,
765
-        ),
766
-        'PHP_WINDOWS_VERSION_SUITEMASK' => array(
767
-            '5.2' => false,
768
-            '5.3' => true,
769
-        ),
770
-        // Curl:
771
-        'CURLINFO_CERTINFO' => array(
772
-            '5.2' => false,
773
-            '5.3' => true,
774
-        ),
775
-        'CURLOPT_PROGRESSFUNCTION' => array(
776
-            '5.2' => false,
777
-            '5.3' => true,
778
-        ),
779
-        'CURLE_SSH' => array(
780
-            '5.2' => false,
781
-            '5.3' => true,
782
-        ),
783
-        // GD:
784
-        'IMG_FILTER_PIXELATE' => array(
785
-            '5.2' => false,
786
-            '5.3' => true,
787
-        ),
788
-        'IMAGETYPE_ICO' => array(
789
-            '5.2' => false,
790
-            '5.3' => true,
791
-        ),
792
-        // Fileinfo:
793
-        'FILEINFO_MIME_TYPE' => array(
794
-            '5.2' => false,
795
-            '5.3' => true,
796
-        ),
797
-        'FILEINFO_MIME_ENCODING' => array(
798
-            '5.2' => false,
799
-            '5.3' => true,
800
-        ),
801
-        // JSON:
802
-        'JSON_ERROR_CTRL_CHAR' => array(
803
-            '5.2' => false,
804
-            '5.3' => true,
805
-        ),
806
-        'JSON_ERROR_DEPTH' => array(
807
-            '5.2' => false,
808
-            '5.3' => true,
809
-        ),
810
-        'JSON_ERROR_NONE' => array(
811
-            '5.2' => false,
812
-            '5.3' => true,
813
-        ),
814
-        'JSON_ERROR_STATE_MISMATCH' => array(
815
-            '5.2' => false,
816
-            '5.3' => true,
817
-        ),
818
-        'JSON_ERROR_SYNTAX' => array(
819
-            '5.2' => false,
820
-            '5.3' => true,
821
-        ),
822
-        'JSON_FORCE_OBJECT' => array(
823
-            '5.2' => false,
824
-            '5.3' => true,
825
-        ),
826
-        'JSON_HEX_TAG' => array(
827
-            '5.2' => false,
828
-            '5.3' => true,
829
-        ),
830
-        'JSON_HEX_AMP' => array(
831
-            '5.2' => false,
832
-            '5.3' => true,
833
-        ),
834
-        'JSON_HEX_APOS' => array(
835
-            '5.2' => false,
836
-            '5.3' => true,
837
-        ),
838
-        'JSON_HEX_QUOT' => array(
839
-            '5.2' => false,
840
-            '5.3' => true,
841
-        ),
842
-        // LDAP:
843
-        'LDAP_OPT_NETWORK_TIMEOUT' => array(
844
-            '5.2' => false,
845
-            '5.3' => true,
846
-        ),
847
-        // Libxml:
848
-        'LIBXML_LOADED_VERSION' => array(
849
-            '5.2' => false,
850
-            '5.3' => true,
851
-        ),
852
-        // Math:
853
-        'PHP_ROUND_HALF_UP' => array(
854
-            '5.2' => false,
855
-            '5.3' => true,
856
-        ),
857
-        'PHP_ROUND_HALF_DOWN' => array(
858
-            '5.2' => false,
859
-            '5.3' => true,
860
-        ),
861
-        'PHP_ROUND_HALF_EVEN' => array(
862
-            '5.2' => false,
863
-            '5.3' => true,
864
-        ),
865
-        'PHP_ROUND_HALF_ODD' => array(
866
-            '5.2' => false,
867
-            '5.3' => true,
868
-        ),
869
-        // Mysqli
870
-        'MYSQLI_OPT_INT_AND_FLOAT_NATIVE' => array(
871
-            '5.2' => false,
872
-            '5.3' => true,
873
-        ),
874
-        'MYSQLI_OPT_NET_CMD_BUFFER_SIZE' => array(
875
-            '5.2' => false,
876
-            '5.3' => true,
877
-        ),
878
-        'MYSQLI_OPT_NET_READ_BUFFER_SIZE' => array(
879
-            '5.2' => false,
880
-            '5.3' => true,
881
-        ),
882
-        'MYSQLI_OPT_SSL_VERIFY_SERVER_CERT' => array(
883
-            '5.2' => false,
884
-            '5.3' => true,
885
-        ),
886
-        // OCI8:
887
-        'OCI_CRED_EXT' => array(
888
-            '5.2' => false,
889
-            '5.3' => true,
890
-        ),
891
-        // PCRE:
892
-        'PREG_BAD_UTF8_OFFSET_ERROR' => array(
893
-            '5.2' => false,
894
-            '5.3' => true,
895
-        ),
896
-        // PCNTL:
897
-        'BUS_ADRALN' => array(
898
-            '5.2' => false,
899
-            '5.3' => true,
900
-        ),
901
-        'BUS_ADRERR' => array(
902
-            '5.2' => false,
903
-            '5.3' => true,
904
-        ),
905
-        'BUS_OBJERR' => array(
906
-            '5.2' => false,
907
-            '5.3' => true,
908
-        ),
909
-        'CLD_CONTIUNED' => array(
910
-            '5.2' => false,
911
-            '5.3' => true,
912
-        ),
913
-        'CLD_DUMPED' => array(
914
-            '5.2' => false,
915
-            '5.3' => true,
916
-        ),
917
-        'CLD_EXITED' => array(
918
-            '5.2' => false,
919
-            '5.3' => true,
920
-        ),
921
-        'CLD_KILLED' => array(
922
-            '5.2' => false,
923
-            '5.3' => true,
924
-        ),
925
-        'CLD_STOPPED' => array(
926
-            '5.2' => false,
927
-            '5.3' => true,
928
-        ),
929
-        'CLD_TRAPPED' => array(
930
-            '5.2' => false,
931
-            '5.3' => true,
932
-        ),
933
-        'FPE_FLTDIV' => array(
934
-            '5.2' => false,
935
-            '5.3' => true,
936
-        ),
937
-        'FPE_FLTINV' => array(
938
-            '5.2' => false,
939
-            '5.3' => true,
940
-        ),
941
-        'FPE_FLTOVF' => array(
942
-            '5.2' => false,
943
-            '5.3' => true,
944
-        ),
945
-        'FPE_FLTRES' => array(
946
-            '5.2' => false,
947
-            '5.3' => true,
948
-        ),
949
-        'FPE_FLTSUB' => array(
950
-            '5.2' => false,
951
-            '5.3' => true,
952
-        ),
953
-        'FPE_FLTUND' => array(
954
-            '5.2' => false,
955
-            '5.3' => true,
956
-        ),
957
-        'FPE_INTDIV' => array(
958
-            '5.2' => false,
959
-            '5.3' => true,
960
-        ),
961
-        'FPE_INTOVF' => array(
962
-            '5.2' => false,
963
-            '5.3' => true,
964
-        ),
965
-        'ILL_BADSTK' => array(
966
-            '5.2' => false,
967
-            '5.3' => true,
968
-        ),
969
-        'ILL_COPROC' => array(
970
-            '5.2' => false,
971
-            '5.3' => true,
972
-        ),
973
-        'ILL_ILLADR' => array(
974
-            '5.2' => false,
975
-            '5.3' => true,
976
-        ),
977
-        'ILL_ILLOPC' => array(
978
-            '5.2' => false,
979
-            '5.3' => true,
980
-        ),
981
-        'ILL_ILLOPN' => array(
982
-            '5.2' => false,
983
-            '5.3' => true,
984
-        ),
985
-        'ILL_ILLTRP' => array(
986
-            '5.2' => false,
987
-            '5.3' => true,
988
-        ),
989
-        'ILL_PRVOPC' => array(
990
-            '5.2' => false,
991
-            '5.3' => true,
992
-        ),
993
-        'ILL_PRVREG' => array(
994
-            '5.2' => false,
995
-            '5.3' => true,
996
-        ),
997
-        'POLL_ERR' => array(
998
-            '5.2' => false,
999
-            '5.3' => true,
1000
-        ),
1001
-        'POLL_HUP' => array(
1002
-            '5.2' => false,
1003
-            '5.3' => true,
1004
-        ),
1005
-        'POLL_IN' => array(
1006
-            '5.2' => false,
1007
-            '5.3' => true,
1008
-        ),
1009
-        'POLL_MSG' => array(
1010
-            '5.2' => false,
1011
-            '5.3' => true,
1012
-        ),
1013
-        'POLL_OUT' => array(
1014
-            '5.2' => false,
1015
-            '5.3' => true,
1016
-        ),
1017
-        'POLL_PRI' => array(
1018
-            '5.2' => false,
1019
-            '5.3' => true,
1020
-        ),
1021
-        'SEGV_ACCERR' => array(
1022
-            '5.2' => false,
1023
-            '5.3' => true,
1024
-        ),
1025
-        'SEGV_MAPERR' => array(
1026
-            '5.2' => false,
1027
-            '5.3' => true,
1028
-        ),
1029
-        'SI_ASYNCIO' => array(
1030
-            '5.2' => false,
1031
-            '5.3' => true,
1032
-        ),
1033
-        'SI_KERNEL' => array(
1034
-            '5.2' => false,
1035
-            '5.3' => true,
1036
-        ),
1037
-        'SI_MSGGQ' => array(
1038
-            '5.2' => false,
1039
-            '5.3' => true,
1040
-        ),
1041
-        'SI_NOINFO' => array(
1042
-            '5.2' => false,
1043
-            '5.3' => true,
1044
-        ),
1045
-        'SI_QUEUE' => array(
1046
-            '5.2' => false,
1047
-            '5.3' => true,
1048
-        ),
1049
-        'SI_SIGIO' => array(
1050
-            '5.2' => false,
1051
-            '5.3' => true,
1052
-        ),
1053
-        'SI_TIMER' => array(
1054
-            '5.2' => false,
1055
-            '5.3' => true,
1056
-        ),
1057
-        'SI_TKILL' => array(
1058
-            '5.2' => false,
1059
-            '5.3' => true,
1060
-        ),
1061
-        'SI_USER' => array(
1062
-            '5.2' => false,
1063
-            '5.3' => true,
1064
-        ),
1065
-        'SIG_BLOCK' => array(
1066
-            '5.2' => false,
1067
-            '5.3' => true,
1068
-        ),
1069
-        'SIG_SETMASK' => array(
1070
-            '5.2' => false,
1071
-            '5.3' => true,
1072
-        ),
1073
-        'SIG_UNBLOCK' => array(
1074
-            '5.2' => false,
1075
-            '5.3' => true,
1076
-        ),
1077
-        'TRAP_BRKPT' => array(
1078
-            '5.2' => false,
1079
-            '5.3' => true,
1080
-        ),
1081
-        'TRAP_TRACE' => array(
1082
-            '5.2' => false,
1083
-            '5.3' => true,
1084
-        ),
1085
-        // Tokenizer:
1086
-        'T_DIR' => array(
1087
-            '5.2' => false,
1088
-            '5.3' => true,
1089
-        ),
1090
-        'T_GOTO' => array(
1091
-            '5.2' => false,
1092
-            '5.3' => true,
1093
-        ),
1094
-        'T_NAMESPACE' => array(
1095
-            '5.2' => false,
1096
-            '5.3' => true,
1097
-        ),
1098
-        'T_NS_C' => array(
1099
-            '5.2' => false,
1100
-            '5.3' => true,
1101
-        ),
1102
-        'T_NS_SEPARATOR' => array(
1103
-            '5.2' => false,
1104
-            '5.3' => true,
1105
-        ),
1106
-        'T_USE' => array(
1107
-            '5.2' => false,
1108
-            '5.3' => true,
1109
-        ),
1110
-
1111
-        // OCI8:
1112
-        'OCI_NO_AUTO_COMMIT' => array(
1113
-            '5.3.1' => false,
1114
-            '5.3.2' => true,
1115
-        ),
1116
-        // OpenSSL:
1117
-        'OPENSSL_TLSEXT_SERVER_NAME' => array(
1118
-            '5.3.1' => false,
1119
-            '5.3.2' => true,
1120
-        ),
1121
-
1122
-        // JSON:
1123
-        'JSON_ERROR_UTF8' => array(
1124
-            '5.3.2' => false,
1125
-            '5.3.3' => true,
1126
-        ),
1127
-        'JSON_NUMERIC_CHECK' => array(
1128
-            '5.3.2' => false,
1129
-            '5.3.3' => true,
1130
-        ),
1131
-
1132
-        'DEBUG_BACKTRACE_IGNORE_ARGS' => array(
1133
-            '5.3.5' => false,
1134
-            '5.3.6' => true,
1135
-        ),
1136
-
1137
-        'CURLINFO_REDIRECT_URL' => array(
1138
-            '5.3.6' => false,
1139
-            '5.3.7' => true,
1140
-        ),
1141
-        'PHP_MANDIR' => array(
1142
-            '5.3.6' => false,
1143
-            '5.3.7' => true,
1144
-        ),
1145
-
1146
-        'PHP_BINARY' => array(
1147
-            '5.3' => false,
1148
-            '5.4' => true,
1149
-        ),
1150
-        'SORT_NATURAL' => array(
1151
-            '5.3' => false,
1152
-            '5.4' => true,
1153
-        ),
1154
-        'SORT_FLAG_CASE' => array(
1155
-            '5.3' => false,
1156
-            '5.4' => true,
1157
-        ),
1158
-        'ENT_HTML401' => array(
1159
-            '5.3' => false,
1160
-            '5.4' => true,
1161
-        ),
1162
-        'ENT_XML1' => array(
1163
-            '5.3' => false,
1164
-            '5.4' => true,
1165
-        ),
1166
-        'ENT_XHTML' => array(
1167
-            '5.3' => false,
1168
-            '5.4' => true,
1169
-        ),
1170
-        'ENT_HTML5' => array(
1171
-            '5.3' => false,
1172
-            '5.4' => true,
1173
-        ),
1174
-        'ENT_SUBSTITUTE' => array(
1175
-            '5.3' => false,
1176
-            '5.4' => true,
1177
-        ),
1178
-        'ENT_DISALLOWED' => array(
1179
-            '5.3' => false,
1180
-            '5.4' => true,
1181
-        ),
1182
-        'IPPROTO_IP' => array(
1183
-            '5.3' => false,
1184
-            '5.4' => true,
1185
-        ),
1186
-        'IPPROTO_IPV6' => array(
1187
-            '5.3' => false,
1188
-            '5.4' => true,
1189
-        ),
1190
-        'IPV6_MULTICAST_HOPS' => array(
1191
-            '5.3' => false,
1192
-            '5.4' => true,
1193
-        ),
1194
-        'IPV6_MULTICAST_IF' => array(
1195
-            '5.3' => false,
1196
-            '5.4' => true,
1197
-        ),
1198
-        'IPV6_MULTICAST_LOOP' => array(
1199
-            '5.3' => false,
1200
-            '5.4' => true,
1201
-        ),
1202
-        'IP_MULTICAST_IF' => array(
1203
-            '5.3' => false,
1204
-            '5.4' => true,
1205
-        ),
1206
-        'IP_MULTICAST_LOOP' => array(
1207
-            '5.3' => false,
1208
-            '5.4' => true,
1209
-        ),
1210
-        'IP_MULTICAST_TTL' => array(
1211
-            '5.3' => false,
1212
-            '5.4' => true,
1213
-        ),
1214
-        'MCAST_JOIN_GROUP' => array(
1215
-            '5.3' => false,
1216
-            '5.4' => true,
1217
-        ),
1218
-        'MCAST_LEAVE_GROUP' => array(
1219
-            '5.3' => false,
1220
-            '5.4' => true,
1221
-        ),
1222
-        'MCAST_BLOCK_SOURCE' => array(
1223
-            '5.3' => false,
1224
-            '5.4' => true,
1225
-        ),
1226
-        'MCAST_UNBLOCK_SOURCE' => array(
1227
-            '5.3' => false,
1228
-            '5.4' => true,
1229
-        ),
1230
-        'MCAST_JOIN_SOURCE_GROUP' => array(
1231
-            '5.3' => false,
1232
-            '5.4' => true,
1233
-        ),
1234
-        'MCAST_LEAVE_SOURCE_GROUP' => array(
1235
-            '5.3' => false,
1236
-            '5.4' => true,
1237
-        ),
1238
-        // Curl:
1239
-        'CURLOPT_MAX_RECV_SPEED_LARGE' => array(
1240
-            '5.3' => false,
1241
-            '5.4' => true,
1242
-        ),
1243
-        'CURLOPT_MAX_SEND_SPEED_LARGE' => array(
1244
-            '5.3' => false,
1245
-            '5.4' => true,
1246
-        ),
1247
-        // Directories:
1248
-        'SCANDIR_SORT_ASCENDING' => array(
1249
-            '5.3' => false,
1250
-            '5.4' => true,
1251
-        ),
1252
-        'SCANDIR_SORT_DESCENDING' => array(
1253
-            '5.3' => false,
1254
-            '5.4' => true,
1255
-        ),
1256
-        'SCANDIR_SORT_NONE' => array(
1257
-            '5.3' => false,
1258
-            '5.4' => true,
1259
-        ),
1260
-        // LibXML:
1261
-        'LIBXML_HTML_NODEFDTD' => array(
1262
-            '5.3' => false,
1263
-            '5.4' => true,
1264
-        ),
1265
-        'LIBXML_HTML_NOIMPLIED' => array(
1266
-            '5.3' => false,
1267
-            '5.4' => true,
1268
-        ),
1269
-        'LIBXML_PEDANTIC' => array(
1270
-            '5.3' => false,
1271
-            '5.4' => true,
1272
-        ),
1273
-        // OpenSSL:
1274
-        'OPENSSL_CIPHER_AES_128_CBC' => array(
1275
-            '5.3' => false,
1276
-            '5.4' => true,
1277
-        ),
1278
-        'OPENSSL_CIPHER_AES_192_CBC' => array(
1279
-            '5.3' => false,
1280
-            '5.4' => true,
1281
-        ),
1282
-        'OPENSSL_CIPHER_AES_256_CBC' => array(
1283
-            '5.3' => false,
1284
-            '5.4' => true,
1285
-        ),
1286
-        'OPENSSL_RAW_DATA' => array(
1287
-            '5.3' => false,
1288
-            '5.4' => true,
1289
-        ),
1290
-        'OPENSSL_ZERO_PADDING' => array(
1291
-            '5.3' => false,
1292
-            '5.4' => true,
1293
-        ),
1294
-        // Output buffering:
1295
-        'PHP_OUTPUT_HANDLER_CLEAN' => array(
1296
-            '5.3' => false,
1297
-            '5.4' => true,
1298
-        ),
1299
-        'PHP_OUTPUT_HANDLER_CLEANABLE' => array(
1300
-            '5.3' => false,
1301
-            '5.4' => true,
1302
-        ),
1303
-        'PHP_OUTPUT_HANDLER_DISABLED' => array(
1304
-            '5.3' => false,
1305
-            '5.4' => true,
1306
-        ),
1307
-        'PHP_OUTPUT_HANDLER_FINAL' => array(
1308
-            '5.3' => false,
1309
-            '5.4' => true,
1310
-        ),
1311
-        'PHP_OUTPUT_HANDLER_FLUSH' => array(
1312
-            '5.3' => false,
1313
-            '5.4' => true,
1314
-        ),
1315
-        'PHP_OUTPUT_HANDLER_FLUSHABLE' => array(
1316
-            '5.3' => false,
1317
-            '5.4' => true,
1318
-        ),
1319
-        'PHP_OUTPUT_HANDLER_REMOVABLE' => array(
1320
-            '5.3' => false,
1321
-            '5.4' => true,
1322
-        ),
1323
-        'PHP_OUTPUT_HANDLER_STARTED' => array(
1324
-            '5.3' => false,
1325
-            '5.4' => true,
1326
-        ),
1327
-        'PHP_OUTPUT_HANDLER_STDFLAGS' => array(
1328
-            '5.3' => false,
1329
-            '5.4' => true,
1330
-        ),
1331
-        'PHP_OUTPUT_HANDLER_WRITE' => array(
1332
-            '5.3' => false,
1333
-            '5.4' => true,
1334
-        ),
1335
-        // Sessions:
1336
-        'PHP_SESSION_ACTIVE' => array(
1337
-            '5.3' => false,
1338
-            '5.4' => true,
1339
-        ),
1340
-        'PHP_SESSION_DISABLED' => array(
1341
-            '5.3' => false,
1342
-            '5.4' => true,
1343
-        ),
1344
-        'PHP_SESSION_NONE' => array(
1345
-            '5.3' => false,
1346
-            '5.4' => true,
1347
-        ),
1348
-        // Streams:
1349
-        'STREAM_META_ACCESS' => array(
1350
-            '5.3' => false,
1351
-            '5.4' => true,
1352
-        ),
1353
-        'STREAM_META_GROUP' => array(
1354
-            '5.3' => false,
1355
-            '5.4' => true,
1356
-        ),
1357
-        'STREAM_META_GROUP_NAME' => array(
1358
-            '5.3' => false,
1359
-            '5.4' => true,
1360
-        ),
1361
-        'STREAM_META_OWNER' => array(
1362
-            '5.3' => false,
1363
-            '5.4' => true,
1364
-        ),
1365
-        'STREAM_META_OWNER_NAME' => array(
1366
-            '5.3' => false,
1367
-            '5.4' => true,
1368
-        ),
1369
-        'STREAM_META_TOUCH' => array(
1370
-            '5.3' => false,
1371
-            '5.4' => true,
1372
-        ),
1373
-        // Intl:
1374
-        'U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR' => array(
1375
-            '5.3' => false,
1376
-            '5.4' => true,
1377
-        ),
1378
-        'IDNA_CHECK_BIDI' => array(
1379
-            '5.3' => false,
1380
-            '5.4' => true,
1381
-        ),
1382
-        'IDNA_CHECK_CONTEXTJ' => array(
1383
-            '5.3' => false,
1384
-            '5.4' => true,
1385
-        ),
1386
-        'IDNA_NONTRANSITIONAL_TO_ASCII' => array(
1387
-            '5.3' => false,
1388
-            '5.4' => true,
1389
-        ),
1390
-        'IDNA_NONTRANSITIONAL_TO_UNICODE' => array(
1391
-            '5.3' => false,
1392
-            '5.4' => true,
1393
-        ),
1394
-        'INTL_IDNA_VARIANT_2003' => array(
1395
-            '5.3' => false,
1396
-            '5.4' => true,
1397
-        ),
1398
-        'INTL_IDNA_VARIANT_UTS46' => array(
1399
-            '5.3' => false,
1400
-            '5.4' => true,
1401
-        ),
1402
-        'IDNA_ERROR_EMPTY_LABEL' => array(
1403
-            '5.3' => false,
1404
-            '5.4' => true,
1405
-        ),
1406
-        'IDNA_ERROR_LABEL_TOO_LONG' => array(
1407
-            '5.3' => false,
1408
-            '5.4' => true,
1409
-        ),
1410
-        'IDNA_ERROR_DOMAIN_NAME_TOO_LONG' => array(
1411
-            '5.3' => false,
1412
-            '5.4' => true,
1413
-        ),
1414
-        'IDNA_ERROR_LEADING_HYPHEN' => array(
1415
-            '5.3' => false,
1416
-            '5.4' => true,
1417
-        ),
1418
-        'IDNA_ERROR_TRAILING_HYPHEN' => array(
1419
-            '5.3' => false,
1420
-            '5.4' => true,
1421
-        ),
1422
-        'IDNA_ERROR_HYPHEN_3_4' => array(
1423
-            '5.3' => false,
1424
-            '5.4' => true,
1425
-        ),
1426
-        'IDNA_ERROR_LEADING_COMBINING_MARK' => array(
1427
-            '5.3' => false,
1428
-            '5.4' => true,
1429
-        ),
1430
-        'IDNA_ERROR_DISALLOWED' => array(
1431
-            '5.3' => false,
1432
-            '5.4' => true,
1433
-        ),
1434
-        'IDNA_ERROR_PUNYCODE' => array(
1435
-            '5.3' => false,
1436
-            '5.4' => true,
1437
-        ),
1438
-        'IDNA_ERROR_LABEL_HAS_DOT' => array(
1439
-            '5.3' => false,
1440
-            '5.4' => true,
1441
-        ),
1442
-        'IDNA_ERROR_INVALID_ACE_LABEL' => array(
1443
-            '5.3' => false,
1444
-            '5.4' => true,
1445
-        ),
1446
-        'IDNA_ERROR_BIDI' => array(
1447
-            '5.3' => false,
1448
-            '5.4' => true,
1449
-        ),
1450
-        'IDNA_ERROR_CONTEXTJ' => array(
1451
-            '5.3' => false,
1452
-            '5.4' => true,
1453
-        ),
1454
-        // Json:
1455
-        'JSON_PRETTY_PRINT' => array(
1456
-            '5.3' => false,
1457
-            '5.4' => true,
1458
-        ),
1459
-        'JSON_UNESCAPED_SLASHES' => array(
1460
-            '5.3' => false,
1461
-            '5.4' => true,
1462
-        ),
1463
-        'JSON_UNESCAPED_UNICODE' => array(
1464
-            '5.3' => false,
1465
-            '5.4' => true,
1466
-        ),
1467
-        'JSON_BIGINT_AS_STRING' => array(
1468
-            '5.3' => false,
1469
-            '5.4' => true,
1470
-        ),
1471
-        'JSON_OBJECT_AS_ARRAY' => array(
1472
-            '5.3' => false,
1473
-            '5.4' => true,
1474
-        ),
1475
-        // Snmp:
1476
-        'SNMP_OID_OUTPUT_SUFFIX' => array(
1477
-            '5.3' => false,
1478
-            '5.4' => true,
1479
-        ),
1480
-        'SNMP_OID_OUTPUT_MODULE' => array(
1481
-            '5.3' => false,
1482
-            '5.4' => true,
1483
-        ),
1484
-        'SNMP_OID_OUTPUT_UCD' => array(
1485
-            '5.3' => false,
1486
-            '5.4' => true,
1487
-        ),
1488
-        'SNMP_OID_OUTPUT_NONE' => array(
1489
-            '5.3' => false,
1490
-            '5.4' => true,
1491
-        ),
1492
-        // Tokenizer:
1493
-        'T_INSTEADOF' => array(
1494
-            '5.3' => false,
1495
-            '5.4' => true,
1496
-        ),
1497
-        'T_TRAIT' => array(
1498
-            '5.3' => false,
1499
-            '5.4' => true,
1500
-        ),
1501
-        'T_TRAIT_C' => array(
1502
-            '5.3' => false,
1503
-            '5.4' => true,
1504
-        ),
1505
-
1506
-        // Curl:
1507
-        'CURLINFO_PRIMARY_IP' => array(
1508
-            '5.4.6' => false,
1509
-            '5.4.7' => true,
1510
-        ),
1511
-        'CURLINFO_PRIMARY_PORT' => array(
1512
-            '5.4.6' => false,
1513
-            '5.4.7' => true,
1514
-        ),
1515
-        'CURLINFO_LOCAL_IP' => array(
1516
-            '5.4.6' => false,
1517
-            '5.4.7' => true,
1518
-        ),
1519
-        'CURLINFO_LOCAL_PORT' => array(
1520
-            '5.4.6' => false,
1521
-            '5.4.7' => true,
1522
-        ),
1523
-
1524
-        // OpenSSL:
1525
-        'OPENSSL_ALGO_RMD160' => array(
1526
-            '5.4.7' => false,
1527
-            '5.4.8' => true,
1528
-        ),
1529
-        'OPENSSL_ALGO_SHA224' => array(
1530
-            '5.4.7' => false,
1531
-            '5.4.8' => true,
1532
-        ),
1533
-        'OPENSSL_ALGO_SHA256' => array(
1534
-            '5.4.7' => false,
1535
-            '5.4.8' => true,
1536
-        ),
1537
-        'OPENSSL_ALGO_SHA384' => array(
1538
-            '5.4.7' => false,
1539
-            '5.4.8' => true,
1540
-        ),
1541
-        'OPENSSL_ALGO_SHA512' => array(
1542
-            '5.4.7' => false,
1543
-            '5.4.8' => true,
1544
-        ),
1545
-
1546
-        // Filter:
1547
-        'FILTER_VALIDATE_MAC' => array(
1548
-            '5.4' => false,
1549
-            '5.5' => true,
1550
-        ),
1551
-        // GD
1552
-        'IMG_AFFINE_TRANSLATE' => array(
1553
-            '5.4' => false,
1554
-            '5.5' => true,
1555
-        ),
1556
-        'IMG_AFFINE_SCALE' => array(
1557
-            '5.4' => false,
1558
-            '5.5' => true,
1559
-        ),
1560
-        'IMG_AFFINE_ROTATE' => array(
1561
-            '5.4' => false,
1562
-            '5.5' => true,
1563
-        ),
1564
-        'IMG_AFFINE_SHEAR_HORIZONTAL' => array(
1565
-            '5.4' => false,
1566
-            '5.5' => true,
1567
-        ),
1568
-        'IMG_AFFINE_SHEAR_VERTICAL' => array(
1569
-            '5.4' => false,
1570
-            '5.5' => true,
1571
-        ),
1572
-        'IMG_CROP_DEFAULT' => array(
1573
-            '5.4' => false,
1574
-            '5.5' => true,
1575
-        ),
1576
-        'IMG_CROP_TRANSPARENT' => array(
1577
-            '5.4' => false,
1578
-            '5.5' => true,
1579
-        ),
1580
-        'IMG_CROP_BLACK' => array(
1581
-            '5.4' => false,
1582
-            '5.5' => true,
1583
-        ),
1584
-        'IMG_CROP_WHITE' => array(
1585
-            '5.4' => false,
1586
-            '5.5' => true,
1587
-        ),
1588
-        'IMG_CROP_SIDES' => array(
1589
-            '5.4' => false,
1590
-            '5.5' => true,
1591
-        ),
1592
-        'IMG_FLIP_BOTH' => array(
1593
-            '5.4' => false,
1594
-            '5.5' => true,
1595
-        ),
1596
-        'IMG_FLIP_HORIZONTAL' => array(
1597
-            '5.4' => false,
1598
-            '5.5' => true,
1599
-        ),
1600
-        'IMG_FLIP_VERTICAL' => array(
1601
-            '5.4' => false,
1602
-            '5.5' => true,
1603
-        ),
1604
-        'IMG_BELL' => array(
1605
-            '5.4' => false,
1606
-            '5.5' => true,
1607
-        ),
1608
-        'IMG_BESSEL' => array(
1609
-            '5.4' => false,
1610
-            '5.5' => true,
1611
-        ),
1612
-        'IMG_BILINEAR_FIXED' => array(
1613
-            '5.4' => false,
1614
-            '5.5' => true,
1615
-        ),
1616
-        'IMG_BICUBIC' => array(
1617
-            '5.4' => false,
1618
-            '5.5' => true,
1619
-        ),
1620
-        'IMG_BICUBIC_FIXED' => array(
1621
-            '5.4' => false,
1622
-            '5.5' => true,
1623
-        ),
1624
-        'IMG_BLACKMAN' => array(
1625
-            '5.4' => false,
1626
-            '5.5' => true,
1627
-        ),
1628
-        'IMG_BOX' => array(
1629
-            '5.4' => false,
1630
-            '5.5' => true,
1631
-        ),
1632
-        'IMG_BSPLINE' => array(
1633
-            '5.4' => false,
1634
-            '5.5' => true,
1635
-        ),
1636
-        'IMG_CATMULLROM' => array(
1637
-            '5.4' => false,
1638
-            '5.5' => true,
1639
-        ),
1640
-        'IMG_GAUSSIAN' => array(
1641
-            '5.4' => false,
1642
-            '5.5' => true,
1643
-        ),
1644
-        'IMG_GENERALIZED_CUBIC' => array(
1645
-            '5.4' => false,
1646
-            '5.5' => true,
1647
-        ),
1648
-        'IMG_HERMITE' => array(
1649
-            '5.4' => false,
1650
-            '5.5' => true,
1651
-        ),
1652
-        'IMG_HAMMING' => array(
1653
-            '5.4' => false,
1654
-            '5.5' => true,
1655
-        ),
1656
-        'IMG_HANNING' => array(
1657
-            '5.4' => false,
1658
-            '5.5' => true,
1659
-        ),
1660
-        'IMG_MITCHELL' => array(
1661
-            '5.4' => false,
1662
-            '5.5' => true,
1663
-        ),
1664
-        'IMG_POWER' => array(
1665
-            '5.4' => false,
1666
-            '5.5' => true,
1667
-        ),
1668
-        'IMG_QUADRATIC' => array(
1669
-            '5.4' => false,
1670
-            '5.5' => true,
1671
-        ),
1672
-        'IMG_SINC' => array(
1673
-            '5.4' => false,
1674
-            '5.5' => true,
1675
-        ),
1676
-        'IMG_NEAREST_NEIGHBOUR' => array(
1677
-            '5.4' => false,
1678
-            '5.5' => true,
1679
-        ),
1680
-        'IMG_WEIGHTED4' => array(
1681
-            '5.4' => false,
1682
-            '5.5' => true,
1683
-        ),
1684
-        'IMG_TRIANGLE' => array(
1685
-            '5.4' => false,
1686
-            '5.5' => true,
1687
-        ),
1688
-        // JSON:
1689
-        'JSON_ERROR_RECURSION' => array(
1690
-            '5.4' => false,
1691
-            '5.5' => true,
1692
-        ),
1693
-        'JSON_ERROR_INF_OR_NAN' => array(
1694
-            '5.4' => false,
1695
-            '5.5' => true,
1696
-        ),
1697
-        'JSON_ERROR_UNSUPPORTED_TYPE' => array(
1698
-            '5.4' => false,
1699
-            '5.5' => true,
1700
-        ),
1701
-        'JSON_PARTIAL_OUTPUT_ON_ERROR' => array(
1702
-            '5.4' => false,
1703
-            '5.5' => true,
1704
-        ),
1705
-        // MySQLi
1706
-        'MYSQLI_SERVER_PUBLIC_KEY' => array(
1707
-            '5.4' => false,
1708
-            '5.5' => true,
1709
-        ),
1710
-        // Curl:
1711
-        'CURLOPT_SHARE' => array(
1712
-            '5.4' => false,
1713
-            '5.5' => true,
1714
-        ),
1715
-        'CURLOPT_SSL_OPTIONS' => array(
1716
-            '5.4' => false,
1717
-            '5.5' => true,
1718
-        ),
1719
-        'CURLSSLOPT_ALLOW_BEAST' => array(
1720
-            '5.4' => false,
1721
-            '5.5' => true,
1722
-        ),
1723
-        'CURLOPT_USERNAME' => array(
1724
-            '5.4' => false,
1725
-            '5.5' => true,
1726
-        ),
1727
-        'CURLINFO_RESPONSE_CODE' => array(
1728
-            '5.4' => false,
1729
-            '5.5' => true,
1730
-        ),
1731
-        'CURLINFO_HTTP_CONNECTCODE' => array(
1732
-            '5.4' => false,
1733
-            '5.5' => true,
1734
-        ),
1735
-        'CURLINFO_HTTPAUTH_AVAIL' => array(
1736
-            '5.4' => false,
1737
-            '5.5' => true,
1738
-        ),
1739
-        'CURLINFO_PROXYAUTH_AVAIL' => array(
1740
-            '5.4' => false,
1741
-            '5.5' => true,
1742
-        ),
1743
-        'CURLINFO_OS_ERRNO' => array(
1744
-            '5.4' => false,
1745
-            '5.5' => true,
1746
-        ),
1747
-        'CURLINFO_NUM_CONNECTS' => array(
1748
-            '5.4' => false,
1749
-            '5.5' => true,
1750
-        ),
1751
-        'CURLINFO_SSL_ENGINES' => array(
1752
-            '5.4' => false,
1753
-            '5.5' => true,
1754
-        ),
1755
-        'CURLINFO_COOKIELIST' => array(
1756
-            '5.4' => false,
1757
-            '5.5' => true,
1758
-        ),
1759
-        'CURLINFO_FTP_ENTRY_PATH' => array(
1760
-            '5.4' => false,
1761
-            '5.5' => true,
1762
-        ),
1763
-        'CURLINFO_APPCONNECT_TIME' => array(
1764
-            '5.4' => false,
1765
-            '5.5' => true,
1766
-        ),
1767
-        'CURLINFO_CONDITION_UNMET' => array(
1768
-            '5.4' => false,
1769
-            '5.5' => true,
1770
-        ),
1771
-        'CURLINFO_RTSP_CLIENT_CSEQ' => array(
1772
-            '5.4' => false,
1773
-            '5.5' => true,
1774
-        ),
1775
-        'CURLINFO_RTSP_CSEQ_RECV' => array(
1776
-            '5.4' => false,
1777
-            '5.5' => true,
1778
-        ),
1779
-        'CURLINFO_RTSP_SERVER_CSEQ' => array(
1780
-            '5.4' => false,
1781
-            '5.5' => true,
1782
-        ),
1783
-        'CURLINFO_RTSP_SESSION_ID' => array(
1784
-            '5.4' => false,
1785
-            '5.5' => true,
1786
-        ),
1787
-        'CURLMOPT_PIPELINING' => array(
1788
-            '5.4' => false,
1789
-            '5.5' => true,
1790
-        ),
1791
-        'CURLMOPT_MAXCONNECTS' => array(
1792
-            '5.4' => false,
1793
-            '5.5' => true,
1794
-        ),
1795
-        'CURLPAUSE_ALL' => array(
1796
-            '5.4' => false,
1797
-            '5.5' => true,
1798
-        ),
1799
-        'CURLPAUSE_CONT' => array(
1800
-            '5.4' => false,
1801
-            '5.5' => true,
1802
-        ),
1803
-        'CURLPAUSE_RECV' => array(
1804
-            '5.4' => false,
1805
-            '5.5' => true,
1806
-        ),
1807
-        'CURLPAUSE_RECV_CONT' => array(
1808
-            '5.4' => false,
1809
-            '5.5' => true,
1810
-        ),
1811
-        'CURLPAUSE_SEND' => array(
1812
-            '5.4' => false,
1813
-            '5.5' => true,
1814
-        ),
1815
-        'CURLPAUSE_SEND_CONT' => array(
1816
-            '5.4' => false,
1817
-            '5.5' => true,
1818
-        ),
1819
-        // Soap:
1820
-        'SOAP_SSL_METHOD_TLS' => array(
1821
-            '5.4' => false,
1822
-            '5.5' => true,
1823
-        ),
1824
-        'SOAP_SSL_METHOD_SSLv2' => array(
1825
-            '5.4' => false,
1826
-            '5.5' => true,
1827
-        ),
1828
-        'SOAP_SSL_METHOD_SSLv3' => array(
1829
-            '5.4' => false,
1830
-            '5.5' => true,
1831
-        ),
1832
-        'SOAP_SSL_METHOD_SSLv23' => array(
1833
-            '5.4' => false,
1834
-            '5.5' => true,
1835
-        ),
1836
-        // Tokenizer:
1837
-        'T_FINALLY' => array(
1838
-            '5.4' => false,
1839
-            '5.5' => true,
1840
-        ),
1841
-        'T_YIELD' => array(
1842
-            '5.4' => false,
1843
-            '5.5' => true,
1844
-        ),
1845
-        // Core/Password Hashing:
1846
-        'PASSWORD_BCRYPT' => array(
1847
-            '5.4' => false,
1848
-            '5.5' => true,
1849
-        ),
1850
-        'PASSWORD_DEFAULT' => array(
1851
-            '5.4' => false,
1852
-            '5.5' => true,
1853
-        ),
1854
-        'PASSWORD_BCRYPT_DEFAULT_COST' => array(
1855
-            '5.4' => false,
1856
-            '5.5' => true,
1857
-        ),
1858
-
1859
-
1860
-        // Libxml:
1861
-        'LIBXML_SCHEMA_CREATE' => array(
1862
-            '5.5.1' => false,
1863
-            '5.5.2' => true,
1864
-        ),
1865
-
1866
-        // Curl:
1867
-        'CURL_SSLVERSION_TLSv1_0' => array(
1868
-            '5.5.18' => false,
1869
-            '5.5.19' => true,
1870
-        ),
1871
-        'CURL_SSLVERSION_TLSv1_1' => array(
1872
-            '5.5.18' => false,
1873
-            '5.5.19' => true,
1874
-        ),
1875
-        'CURL_SSLVERSION_TLSv1_2' => array(
1876
-            '5.5.18' => false,
1877
-            '5.5.19' => true,
1878
-        ),
1879
-
1880
-        'CURLPROXY_SOCKS4A' => array(
1881
-            '5.5.22' => false,
1882
-            '5.5.23' => true,
1883
-        ),
1884
-        'CURLPROXY_SOCKS5_HOSTNAME' => array(
1885
-            '5.5.22' => false,
1886
-            '5.5.23' => true,
1887
-        ),
1888
-
1889
-        'CURL_VERSION_HTTP2' => array(
1890
-            '5.5.23' => false,
1891
-            '5.5.24' => true,
1892
-        ),
1893
-
1894
-        'ARRAY_FILTER_USE_KEY' => array(
1895
-            '5.5' => false,
1896
-            '5.6' => true,
1897
-        ),
1898
-        'ARRAY_FILTER_USE_BOTH' => array(
1899
-            '5.5' => false,
1900
-            '5.6' => true,
1901
-        ),
1902
-        // LDAP:
1903
-        'LDAP_ESCAPE_DN' => array(
1904
-            '5.5' => false,
1905
-            '5.6' => true,
1906
-        ),
1907
-        'LDAP_ESCAPE_FILTER' => array(
1908
-            '5.5' => false,
1909
-            '5.6' => true,
1910
-        ),
1911
-        // OpenSSL:
1912
-        'OPENSSL_DEFAULT_STREAM_CIPHERS' => array(
1913
-            '5.5' => false,
1914
-            '5.6' => true,
1915
-        ),
1916
-        'STREAM_CRYPTO_METHOD_ANY_CLIENT' => array(
1917
-            '5.5' => false,
1918
-            '5.6' => true,
1919
-        ),
1920
-        'STREAM_CRYPTO_METHOD_ANY_SERVER' => array(
1921
-            '5.5' => false,
1922
-            '5.6' => true,
1923
-        ),
1924
-        'STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT' => array(
1925
-            '5.5' => false,
1926
-            '5.6' => true,
1927
-        ),
1928
-        'STREAM_CRYPTO_METHOD_TLSv1_0_SERVER' => array(
1929
-            '5.5' => false,
1930
-            '5.6' => true,
1931
-        ),
1932
-        'STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT' => array(
1933
-            '5.5' => false,
1934
-            '5.6' => true,
1935
-        ),
1936
-        'STREAM_CRYPTO_METHOD_TLSv1_1_SERVER' => array(
1937
-            '5.5' => false,
1938
-            '5.6' => true,
1939
-        ),
1940
-        'STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT' => array(
1941
-            '5.5' => false,
1942
-            '5.6' => true,
1943
-        ),
1944
-        'STREAM_CRYPTO_METHOD_TLSv1_2_SERVER' => array(
1945
-            '5.5' => false,
1946
-            '5.6' => true,
1947
-        ),
1948
-        // PostgreSQL:
1949
-        'PGSQL_CONNECT_ASYNC' => array(
1950
-            '5.5' => false,
1951
-            '5.6' => true,
1952
-        ),
1953
-        'PGSQL_CONNECTION_AUTH_OK' => array(
1954
-            '5.5' => false,
1955
-            '5.6' => true,
1956
-        ),
1957
-        'PGSQL_CONNECTION_AWAITING_RESPONSE' => array(
1958
-            '5.5' => false,
1959
-            '5.6' => true,
1960
-        ),
1961
-        'PGSQL_CONNECTION_MADE' => array(
1962
-            '5.5' => false,
1963
-            '5.6' => true,
1964
-        ),
1965
-        'PGSQL_CONNECTION_SETENV' => array(
1966
-            '5.5' => false,
1967
-            '5.6' => true,
1968
-        ),
1969
-        'PGSQL_CONNECTION_SSL_STARTUP' => array(
1970
-            '5.5' => false,
1971
-            '5.6' => true,
1972
-        ),
1973
-        'PGSQL_CONNECTION_STARTED' => array(
1974
-            '5.5' => false,
1975
-            '5.6' => true,
1976
-        ),
1977
-        'PGSQL_DML_ESCAPE' => array(
1978
-            '5.5' => false,
1979
-            '5.6' => true,
1980
-        ),
1981
-        'PGSQL_POLLING_ACTIVE' => array(
1982
-            '5.5' => false,
1983
-            '5.6' => true,
1984
-        ),
1985
-        'PGSQL_POLLING_FAILED' => array(
1986
-            '5.5' => false,
1987
-            '5.6' => true,
1988
-        ),
1989
-        'PGSQL_POLLING_OK' => array(
1990
-            '5.5' => false,
1991
-            '5.6' => true,
1992
-        ),
1993
-        'PGSQL_POLLING_READING' => array(
1994
-            '5.5' => false,
1995
-            '5.6' => true,
1996
-        ),
1997
-        'PGSQL_POLLING_WRITING' => array(
1998
-            '5.5' => false,
1999
-            '5.6' => true,
2000
-        ),
2001
-        // Tokenizer:
2002
-        'T_ELLIPSIS' => array(
2003
-            '5.5' => false,
2004
-            '5.6' => true,
2005
-        ),
2006
-        'T_POW' => array(
2007
-            '5.5' => false,
2008
-            '5.6' => true,
2009
-        ),
2010
-        'T_POW_EQUAL' => array(
2011
-            '5.5' => false,
2012
-            '5.6' => true,
2013
-        ),
2014
-
2015
-        'INI_SCANNER_TYPED' => array(
2016
-            '5.6.0' => false,
2017
-            '5.6.1' => true,
2018
-        ),
2019
-
2020
-        'JSON_PRESERVE_ZERO_FRACTION' => array(
2021
-            '5.6.5' => false,
2022
-            '5.6.6' => true,
2023
-        ),
2024
-
2025
-        'MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT' => array(
2026
-            '5.6.15' => false,
2027
-            '5.6.16' => true,
2028
-        ),
2029
-
2030
-        // GD:
2031
-        // Also introduced in 7.0.10.
2032
-        'IMG_WEBP' => array(
2033
-            '5.6.24' => false,
2034
-            '5.6.25' => true,
2035
-        ),
2036
-
2037
-
2038
-        'TOKEN_PARSE' => array(
2039
-            '5.6' => false,
2040
-            '7.0' => true,
2041
-        ),
2042
-        'FILTER_VALIDATE_DOMAIN' => array(
2043
-            '5.6' => false,
2044
-            '7.0' => true,
2045
-        ),
2046
-        'PHP_INT_MIN' => array(
2047
-            '5.6' => false,
2048
-            '7.0' => true,
2049
-        ),
2050
-        // Curl:
2051
-        'CURLPIPE_NOTHING' => array(
2052
-            '5.6' => false,
2053
-            '7.0' => true,
2054
-        ),
2055
-        'CURLPIPE_HTTP1' => array(
2056
-            '5.6' => false,
2057
-            '7.0' => true,
2058
-        ),
2059
-        'CURLPIPE_MULTIPLEX' => array(
2060
-            '5.6' => false,
2061
-            '7.0' => true,
2062
-        ),
2063
-        // JSON:
2064
-        'JSON_ERROR_INVALID_PROPERTY_NAME' => array(
2065
-            '5.6' => false,
2066
-            '7.0' => true,
2067
-        ),
2068
-        'JSON_ERROR_UTF16' => array(
2069
-            '5.6' => false,
2070
-            '7.0' => true,
2071
-        ),
2072
-        // LibXML:
2073
-        'LIBXML_BIGLINES' => array(
2074
-            '5.6' => false,
2075
-            '7.0' => true,
2076
-        ),
2077
-        // PCRE:
2078
-        'PREG_JIT_STACKLIMIT_ERROR' => array(
2079
-            '5.6' => false,
2080
-            '7.0' => true,
2081
-        ),
2082
-        // POSIX:
2083
-        'POSIX_RLIMIT_AS' => array(
2084
-            '5.6' => false,
2085
-            '7.0' => true,
2086
-        ),
2087
-        'POSIX_RLIMIT_CORE' => array(
2088
-            '5.6' => false,
2089
-            '7.0' => true,
2090
-        ),
2091
-        'POSIX_RLIMIT_CPU' => array(
2092
-            '5.6' => false,
2093
-            '7.0' => true,
2094
-        ),
2095
-        'POSIX_RLIMIT_DATA' => array(
2096
-            '5.6' => false,
2097
-            '7.0' => true,
2098
-        ),
2099
-        'POSIX_RLIMIT_FSIZE' => array(
2100
-            '5.6' => false,
2101
-            '7.0' => true,
2102
-        ),
2103
-        'POSIX_RLIMIT_LOCKS' => array(
2104
-            '5.6' => false,
2105
-            '7.0' => true,
2106
-        ),
2107
-        'POSIX_RLIMIT_MEMLOCK' => array(
2108
-            '5.6' => false,
2109
-            '7.0' => true,
2110
-        ),
2111
-        'POSIX_RLIMIT_MSGQUEUE' => array(
2112
-            '5.6' => false,
2113
-            '7.0' => true,
2114
-        ),
2115
-        'POSIX_RLIMIT_NICE' => array(
2116
-            '5.6' => false,
2117
-            '7.0' => true,
2118
-        ),
2119
-        'POSIX_RLIMIT_NOFILE' => array(
2120
-            '5.6' => false,
2121
-            '7.0' => true,
2122
-        ),
2123
-        'POSIX_RLIMIT_NPROC' => array(
2124
-            '5.6' => false,
2125
-            '7.0' => true,
2126
-        ),
2127
-        'POSIX_RLIMIT_RSS' => array(
2128
-            '5.6' => false,
2129
-            '7.0' => true,
2130
-        ),
2131
-        'POSIX_RLIMIT_RTPRIO' => array(
2132
-            '5.6' => false,
2133
-            '7.0' => true,
2134
-        ),
2135
-        'POSIX_RLIMIT_RTTIME' => array(
2136
-            '5.6' => false,
2137
-            '7.0' => true,
2138
-        ),
2139
-        'POSIX_RLIMIT_SIGPENDING' => array(
2140
-            '5.6' => false,
2141
-            '7.0' => true,
2142
-        ),
2143
-        'POSIX_RLIMIT_STACK' => array(
2144
-            '5.6' => false,
2145
-            '7.0' => true,
2146
-        ),
2147
-        'POSIX_RLIMIT_INFINITY' => array(
2148
-            '5.6' => false,
2149
-            '7.0' => true,
2150
-        ),
2151
-        // Tokenizer:
2152
-        'T_COALESCE' => array(
2153
-            '5.6' => false,
2154
-            '7.0' => true,
2155
-        ),
2156
-        'T_SPACESHIP' => array(
2157
-            '5.6' => false,
2158
-            '7.0' => true,
2159
-        ),
2160
-        'T_YIELD_FROM' => array(
2161
-            '5.6' => false,
2162
-            '7.0' => true,
2163
-        ),
2164
-
2165
-        // Zlib:
2166
-        // The first three are in the PHP 5.4 changelog, but the Extension constant page says 7.0.
2167
-        'ZLIB_ENCODING_RAW' => array(
2168
-            '5.6' => false,
2169
-            '7.0' => true,
2170
-        ),
2171
-        'ZLIB_ENCODING_DEFLATE' => array(
2172
-            '5.6' => false,
2173
-            '7.0' => true,
2174
-        ),
2175
-        'ZLIB_ENCODING_GZIP' => array(
2176
-            '5.6' => false,
2177
-            '7.0' => true,
2178
-        ),
2179
-        'ZLIB_FILTERED' => array(
2180
-            '5.6' => false,
2181
-            '7.0' => true,
2182
-        ),
2183
-        'ZLIB_HUFFMAN_ONLY' => array(
2184
-            '5.6' => false,
2185
-            '7.0' => true,
2186
-        ),
2187
-        'ZLIB_FIXED' => array(
2188
-            '5.6' => false,
2189
-            '7.0' => true,
2190
-        ),
2191
-        'ZLIB_RLE' => array(
2192
-            '5.6' => false,
2193
-            '7.0' => true,
2194
-        ),
2195
-        'ZLIB_DEFAULT_STRATEGY' => array(
2196
-            '5.6' => false,
2197
-            '7.0' => true,
2198
-        ),
2199
-        'ZLIB_BLOCK' => array(
2200
-            '5.6' => false,
2201
-            '7.0' => true,
2202
-        ),
2203
-        'ZLIB_FINISH' => array(
2204
-            '5.6' => false,
2205
-            '7.0' => true,
2206
-        ),
2207
-        'ZLIB_FULL_FLUSH' => array(
2208
-            '5.6' => false,
2209
-            '7.0' => true,
2210
-        ),
2211
-        'ZLIB_NO_FLUSH' => array(
2212
-            '5.6' => false,
2213
-            '7.0' => true,
2214
-        ),
2215
-        'ZLIB_PARTIAL_FLUSH' => array(
2216
-            '5.6' => false,
2217
-            '7.0' => true,
2218
-        ),
2219
-        'ZLIB_SYNC_FLUSH' => array(
2220
-            '5.6' => false,
2221
-            '7.0' => true,
2222
-        ),
2223
-
2224
-        'CURL_HTTP_VERSION_2' => array(
2225
-            '7.0.6' => false,
2226
-            '7.0.7' => true,
2227
-        ),
2228
-        'CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE' => array(
2229
-            '7.0.6' => false,
2230
-            '7.0.7' => true,
2231
-        ),
2232
-        'CURL_HTTP_VERSION_2TLS' => array(
2233
-            '7.0.6' => false,
2234
-            '7.0.7' => true,
2235
-        ),
2236
-        'CURL_REDIR_POST_301' => array(
2237
-            '7.0.6' => false,
2238
-            '7.0.7' => true,
2239
-        ),
2240
-        'CURL_REDIR_POST_302' => array(
2241
-            '7.0.6' => false,
2242
-            '7.0.7' => true,
2243
-        ),
2244
-        'CURL_REDIR_POST_303' => array(
2245
-            '7.0.6' => false,
2246
-            '7.0.7' => true,
2247
-        ),
2248
-        'CURL_REDIR_POST_ALL' => array(
2249
-            '7.0.6' => false,
2250
-            '7.0.7' => true,
2251
-        ),
2252
-        'CURL_VERSION_KERBEROS5' => array(
2253
-            '7.0.6' => false,
2254
-            '7.0.7' => true,
2255
-        ),
2256
-        'CURL_VERSION_PSL' => array(
2257
-            '7.0.6' => false,
2258
-            '7.0.7' => true,
2259
-        ),
2260
-        'CURL_VERSION_UNIX_SOCKETS' => array(
2261
-            '7.0.6' => false,
2262
-            '7.0.7' => true,
2263
-        ),
2264
-        'CURLAUTH_NEGOTIATE' => array(
2265
-            '7.0.6' => false,
2266
-            '7.0.7' => true,
2267
-        ),
2268
-        'CURLAUTH_NTLM_WB' => array(
2269
-            '7.0.6' => false,
2270
-            '7.0.7' => true,
2271
-        ),
2272
-        'CURLFTP_CREATE_DIR' => array(
2273
-            '7.0.6' => false,
2274
-            '7.0.7' => true,
2275
-        ),
2276
-        'CURLFTP_CREATE_DIR_NONE' => array(
2277
-            '7.0.6' => false,
2278
-            '7.0.7' => true,
2279
-        ),
2280
-        'CURLFTP_CREATE_DIR_RETRY' => array(
2281
-            '7.0.6' => false,
2282
-            '7.0.7' => true,
2283
-        ),
2284
-        'CURLHEADER_SEPARATE' => array(
2285
-            '7.0.6' => false,
2286
-            '7.0.7' => true,
2287
-        ),
2288
-        'CURLHEADER_UNIFIED' => array(
2289
-            '7.0.6' => false,
2290
-            '7.0.7' => true,
2291
-        ),
2292
-        'CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE' => array(
2293
-            '7.0.6' => false,
2294
-            '7.0.7' => true,
2295
-        ),
2296
-        'CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE' => array(
2297
-            '7.0.6' => false,
2298
-            '7.0.7' => true,
2299
-        ),
2300
-        'CURLMOPT_MAX_HOST_CONNECTIONS' => array(
2301
-            '7.0.6' => false,
2302
-            '7.0.7' => true,
2303
-        ),
2304
-        'CURLMOPT_MAX_PIPELINE_LENGTH' => array(
2305
-            '7.0.6' => false,
2306
-            '7.0.7' => true,
2307
-        ),
2308
-        'CURLMOPT_MAX_TOTAL_CONNECTIONS' => array(
2309
-            '7.0.6' => false,
2310
-            '7.0.7' => true,
2311
-        ),
2312
-        'CURLOPT_CONNECT_TO' => array(
2313
-            '7.0.6' => false,
2314
-            '7.0.7' => true,
2315
-        ),
2316
-        'CURLOPT_DEFAULT_PROTOCOL' => array(
2317
-            '7.0.6' => false,
2318
-            '7.0.7' => true,
2319
-        ),
2320
-        'CURLOPT_DNS_INTERFACE' => array(
2321
-            '7.0.6' => false,
2322
-            '7.0.7' => true,
2323
-        ),
2324
-        'CURLOPT_DNS_LOCAL_IP4' => array(
2325
-            '7.0.6' => false,
2326
-            '7.0.7' => true,
2327
-        ),
2328
-        'CURLOPT_DNS_LOCAL_IP6' => array(
2329
-            '7.0.6' => false,
2330
-            '7.0.7' => true,
2331
-        ),
2332
-        'CURLOPT_EXPECT_100_TIMEOUT_MS' => array(
2333
-            '7.0.6' => false,
2334
-            '7.0.7' => true,
2335
-        ),
2336
-        'CURLOPT_HEADEROPT' => array(
2337
-            '7.0.6' => false,
2338
-            '7.0.7' => true,
2339
-        ),
2340
-        'CURLOPT_LOGIN_OPTIONS' => array(
2341
-            '7.0.6' => false,
2342
-            '7.0.7' => true,
2343
-        ),
2344
-        'CURLOPT_PATH_AS_IS' => array(
2345
-            '7.0.6' => false,
2346
-            '7.0.7' => true,
2347
-        ),
2348
-        'CURLOPT_PINNEDPUBLICKEY' => array(
2349
-            '7.0.6' => false,
2350
-            '7.0.7' => true,
2351
-        ),
2352
-        'CURLOPT_PIPEWAIT' => array(
2353
-            '7.0.6' => false,
2354
-            '7.0.7' => true,
2355
-        ),
2356
-        'CURLOPT_PROXY_SERVICE_NAME' => array(
2357
-            '7.0.6' => false,
2358
-            '7.0.7' => true,
2359
-        ),
2360
-        'CURLOPT_PROXYHEADER' => array(
2361
-            '7.0.6' => false,
2362
-            '7.0.7' => true,
2363
-        ),
2364
-        'CURLOPT_SASL_IR' => array(
2365
-            '7.0.6' => false,
2366
-            '7.0.7' => true,
2367
-        ),
2368
-        'CURLOPT_SERVICE_NAME' => array(
2369
-            '7.0.6' => false,
2370
-            '7.0.7' => true,
2371
-        ),
2372
-        'CURLOPT_SSL_ENABLE_ALPN' => array(
2373
-            '7.0.6' => false,
2374
-            '7.0.7' => true,
2375
-        ),
2376
-        'CURLOPT_SSL_ENABLE_NPN' => array(
2377
-            '7.0.6' => false,
2378
-            '7.0.7' => true,
2379
-        ),
2380
-        'CURLOPT_SSL_FALSESTART' => array(
2381
-            '7.0.6' => false,
2382
-            '7.0.7' => true,
2383
-        ),
2384
-        'CURLOPT_SSL_VERIFYSTATUS' => array(
2385
-            '7.0.6' => false,
2386
-            '7.0.7' => true,
2387
-        ),
2388
-        'CURLOPT_STREAM_WEIGHT' => array(
2389
-            '7.0.6' => false,
2390
-            '7.0.7' => true,
2391
-        ),
2392
-        'CURLOPT_TCP_FASTOPEN' => array(
2393
-            '7.0.6' => false,
2394
-            '7.0.7' => true,
2395
-        ),
2396
-        'CURLOPT_TFTP_NO_OPTIONS' => array(
2397
-            '7.0.6' => false,
2398
-            '7.0.7' => true,
2399
-        ),
2400
-        'CURLOPT_UNIX_SOCKET_PATH' => array(
2401
-            '7.0.6' => false,
2402
-            '7.0.7' => true,
2403
-        ),
2404
-        'CURLOPT_XOAUTH2_BEARER' => array(
2405
-            '7.0.6' => false,
2406
-            '7.0.7' => true,
2407
-        ),
2408
-        'CURLPROTO_SMB' => array(
2409
-            '7.0.6' => false,
2410
-            '7.0.7' => true,
2411
-        ),
2412
-        'CURLPROTO_SMBS' => array(
2413
-            '7.0.6' => false,
2414
-            '7.0.7' => true,
2415
-        ),
2416
-        'CURLPROXY_HTTP_1_0' => array(
2417
-            '7.0.6' => false,
2418
-            '7.0.7' => true,
2419
-        ),
2420
-        'CURLSSH_AUTH_AGENT' => array(
2421
-            '7.0.6' => false,
2422
-            '7.0.7' => true,
2423
-        ),
2424
-        'CURLSSLOPT_NO_REVOKE' => array(
2425
-            '7.0.6' => false,
2426
-            '7.0.7' => true,
2427
-        ),
2428
-
2429
-        'PHP_FD_SETSIZE' => array(
2430
-            '7.0' => false,
2431
-            '7.1' => true,
2432
-        ),
2433
-        // Curl:
2434
-        'CURLMOPT_PUSHFUNCTION' => array(
2435
-            '7.0' => false,
2436
-            '7.1' => true,
2437
-        ),
2438
-        'CURL_PUSH_OK' => array(
2439
-            '7.0' => false,
2440
-            '7.1' => true,
2441
-        ),
2442
-        'CURL_PUSH_DENY' => array(
2443
-            '7.0' => false,
2444
-            '7.1' => true,
2445
-        ),
2446
-        // Filter:
2447
-        'FILTER_FLAG_EMAIL_UNICODE' => array(
2448
-            '7.0' => false,
2449
-            '7.1' => true,
2450
-        ),
2451
-        // GD:
2452
-        'IMAGETYPE_WEBP' => array(
2453
-            '7.0' => false,
2454
-            '7.1' => true,
2455
-        ),
2456
-        // Json:
2457
-        'JSON_UNESCAPED_LINE_TERMINATORS' => array(
2458
-            '7.0' => false,
2459
-            '7.1' => true,
2460
-        ),
2461
-        // LDAP:
2462
-        'LDAP_OPT_X_SASL_NOCANON' => array(
2463
-            '7.0' => false,
2464
-            '7.1' => true,
2465
-        ),
2466
-        'LDAP_OPT_X_SASL_USERNAME' => array(
2467
-            '7.0' => false,
2468
-            '7.1' => true,
2469
-        ),
2470
-        'LDAP_OPT_X_TLS_CACERTDIR' => array(
2471
-            '7.0' => false,
2472
-            '7.1' => true,
2473
-        ),
2474
-        'LDAP_OPT_X_TLS_CACERTFILE' => array(
2475
-            '7.0' => false,
2476
-            '7.1' => true,
2477
-        ),
2478
-        'LDAP_OPT_X_TLS_CERTFILE' => array(
2479
-            '7.0' => false,
2480
-            '7.1' => true,
2481
-        ),
2482
-        'LDAP_OPT_X_TLS_CIPHER_SUITE' => array(
2483
-            '7.0' => false,
2484
-            '7.1' => true,
2485
-        ),
2486
-        'LDAP_OPT_X_TLS_KEYFILE' => array(
2487
-            '7.0' => false,
2488
-            '7.1' => true,
2489
-        ),
2490
-        'LDAP_OPT_X_TLS_RANDOM_FILE' => array(
2491
-            '7.0' => false,
2492
-            '7.1' => true,
2493
-        ),
2494
-        'LDAP_OPT_X_TLS_CRLCHECK' => array(
2495
-            '7.0' => false,
2496
-            '7.1' => true,
2497
-        ),
2498
-        'LDAP_OPT_X_TLS_CRL_NONE' => array(
2499
-            '7.0' => false,
2500
-            '7.1' => true,
2501
-        ),
2502
-        'LDAP_OPT_X_TLS_CRL_PEER' => array(
2503
-            '7.0' => false,
2504
-            '7.1' => true,
2505
-        ),
2506
-        'LDAP_OPT_X_TLS_CRL_ALL' => array(
2507
-            '7.0' => false,
2508
-            '7.1' => true,
2509
-        ),
2510
-        'LDAP_OPT_X_TLS_DHFILE' => array(
2511
-            '7.0' => false,
2512
-            '7.1' => true,
2513
-        ),
2514
-        'LDAP_OPT_X_TLS_CRLFILE' => array(
2515
-            '7.0' => false,
2516
-            '7.1' => true,
2517
-        ),
2518
-        'LDAP_OPT_X_TLS_PROTOCOL_MIN' => array(
2519
-            '7.0' => false,
2520
-            '7.1' => true,
2521
-        ),
2522
-        'LDAP_OPT_X_TLS_PROTOCOL_SSL2' => array(
2523
-            '7.0' => false,
2524
-            '7.1' => true,
2525
-        ),
2526
-        'LDAP_OPT_X_TLS_PROTOCOL_SSL3' => array(
2527
-            '7.0' => false,
2528
-            '7.1' => true,
2529
-        ),
2530
-        'LDAP_OPT_X_TLS_PROTOCOL_TLS1_0' => array(
2531
-            '7.0' => false,
2532
-            '7.1' => true,
2533
-        ),
2534
-        'LDAP_OPT_X_TLS_PROTOCOL_TLS1_1' => array(
2535
-            '7.0' => false,
2536
-            '7.1' => true,
2537
-        ),
2538
-        'LDAP_OPT_X_TLS_PROTOCOL_TLS1_2' => array(
2539
-            '7.0' => false,
2540
-            '7.1' => true,
2541
-        ),
2542
-        'LDAP_OPT_X_TLS_PACKAGE' => array(
2543
-            '7.0' => false,
2544
-            '7.1' => true,
2545
-        ),
2546
-        'LDAP_OPT_X_KEEPALIVE_IDLE' => array(
2547
-            '7.0' => false,
2548
-            '7.1' => true,
2549
-        ),
2550
-        'LDAP_OPT_X_KEEPALIVE_PROBES' => array(
2551
-            '7.0' => false,
2552
-            '7.1' => true,
2553
-        ),
2554
-        'LDAP_OPT_X_KEEPALIVE_INTERVAL' => array(
2555
-            '7.0' => false,
2556
-            '7.1' => true,
2557
-        ),
2558
-        // PostgreSQL:
2559
-        'PGSQL_NOTICE_LAST' => array(
2560
-            '7.0' => false,
2561
-            '7.1' => true,
2562
-        ),
2563
-        'PGSQL_NOTICE_ALL' => array(
2564
-            '7.0' => false,
2565
-            '7.1' => true,
2566
-        ),
2567
-        'PGSQL_NOTICE_CLEAR' => array(
2568
-            '7.0' => false,
2569
-            '7.1' => true,
2570
-        ),
2571
-        // SPL:
2572
-        'MT_RAND_PHP' => array(
2573
-            '7.0' => false,
2574
-            '7.1' => true,
2575
-        ),
2576
-
2577
-        // SQLite3:
2578
-        'SQLITE3_DETERMINISTIC' => array(
2579
-            '7.1.3' => false,
2580
-            '7.1.4' => true,
2581
-        ),
2582
-
2583
-        // Core:
2584
-        'PHP_OS_FAMILY' => array(
2585
-            '7.1' => false,
2586
-            '7.2' => true,
2587
-        ),
2588
-        'PHP_FLOAT_DIG' => array(
2589
-            '7.1' => false,
2590
-            '7.2' => true,
2591
-        ),
2592
-        'PHP_FLOAT_EPSILON' => array(
2593
-            '7.1' => false,
2594
-            '7.2' => true,
2595
-        ),
2596
-        'PHP_FLOAT_MIN' => array(
2597
-            '7.1' => false,
2598
-            '7.2' => true,
2599
-        ),
2600
-        'PHP_FLOAT_MAX' => array(
2601
-            '7.1' => false,
2602
-            '7.2' => true,
2603
-        ),
2604
-
2605
-        // Core/Password Hashing:
2606
-        'PASSWORD_ARGON2I' => array(
2607
-            '7.1' => false,
2608
-            '7.2' => true,
2609
-        ),
2610
-        'PASSWORD_ARGON2_DEFAULT_MEMORY_COST' => array(
2611
-            '7.1' => false,
2612
-            '7.2' => true,
2613
-        ),
2614
-        'PASSWORD_ARGON2_DEFAULT_TIME_COST' => array(
2615
-            '7.1' => false,
2616
-            '7.2' => true,
2617
-        ),
2618
-        'PASSWORD_ARGON2_DEFAULT_THREADS' => array(
2619
-            '7.1' => false,
2620
-            '7.2' => true,
2621
-        ),
2622
-
2623
-        // Fileinfo:
2624
-        'FILEINFO_EXTENSION' => array(
2625
-            '7.1' => false,
2626
-            '7.2' => true,
2627
-        ),
2628
-
2629
-        // GD:
2630
-        'IMG_EFFECT_MULTIPLY' => array(
2631
-            '7.1' => false,
2632
-            '7.2' => true,
2633
-        ),
2634
-        'IMG_BMP' => array(
2635
-            '7.1' => false,
2636
-            '7.2' => true,
2637
-        ),
2638
-
2639
-        // JSON:
2640
-        'JSON_INVALID_UTF8_IGNORE' => array(
2641
-            '7.1' => false,
2642
-            '7.2' => true,
2643
-        ),
2644
-        'JSON_INVALID_UTF8_SUBSTITUTE' => array(
2645
-            '7.1' => false,
2646
-            '7.2' => true,
2647
-        ),
2648
-
2649
-        // LDAP:
2650
-        'LDAP_EXOP_START_TLS' => array(
2651
-            '7.1' => false,
2652
-            '7.2' => true,
2653
-        ),
2654
-        'LDAP_EXOP_MODIFY_PASSWD' => array(
2655
-            '7.1' => false,
2656
-            '7.2' => true,
2657
-        ),
2658
-        'LDAP_EXOP_REFRESH' => array(
2659
-            '7.1' => false,
2660
-            '7.2' => true,
2661
-        ),
2662
-        'LDAP_EXOP_WHO_AM_I' => array(
2663
-            '7.1' => false,
2664
-            '7.2' => true,
2665
-        ),
2666
-        'LDAP_EXOP_TURN' => array(
2667
-            '7.1' => false,
2668
-            '7.2' => true,
2669
-        ),
2670
-
2671
-        // PCRE:
2672
-        'PREG_UNMATCHED_AS_NULL' => array(
2673
-            '7.1' => false,
2674
-            '7.2' => true,
2675
-        ),
2676
-
2677
-        // Sodium:
2678
-        'SODIUM_LIBRARY_VERSION' => array(
2679
-            '7.1' => false,
2680
-            '7.2' => true,
2681
-        ),
2682
-        'SODIUM_LIBRARY_MAJOR_VERSION' => array(
2683
-            '7.1' => false,
2684
-            '7.2' => true,
2685
-        ),
2686
-        'SODIUM_LIBRARY_MINOR_VERSION' => array(
2687
-            '7.1' => false,
2688
-            '7.2' => true,
2689
-        ),
2690
-        'SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES' => array(
2691
-            '7.1' => false,
2692
-            '7.2' => true,
2693
-        ),
2694
-        'SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES' => array(
2695
-            '7.1' => false,
2696
-            '7.2' => true,
2697
-        ),
2698
-        'SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES' => array(
2699
-            '7.1' => false,
2700
-            '7.2' => true,
2701
-        ),
2702
-        'SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES' => array(
2703
-            '7.1' => false,
2704
-            '7.2' => true,
2705
-        ),
2706
-        'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES' => array(
2707
-            '7.1' => false,
2708
-            '7.2' => true,
2709
-        ),
2710
-        'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES' => array(
2711
-            '7.1' => false,
2712
-            '7.2' => true,
2713
-        ),
2714
-        'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES' => array(
2715
-            '7.1' => false,
2716
-            '7.2' => true,
2717
-        ),
2718
-        'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES' => array(
2719
-            '7.1' => false,
2720
-            '7.2' => true,
2721
-        ),
2722
-        'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES' => array(
2723
-            '7.1' => false,
2724
-            '7.2' => true,
2725
-        ),
2726
-        'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES' => array(
2727
-            '7.1' => false,
2728
-            '7.2' => true,
2729
-        ),
2730
-        'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES' => array(
2731
-            '7.1' => false,
2732
-            '7.2' => true,
2733
-        ),
2734
-        'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES' => array(
2735
-            '7.1' => false,
2736
-            '7.2' => true,
2737
-        ),
2738
-        'SODIUM_CRYPTO_AUTH_BYTES' => array(
2739
-            '7.1' => false,
2740
-            '7.2' => true,
2741
-        ),
2742
-        'SODIUM_CRYPTO_AUTH_KEYBYTES' => array(
2743
-            '7.1' => false,
2744
-            '7.2' => true,
2745
-        ),
2746
-        'SODIUM_CRYPTO_BOX_SEALBYTES' => array(
2747
-            '7.1' => false,
2748
-            '7.2' => true,
2749
-        ),
2750
-        'SODIUM_CRYPTO_BOX_SECRETKEYBYTES' => array(
2751
-            '7.1' => false,
2752
-            '7.2' => true,
2753
-        ),
2754
-        'SODIUM_CRYPTO_BOX_PUBLICKEYBYTES' => array(
2755
-            '7.1' => false,
2756
-            '7.2' => true,
2757
-        ),
2758
-        'SODIUM_CRYPTO_BOX_KEYPAIRBYTES' => array(
2759
-            '7.1' => false,
2760
-            '7.2' => true,
2761
-        ),
2762
-        'SODIUM_CRYPTO_BOX_MACBYTES' => array(
2763
-            '7.1' => false,
2764
-            '7.2' => true,
2765
-        ),
2766
-        'SODIUM_CRYPTO_BOX_NONCEBYTES' => array(
2767
-            '7.1' => false,
2768
-            '7.2' => true,
2769
-        ),
2770
-        'SODIUM_CRYPTO_BOX_SEEDBYTES' => array(
2771
-            '7.1' => false,
2772
-            '7.2' => true,
2773
-        ),
2774
-        'SODIUM_CRYPTO_KDF_BYTES_MIN' => array(
2775
-            '7.1' => false,
2776
-            '7.2' => true,
2777
-        ),
2778
-        'SODIUM_CRYPTO_KDF_BYTES_MAX' => array(
2779
-            '7.1' => false,
2780
-            '7.2' => true,
2781
-        ),
2782
-        'SODIUM_CRYPTO_KDF_CONTEXTBYTES' => array(
2783
-            '7.1' => false,
2784
-            '7.2' => true,
2785
-        ),
2786
-        'SODIUM_CRYPTO_KDF_KEYBYTES' => array(
2787
-            '7.1' => false,
2788
-            '7.2' => true,
2789
-        ),
2790
-        'SODIUM_CRYPTO_KX_SEEDBYTES' => array(
2791
-            '7.1' => false,
2792
-            '7.2' => true,
2793
-        ),
2794
-        'SODIUM_CRYPTO_KX_SESSIONKEYBYTES' => array(
2795
-            '7.1' => false,
2796
-            '7.2' => true,
2797
-        ),
2798
-        'SODIUM_CRYPTO_KX_PUBLICKEYBYTES' => array(
2799
-            '7.1' => false,
2800
-            '7.2' => true,
2801
-        ),
2802
-        'SODIUM_CRYPTO_KX_SECRETKEYBYTES' => array(
2803
-            '7.1' => false,
2804
-            '7.2' => true,
2805
-        ),
2806
-        'SODIUM_CRYPTO_KX_KEYPAIRBYTES' => array(
2807
-            '7.1' => false,
2808
-            '7.2' => true,
2809
-        ),
2810
-        'SODIUM_CRYPTO_GENERICHASH_BYTES' => array(
2811
-            '7.1' => false,
2812
-            '7.2' => true,
2813
-        ),
2814
-        'SODIUM_CRYPTO_GENERICHASH_BYTES_MIN' => array(
2815
-            '7.1' => false,
2816
-            '7.2' => true,
2817
-        ),
2818
-        'SODIUM_CRYPTO_GENERICHASH_BYTES_MAX' => array(
2819
-            '7.1' => false,
2820
-            '7.2' => true,
2821
-        ),
2822
-        'SODIUM_CRYPTO_GENERICHASH_KEYBYTES' => array(
2823
-            '7.1' => false,
2824
-            '7.2' => true,
2825
-        ),
2826
-        'SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN' => array(
2827
-            '7.1' => false,
2828
-            '7.2' => true,
2829
-        ),
2830
-        'SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX' => array(
2831
-            '7.1' => false,
2832
-            '7.2' => true,
2833
-        ),
2834
-        'SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13' => array(
2835
-            '7.1' => false,
2836
-            '7.2' => true,
2837
-        ),
2838
-        'SODIUM_CRYPTO_PWHASH_ALG_DEFAULT' => array(
2839
-            '7.1' => false,
2840
-            '7.2' => true,
2841
-        ),
2842
-        'SODIUM_CRYPTO_PWHASH_SALTBYTES' => array(
2843
-            '7.1' => false,
2844
-            '7.2' => true,
2845
-        ),
2846
-        'SODIUM_CRYPTO_PWHASH_STRPREFIX' => array(
2847
-            '7.1' => false,
2848
-            '7.2' => true,
2849
-        ),
2850
-        'SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE' => array(
2851
-            '7.1' => false,
2852
-            '7.2' => true,
2853
-        ),
2854
-        'SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE' => array(
2855
-            '7.1' => false,
2856
-            '7.2' => true,
2857
-        ),
2858
-        'SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE' => array(
2859
-            '7.1' => false,
2860
-            '7.2' => true,
2861
-        ),
2862
-        'SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE' => array(
2863
-            '7.1' => false,
2864
-            '7.2' => true,
2865
-        ),
2866
-        'SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE' => array(
2867
-            '7.1' => false,
2868
-            '7.2' => true,
2869
-        ),
2870
-        'SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE' => array(
2871
-            '7.1' => false,
2872
-            '7.2' => true,
2873
-        ),
2874
-        'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES' => array(
2875
-            '7.1' => false,
2876
-            '7.2' => true,
2877
-        ),
2878
-        'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX' => array(
2879
-            '7.1' => false,
2880
-            '7.2' => true,
2881
-        ),
2882
-        'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE' => array(
2883
-            '7.1' => false,
2884
-            '7.2' => true,
2885
-        ),
2886
-        'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE' => array(
2887
-            '7.1' => false,
2888
-            '7.2' => true,
2889
-        ),
2890
-        'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE' => array(
2891
-            '7.1' => false,
2892
-            '7.2' => true,
2893
-        ),
2894
-        'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE' => array(
2895
-            '7.1' => false,
2896
-            '7.2' => true,
2897
-        ),
2898
-        'SODIUM_CRYPTO_SCALARMULT_BYTES' => array(
2899
-            '7.1' => false,
2900
-            '7.2' => true,
2901
-        ),
2902
-        'SODIUM_CRYPTO_SCALARMULT_SCALARBYTES' => array(
2903
-            '7.1' => false,
2904
-            '7.2' => true,
2905
-        ),
2906
-        'SODIUM_CRYPTO_SHORTHASH_BYTES' => array(
2907
-            '7.1' => false,
2908
-            '7.2' => true,
2909
-        ),
2910
-        'SODIUM_CRYPTO_SHORTHASH_KEYBYTES' => array(
2911
-            '7.1' => false,
2912
-            '7.2' => true,
2913
-        ),
2914
-        'SODIUM_CRYPTO_SECRETBOX_KEYBYTES' => array(
2915
-            '7.1' => false,
2916
-            '7.2' => true,
2917
-        ),
2918
-        'SODIUM_CRYPTO_SECRETBOX_MACBYTES' => array(
2919
-            '7.1' => false,
2920
-            '7.2' => true,
2921
-        ),
2922
-        'SODIUM_CRYPTO_SECRETBOX_NONCEBYTES' => array(
2923
-            '7.1' => false,
2924
-            '7.2' => true,
2925
-        ),
2926
-        'SODIUM_CRYPTO_SIGN_BYTES' => array(
2927
-            '7.1' => false,
2928
-            '7.2' => true,
2929
-        ),
2930
-        'SODIUM_CRYPTO_SIGN_SEEDBYTES' => array(
2931
-            '7.1' => false,
2932
-            '7.2' => true,
2933
-        ),
2934
-        'SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES' => array(
2935
-            '7.1' => false,
2936
-            '7.2' => true,
2937
-        ),
2938
-        'SODIUM_CRYPTO_SIGN_SECRETKEYBYTES' => array(
2939
-            '7.1' => false,
2940
-            '7.2' => true,
2941
-        ),
2942
-        'SODIUM_CRYPTO_SIGN_KEYPAIRBYTES' => array(
2943
-            '7.1' => false,
2944
-            '7.2' => true,
2945
-        ),
2946
-        'SODIUM_CRYPTO_STREAM_NONCEBYTES' => array(
2947
-            '7.1' => false,
2948
-            '7.2' => true,
2949
-        ),
2950
-        'SODIUM_CRYPTO_STREAM_KEYBYTES' => array(
2951
-            '7.1' => false,
2952
-            '7.2' => true,
2953
-        ),
2954
-
2955
-        'CURLAUTH_BEARER' => array(
2956
-            '7.2' => false,
2957
-            '7.3' => true,
2958
-        ),
2959
-        'CURLAUTH_GSSAPI' => array(
2960
-            '7.2' => false,
2961
-            '7.3' => true,
2962
-        ),
2963
-        'CURLE_WEIRD_SERVER_REPLY' => array(
2964
-            '7.2' => false,
2965
-            '7.3' => true,
2966
-        ),
2967
-        'CURLINFO_APPCONNECT_TIME_T' => array(
2968
-            '7.2' => false,
2969
-            '7.3' => true,
2970
-        ),
2971
-        'CURLINFO_CONNECT_TIME_T' => array(
2972
-            '7.2' => false,
2973
-            '7.3' => true,
2974
-        ),
2975
-        'CURLINFO_CONTENT_LENGTH_DOWNLOAD_T' => array(
2976
-            '7.2' => false,
2977
-            '7.3' => true,
2978
-        ),
2979
-        'CURLINFO_CONTENT_LENGTH_UPLOAD_T' => array(
2980
-            '7.2' => false,
2981
-            '7.3' => true,
2982
-        ),
2983
-        'CURLINFO_FILETIME_T' => array(
2984
-            '7.2' => false,
2985
-            '7.3' => true,
2986
-        ),
2987
-        'CURLINFO_HTTP_VERSION' => array(
2988
-            '7.2' => false,
2989
-            '7.3' => true,
2990
-        ),
2991
-        'CURLINFO_NAMELOOKUP_TIME_T' => array(
2992
-            '7.2' => false,
2993
-            '7.3' => true,
2994
-        ),
2995
-        'CURLINFO_PRETRANSFER_TIME_T' => array(
2996
-            '7.2' => false,
2997
-            '7.3' => true,
2998
-        ),
2999
-        'CURLINFO_PROTOCOL' => array(
3000
-            '7.2' => false,
3001
-            '7.3' => true,
3002
-        ),
3003
-        'CURLINFO_PROXY_SSL_VERIFYRESULT' => array(
3004
-            '7.2' => false,
3005
-            '7.3' => true,
3006
-        ),
3007
-        'CURLINFO_REDIRECT_TIME_T' => array(
3008
-            '7.2' => false,
3009
-            '7.3' => true,
3010
-        ),
3011
-        'CURLINFO_SCHEME' => array(
3012
-            '7.2' => false,
3013
-            '7.3' => true,
3014
-        ),
3015
-        'CURLINFO_SIZE_DOWNLOAD_T' => array(
3016
-            '7.2' => false,
3017
-            '7.3' => true,
3018
-        ),
3019
-        'CURLINFO_SIZE_UPLOAD_T' => array(
3020
-            '7.2' => false,
3021
-            '7.3' => true,
3022
-        ),
3023
-        'CURLINFO_SPEED_DOWNLOAD_T' => array(
3024
-            '7.2' => false,
3025
-            '7.3' => true,
3026
-        ),
3027
-        'CURLINFO_SPEED_UPLOAD_T' => array(
3028
-            '7.2' => false,
3029
-            '7.3' => true,
3030
-        ),
3031
-        'CURLINFO_STARTTRANSFER_TIME_T' => array(
3032
-            '7.2' => false,
3033
-            '7.3' => true,
3034
-        ),
3035
-        'CURLINFO_TOTAL_TIME_T' => array(
3036
-            '7.2' => false,
3037
-            '7.3' => true,
3038
-        ),
3039
-        'CURL_LOCK_DATA_CONNECT' => array(
3040
-            '7.2' => false,
3041
-            '7.3' => true,
3042
-        ),
3043
-        'CURL_LOCK_DATA_PSL' => array(
3044
-            '7.2' => false,
3045
-            '7.3' => true,
3046
-        ),
3047
-        'CURL_MAX_READ_SIZE' => array(
3048
-            '7.2' => false,
3049
-            '7.3' => true,
3050
-        ),
3051
-        'CURLOPT_ABSTRACT_UNIX_SOCKET' => array(
3052
-            '7.2' => false,
3053
-            '7.3' => true,
3054
-        ),
3055
-        'CURLOPT_DISALLOW_USERNAME_IN_URL' => array(
3056
-            '7.2' => false,
3057
-            '7.3' => true,
3058
-        ),
3059
-        'CURLOPT_DNS_SHUFFLE_ADDRESSES' => array(
3060
-            '7.2' => false,
3061
-            '7.3' => true,
3062
-        ),
3063
-        'CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS' => array(
3064
-            '7.2' => false,
3065
-            '7.3' => true,
3066
-        ),
3067
-        'CURLOPT_HAPROXYPROTOCOL' => array(
3068
-            '7.2' => false,
3069
-            '7.3' => true,
3070
-        ),
3071
-        'CURLOPT_KEEP_SENDING_ON_ERROR' => array(
3072
-            '7.2' => false,
3073
-            '7.3' => true,
3074
-        ),
3075
-        'CURLOPT_PRE_PROXY' => array(
3076
-            '7.2' => false,
3077
-            '7.3' => true,
3078
-        ),
3079
-        'CURLOPT_PROXY_CAINFO' => array(
3080
-            '7.2' => false,
3081
-            '7.3' => true,
3082
-        ),
3083
-        'CURLOPT_PROXY_CAPATH' => array(
3084
-            '7.2' => false,
3085
-            '7.3' => true,
3086
-        ),
3087
-        'CURLOPT_PROXY_CRLFILE' => array(
3088
-            '7.2' => false,
3089
-            '7.3' => true,
3090
-        ),
3091
-        'CURLOPT_PROXY_KEYPASSWD' => array(
3092
-            '7.2' => false,
3093
-            '7.3' => true,
3094
-        ),
3095
-        'CURLOPT_PROXY_PINNEDPUBLICKEY' => array(
3096
-            '7.2' => false,
3097
-            '7.3' => true,
3098
-        ),
3099
-        'CURLOPT_PROXY_SSLCERT' => array(
3100
-            '7.2' => false,
3101
-            '7.3' => true,
3102
-        ),
3103
-        'CURLOPT_PROXY_SSLCERTTYPE' => array(
3104
-            '7.2' => false,
3105
-            '7.3' => true,
3106
-        ),
3107
-        'CURLOPT_PROXY_SSL_CIPHER_LIST' => array(
3108
-            '7.2' => false,
3109
-            '7.3' => true,
3110
-        ),
3111
-        'CURLOPT_PROXY_SSLKEY' => array(
3112
-            '7.2' => false,
3113
-            '7.3' => true,
3114
-        ),
3115
-        'CURLOPT_PROXY_SSLKEYTYPE' => array(
3116
-            '7.2' => false,
3117
-            '7.3' => true,
3118
-        ),
3119
-        'CURLOPT_PROXY_SSL_OPTIONS' => array(
3120
-            '7.2' => false,
3121
-            '7.3' => true,
3122
-        ),
3123
-        'CURLOPT_PROXY_SSL_VERIFYHOST' => array(
3124
-            '7.2' => false,
3125
-            '7.3' => true,
3126
-        ),
3127
-        'CURLOPT_PROXY_SSL_VERIFYPEER' => array(
3128
-            '7.2' => false,
3129
-            '7.3' => true,
3130
-        ),
3131
-        'CURLOPT_PROXY_SSLVERSION' => array(
3132
-            '7.2' => false,
3133
-            '7.3' => true,
3134
-        ),
3135
-        'CURLOPT_PROXY_TLS13_CIPHERS' => array(
3136
-            '7.2' => false,
3137
-            '7.3' => true,
3138
-        ),
3139
-        'CURLOPT_PROXY_TLSAUTH_PASSWORD' => array(
3140
-            '7.2' => false,
3141
-            '7.3' => true,
3142
-        ),
3143
-        'CURLOPT_PROXY_TLSAUTH_TYPE' => array(
3144
-            '7.2' => false,
3145
-            '7.3' => true,
3146
-        ),
3147
-        'CURLOPT_PROXY_TLSAUTH_USERNAME' => array(
3148
-            '7.2' => false,
3149
-            '7.3' => true,
3150
-        ),
3151
-        'CURLOPT_REQUEST_TARGET' => array(
3152
-            '7.2' => false,
3153
-            '7.3' => true,
3154
-        ),
3155
-        'CURLOPT_SOCKS5_AUTH' => array(
3156
-            '7.2' => false,
3157
-            '7.3' => true,
3158
-        ),
3159
-        'CURLOPT_SSH_COMPRESSION' => array(
3160
-            '7.2' => false,
3161
-            '7.3' => true,
3162
-        ),
3163
-        'CURLOPT_SUPPRESS_CONNECT_HEADERS' => array(
3164
-            '7.2' => false,
3165
-            '7.3' => true,
3166
-        ),
3167
-        'CURLOPT_TIMEVALUE_LARGE' => array(
3168
-            '7.2' => false,
3169
-            '7.3' => true,
3170
-        ),
3171
-        'CURLOPT_TLS13_CIPHERS' => array(
3172
-            '7.2' => false,
3173
-            '7.3' => true,
3174
-        ),
3175
-        'CURLPROXY_HTTPS' => array(
3176
-            '7.2' => false,
3177
-            '7.3' => true,
3178
-        ),
3179
-        'CURLSSH_AUTH_GSSAPI' => array(
3180
-            '7.2' => false,
3181
-            '7.3' => true,
3182
-        ),
3183
-        'CURL_SSLVERSION_MAX_DEFAULT' => array(
3184
-            '7.2' => false,
3185
-            '7.3' => true,
3186
-        ),
3187
-        'CURL_SSLVERSION_MAX_NONE' => array(
3188
-            '7.2' => false,
3189
-            '7.3' => true,
3190
-        ),
3191
-        'CURL_SSLVERSION_MAX_TLSv1_0' => array(
3192
-            '7.2' => false,
3193
-            '7.3' => true,
3194
-        ),
3195
-        'CURL_SSLVERSION_MAX_TLSv1_1' => array(
3196
-            '7.2' => false,
3197
-            '7.3' => true,
3198
-        ),
3199
-        'CURL_SSLVERSION_MAX_TLSv1_2' => array(
3200
-            '7.2' => false,
3201
-            '7.3' => true,
3202
-        ),
3203
-        'CURL_SSLVERSION_MAX_TLSv1_3' => array(
3204
-            '7.2' => false,
3205
-            '7.3' => true,
3206
-        ),
3207
-        'CURL_SSLVERSION_TLSv1_3' => array(
3208
-            '7.2' => false,
3209
-            '7.3' => true,
3210
-        ),
3211
-        'CURL_VERSION_ASYNCHDNS' => array(
3212
-            '7.2' => false,
3213
-            '7.3' => true,
3214
-        ),
3215
-        'CURL_VERSION_BROTLI' => array(
3216
-            '7.2' => false,
3217
-            '7.3' => true,
3218
-        ),
3219
-        'CURL_VERSION_CONV' => array(
3220
-            '7.2' => false,
3221
-            '7.3' => true,
3222
-        ),
3223
-        'CURL_VERSION_DEBUG' => array(
3224
-            '7.2' => false,
3225
-            '7.3' => true,
3226
-        ),
3227
-        'CURL_VERSION_GSSAPI' => array(
3228
-            '7.2' => false,
3229
-            '7.3' => true,
3230
-        ),
3231
-        'CURL_VERSION_GSSNEGOTIATE' => array(
3232
-            '7.2' => false,
3233
-            '7.3' => true,
3234
-        ),
3235
-        'CURL_VERSION_HTTPS_PROXY' => array(
3236
-            '7.2' => false,
3237
-            '7.3' => true,
3238
-        ),
3239
-        'CURL_VERSION_IDN' => array(
3240
-            '7.2' => false,
3241
-            '7.3' => true,
3242
-        ),
3243
-        'CURL_VERSION_LARGEFILE' => array(
3244
-            '7.2' => false,
3245
-            '7.3' => true,
3246
-        ),
3247
-        'CURL_VERSION_MULTI_SSL' => array(
3248
-            '7.2' => false,
3249
-            '7.3' => true,
3250
-        ),
3251
-        'CURL_VERSION_NTLM' => array(
3252
-            '7.2' => false,
3253
-            '7.3' => true,
3254
-        ),
3255
-        'CURL_VERSION_NTLM_WB' => array(
3256
-            '7.2' => false,
3257
-            '7.3' => true,
3258
-        ),
3259
-        'CURL_VERSION_SPNEGO' => array(
3260
-            '7.2' => false,
3261
-            '7.3' => true,
3262
-        ),
3263
-        'CURL_VERSION_SSPI' => array(
3264
-            '7.2' => false,
3265
-            '7.3' => true,
3266
-        ),
3267
-        'CURL_VERSION_TLSAUTH_SRP' => array(
3268
-            '7.2' => false,
3269
-            '7.3' => true,
3270
-        ),
3271
-        'FILTER_SANITIZE_ADD_SLASHES' => array(
3272
-            '7.2' => false,
3273
-            '7.3' => true,
3274
-        ),
3275
-        'JSON_THROW_ON_ERROR' => array(
3276
-            '7.2' => false,
3277
-            '7.3' => true,
3278
-        ),
3279
-        'LDAP_CONTROL_MANAGEDSAIT' => array(
3280
-            '7.2' => false,
3281
-            '7.3' => true,
3282
-        ),
3283
-        'LDAP_CONTROL_PROXY_AUTHZ' => array(
3284
-            '7.2' => false,
3285
-            '7.3' => true,
3286
-        ),
3287
-        'LDAP_CONTROL_SUBENTRIES' => array(
3288
-            '7.2' => false,
3289
-            '7.3' => true,
3290
-        ),
3291
-        'LDAP_CONTROL_VALUESRETURNFILTER' => array(
3292
-            '7.2' => false,
3293
-            '7.3' => true,
3294
-        ),
3295
-        'LDAP_CONTROL_ASSERT' => array(
3296
-            '7.2' => false,
3297
-            '7.3' => true,
3298
-        ),
3299
-        'LDAP_CONTROL_PRE_READ' => array(
3300
-            '7.2' => false,
3301
-            '7.3' => true,
3302
-        ),
3303
-        'LDAP_CONTROL_POST_READ' => array(
3304
-            '7.2' => false,
3305
-            '7.3' => true,
3306
-        ),
3307
-        'LDAP_CONTROL_SORTREQUEST' => array(
3308
-            '7.2' => false,
3309
-            '7.3' => true,
3310
-        ),
3311
-        'LDAP_CONTROL_SORTRESPONSE' => array(
3312
-            '7.2' => false,
3313
-            '7.3' => true,
3314
-        ),
3315
-        'LDAP_CONTROL_PAGEDRESULTS' => array(
3316
-            '7.2' => false,
3317
-            '7.3' => true,
3318
-        ),
3319
-        'LDAP_CONTROL_AUTHZID_REQUEST' => array(
3320
-            '7.2' => false,
3321
-            '7.3' => true,
3322
-        ),
3323
-        'LDAP_CONTROL_AUTHZID_RESPONSE' => array(
3324
-            '7.2' => false,
3325
-            '7.3' => true,
3326
-        ),
3327
-        'LDAP_CONTROL_SYNC' => array(
3328
-            '7.2' => false,
3329
-            '7.3' => true,
3330
-        ),
3331
-        'LDAP_CONTROL_SYNC_STATE' => array(
3332
-            '7.2' => false,
3333
-            '7.3' => true,
3334
-        ),
3335
-        'LDAP_CONTROL_SYNC_DONE' => array(
3336
-            '7.2' => false,
3337
-            '7.3' => true,
3338
-        ),
3339
-        'LDAP_CONTROL_DONTUSECOPY' => array(
3340
-            '7.2' => false,
3341
-            '7.3' => true,
3342
-        ),
3343
-        'LDAP_CONTROL_PASSWORDPOLICYREQUEST' => array(
3344
-            '7.2' => false,
3345
-            '7.3' => true,
3346
-        ),
3347
-        'LDAP_CONTROL_PASSWORDPOLICYRESPONSE' => array(
3348
-            '7.2' => false,
3349
-            '7.3' => true,
3350
-        ),
3351
-        'LDAP_CONTROL_X_INCREMENTAL_VALUES' => array(
3352
-            '7.2' => false,
3353
-            '7.3' => true,
3354
-        ),
3355
-        'LDAP_CONTROL_X_DOMAIN_SCOPE' => array(
3356
-            '7.2' => false,
3357
-            '7.3' => true,
3358
-        ),
3359
-        'LDAP_CONTROL_X_PERMISSIVE_MODIFY' => array(
3360
-            '7.2' => false,
3361
-            '7.3' => true,
3362
-        ),
3363
-        'LDAP_CONTROL_X_SEARCH_OPTIONS' => array(
3364
-            '7.2' => false,
3365
-            '7.3' => true,
3366
-        ),
3367
-        'LDAP_CONTROL_X_TREE_DELETE' => array(
3368
-            '7.2' => false,
3369
-            '7.3' => true,
3370
-        ),
3371
-        'LDAP_CONTROL_X_EXTENDED_DN' => array(
3372
-            '7.2' => false,
3373
-            '7.3' => true,
3374
-        ),
3375
-        'LDAP_CONTROL_VLVREQUEST' => array(
3376
-            '7.2' => false,
3377
-            '7.3' => true,
3378
-        ),
3379
-        'LDAP_CONTROL_VLVRESPONSE' => array(
3380
-            '7.2' => false,
3381
-            '7.3' => true,
3382
-        ),
3383
-        'MB_CASE_FOLD' => array(
3384
-            '7.2' => false,
3385
-            '7.3' => true,
3386
-        ),
3387
-        'MB_CASE_UPPER_SIMPLE' => array(
3388
-            '7.2' => false,
3389
-            '7.3' => true,
3390
-        ),
3391
-        'MB_CASE_LOWER_SIMPLE' => array(
3392
-            '7.2' => false,
3393
-            '7.3' => true,
3394
-        ),
3395
-        'MB_CASE_TITLE_SIMPLE' => array(
3396
-            '7.2' => false,
3397
-            '7.3' => true,
3398
-        ),
3399
-        'MB_CASE_FOLD_SIMPLE' => array(
3400
-            '7.2' => false,
3401
-            '7.3' => true,
3402
-        ),
3403
-        'PGSQL_DIAG_SCHEMA_NAME' => array(
3404
-            '7.2' => false,
3405
-            '7.3' => true,
3406
-        ),
3407
-        'PGSQL_DIAG_TABLE_NAME' => array(
3408
-            '7.2' => false,
3409
-            '7.3' => true,
3410
-        ),
3411
-        'PGSQL_DIAG_COLUMN_NAME' => array(
3412
-            '7.2' => false,
3413
-            '7.3' => true,
3414
-        ),
3415
-        'PGSQL_DIAG_DATATYPE_NAME' => array(
3416
-            '7.2' => false,
3417
-            '7.3' => true,
3418
-        ),
3419
-        'PGSQL_DIAG_CONSTRAINT_NAME' => array(
3420
-            '7.2' => false,
3421
-            '7.3' => true,
3422
-        ),
3423
-        'PGSQL_DIAG_SEVERITY_NONLOCALIZED' => array(
3424
-            '7.2' => false,
3425
-            '7.3' => true,
3426
-        ),
3427
-        'PASSWORD_ARGON2ID' => array(
3428
-            '7.2' => false,
3429
-            '7.3' => true,
3430
-        ),
3431
-        'STREAM_CRYPTO_PROTO_SSLv3' => array(
3432
-            '7.2' => false,
3433
-            '7.3' => true,
3434
-        ),
3435
-        'STREAM_CRYPTO_PROTO_TLSv1_0' => array(
3436
-            '7.2' => false,
3437
-            '7.3' => true,
3438
-        ),
3439
-        'STREAM_CRYPTO_PROTO_TLSv1_1' => array(
3440
-            '7.2' => false,
3441
-            '7.3' => true,
3442
-        ),
3443
-        'STREAM_CRYPTO_PROTO_TLSv1_2' => array(
3444
-            '7.2' => false,
3445
-            '7.3' => true,
3446
-        ),
3447
-
3448
-        'MB_ONIGURUMA_VERSION' => array(
3449
-            '7.3' => false,
3450
-            '7.4' => true,
3451
-        ),
3452
-        'SO_LABEL' => array(
3453
-            '7.3' => false,
3454
-            '7.4' => true,
3455
-        ),
3456
-        'SO_PEERLABEL' => array(
3457
-            '7.3' => false,
3458
-            '7.4' => true,
3459
-        ),
3460
-        'SO_LISTENQLIMIT' => array(
3461
-            '7.3' => false,
3462
-            '7.4' => true,
3463
-        ),
3464
-        'SO_LISTENQLEN' => array(
3465
-            '7.3' => false,
3466
-            '7.4' => true,
3467
-        ),
3468
-        'SO_USER_COOKIE' => array(
3469
-            '7.3' => false,
3470
-            '7.4' => true,
3471
-        ),
3472
-        'PHP_WINDOWS_EVENT_CTRL_C' => array(
3473
-            '7.3' => false,
3474
-            '7.4' => true,
3475
-        ),
3476
-        'PHP_WINDOWS_EVENT_CTRL_BREAK' => array(
3477
-            '7.3' => false,
3478
-            '7.4' => true,
3479
-        ),
3480
-        'TIDY_TAG_ARTICLE' => array(
3481
-            '7.3' => false,
3482
-            '7.4' => true,
3483
-        ),
3484
-        'TIDY_TAG_ASIDE' => array(
3485
-            '7.3' => false,
3486
-            '7.4' => true,
3487
-        ),
3488
-        'TIDY_TAG_AUDIO' => array(
3489
-            '7.3' => false,
3490
-            '7.4' => true,
3491
-        ),
3492
-        'TIDY_TAG_BDI' => array(
3493
-            '7.3' => false,
3494
-            '7.4' => true,
3495
-        ),
3496
-        'TIDY_TAG_CANVAS' => array(
3497
-            '7.3' => false,
3498
-            '7.4' => true,
3499
-        ),
3500
-        'TIDY_TAG_COMMAND' => array(
3501
-            '7.3' => false,
3502
-            '7.4' => true,
3503
-        ),
3504
-        'TIDY_TAG_DATALIST' => array(
3505
-            '7.3' => false,
3506
-            '7.4' => true,
3507
-        ),
3508
-        'TIDY_TAG_DETAILS' => array(
3509
-            '7.3' => false,
3510
-            '7.4' => true,
3511
-        ),
3512
-        'TIDY_TAG_DIALOG' => array(
3513
-            '7.3' => false,
3514
-            '7.4' => true,
3515
-        ),
3516
-        'TIDY_TAG_FIGCAPTION' => array(
3517
-            '7.3' => false,
3518
-            '7.4' => true,
3519
-        ),
3520
-        'TIDY_TAG_FIGURE' => array(
3521
-            '7.3' => false,
3522
-            '7.4' => true,
3523
-        ),
3524
-        'TIDY_TAG_FOOTER' => array(
3525
-            '7.3' => false,
3526
-            '7.4' => true,
3527
-        ),
3528
-        'TIDY_TAG_HEADER' => array(
3529
-            '7.3' => false,
3530
-            '7.4' => true,
3531
-        ),
3532
-        'TIDY_TAG_HGROUP' => array(
3533
-            '7.3' => false,
3534
-            '7.4' => true,
3535
-        ),
3536
-        'TIDY_TAG_MAIN' => array(
3537
-            '7.3' => false,
3538
-            '7.4' => true,
3539
-        ),
3540
-        'TIDY_TAG_MARK' => array(
3541
-            '7.3' => false,
3542
-            '7.4' => true,
3543
-        ),
3544
-        'TIDY_TAG_MENUITEM' => array(
3545
-            '7.3' => false,
3546
-            '7.4' => true,
3547
-        ),
3548
-        'TIDY_TAG_METER' => array(
3549
-            '7.3' => false,
3550
-            '7.4' => true,
3551
-        ),
3552
-        'TIDY_TAG_NAV' => array(
3553
-            '7.3' => false,
3554
-            '7.4' => true,
3555
-        ),
3556
-        'TIDY_TAG_OUTPUT' => array(
3557
-            '7.3' => false,
3558
-            '7.4' => true,
3559
-        ),
3560
-        'TIDY_TAG_PROGRESS' => array(
3561
-            '7.3' => false,
3562
-            '7.4' => true,
3563
-        ),
3564
-        'TIDY_TAG_SECTION' => array(
3565
-            '7.3' => false,
3566
-            '7.4' => true,
3567
-        ),
3568
-        'TIDY_TAG_SOURCE' => array(
3569
-            '7.3' => false,
3570
-            '7.4' => true,
3571
-        ),
3572
-        'TIDY_TAG_SUMMARY' => array(
3573
-            '7.3' => false,
3574
-            '7.4' => true,
3575
-        ),
3576
-        'TIDY_TAG_TEMPLATE' => array(
3577
-            '7.3' => false,
3578
-            '7.4' => true,
3579
-        ),
3580
-        'TIDY_TAG_TIME' => array(
3581
-            '7.3' => false,
3582
-            '7.4' => true,
3583
-        ),
3584
-        'TIDY_TAG_TRACK' => array(
3585
-            '7.3' => false,
3586
-            '7.4' => true,
3587
-        ),
3588
-        'TIDY_TAG_VIDEO' => array(
3589
-            '7.3' => false,
3590
-            '7.4' => true,
3591
-        ),
3592
-    );
3593
-
3594
-
3595
-    /**
3596
-     * Returns an array of tokens this test wants to listen for.
3597
-     *
3598
-     * @return array
3599
-     */
3600
-    public function register()
3601
-    {
3602
-        return array(\T_STRING);
3603
-    }
3604
-
3605
-    /**
3606
-     * Processes this test, when one of its tokens is encountered.
3607
-     *
3608
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
3609
-     * @param int                   $stackPtr  The position of the current token in the
3610
-     *                                         stack passed in $tokens.
3611
-     *
3612
-     * @return void
3613
-     */
3614
-    public function process(File $phpcsFile, $stackPtr)
3615
-    {
3616
-        $tokens       = $phpcsFile->getTokens();
3617
-        $constantName = $tokens[$stackPtr]['content'];
3618
-
3619
-        if (isset($this->newConstants[$constantName]) === false) {
3620
-            return;
3621
-        }
3622
-
3623
-        if ($this->isUseOfGlobalConstant($phpcsFile, $stackPtr) === false) {
3624
-            return;
3625
-        }
3626
-
3627
-        $itemInfo = array(
3628
-            'name' => $constantName,
3629
-        );
3630
-        $this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
3631
-    }
3632
-
3633
-
3634
-    /**
3635
-     * Get the relevant sub-array for a specific item from a multi-dimensional array.
3636
-     *
3637
-     * @param array $itemInfo Base information about the item.
3638
-     *
3639
-     * @return array Version and other information about the item.
3640
-     */
3641
-    public function getItemArray(array $itemInfo)
3642
-    {
3643
-        return $this->newConstants[$itemInfo['name']];
3644
-    }
3645
-
3646
-
3647
-    /**
3648
-     * Get the error message template for this sniff.
3649
-     *
3650
-     * @return string
3651
-     */
3652
-    protected function getErrorMsgTemplate()
3653
-    {
3654
-        return 'The constant "%s" is not present in PHP version %s or earlier';
3655
-    }
25
+	/**
26
+	 * A list of new PHP Constants, not present in older versions.
27
+	 *
28
+	 * The array lists : version number with false (not present) or true (present).
29
+	 * If's sufficient to list the first version where the constant appears.
30
+	 *
31
+	 * Note: PHP Constants are case-sensitive!
32
+	 *
33
+	 * @var array(string => array(string => bool|string|null))
34
+	 */
35
+	protected $newConstants = array(
36
+		'E_STRICT' => array(
37
+			'4.4' => false,
38
+			'5.0' => true,
39
+		),
40
+		// Curl:
41
+		'CURLOPT_FTP_USE_EPRT' => array(
42
+			'4.4' => false,
43
+			'5.0' => true,
44
+		),
45
+		'CURLOPT_NOSIGNAL' => array(
46
+			'4.4' => false,
47
+			'5.0' => true,
48
+		),
49
+		'CURLOPT_UNRESTRICTED_AUTH' => array(
50
+			'4.4' => false,
51
+			'5.0' => true,
52
+		),
53
+		'CURLOPT_BUFFERSIZE' => array(
54
+			'4.4' => false,
55
+			'5.0' => true,
56
+		),
57
+		'CURLOPT_HTTPAUTH' => array(
58
+			'4.4' => false,
59
+			'5.0' => true,
60
+		),
61
+		'CURLOPT_PROXYPORT' => array(
62
+			'4.4' => false,
63
+			'5.0' => true,
64
+		),
65
+		'CURLOPT_PROXYTYPE' => array(
66
+			'4.4' => false,
67
+			'5.0' => true,
68
+		),
69
+		'CURLOPT_SSLCERTTYPE' => array(
70
+			'4.4' => false,
71
+			'5.0' => true,
72
+		),
73
+		'CURLOPT_HTTP200ALIASES' => array(
74
+			'4.4' => false,
75
+			'5.0' => true,
76
+		),
77
+		// OpenSSL:
78
+		'OPENSSL_ALGO_MD2' => array(
79
+			'4.4' => false,
80
+			'5.0' => true,
81
+		),
82
+		'OPENSSL_ALGO_MD4' => array(
83
+			'4.4' => false,
84
+			'5.0' => true,
85
+		),
86
+		'OPENSSL_ALGO_MD5' => array(
87
+			'4.4' => false,
88
+			'5.0' => true,
89
+		),
90
+		'OPENSSL_ALGO_SHA1' => array(
91
+			'4.4' => false,
92
+			'5.0' => true,
93
+		),
94
+		'OPENSSL_ALGO_DSS1' => array(
95
+			'4.4' => false,
96
+			'5.0' => true,
97
+		),
98
+		// Tokenizer:
99
+		'T_ABSTRACT' => array(
100
+			'4.4' => false,
101
+			'5.0' => true,
102
+		),
103
+		'T_CATCH' => array(
104
+			'4.4' => false,
105
+			'5.0' => true,
106
+		),
107
+
108
+		'SORT_LOCALE_STRING' => array(
109
+			'5.0.1' => false,
110
+			'5.0.2' => true,
111
+		),
112
+		'PHP_EOL' => array(
113
+			'5.0.1' => false,
114
+			'5.0.2' => true,
115
+		),
116
+
117
+		'PHP_INT_MAX' => array(
118
+			'5.0.4' => false,
119
+			'5.0.5' => true,
120
+		),
121
+		'PHP_INT_SIZE' => array(
122
+			'5.0.4' => false,
123
+			'5.0.5' => true,
124
+		),
125
+
126
+		'__COMPILER_HALT_OFFSET__' => array(
127
+			'5.0' => false,
128
+			'5.1' => true,
129
+		),
130
+		'GLOB_ERR' => array(
131
+			'5.0' => false,
132
+			'5.1' => true,
133
+		),
134
+		// Curl:
135
+		'CURLOPT_AUTOREFERER' => array(
136
+			'5.0' => false,
137
+			'5.1' => true,
138
+		),
139
+		'CURLOPT_BINARYTRANSFER' => array(
140
+			'5.0' => false,
141
+			'5.1' => true,
142
+		),
143
+		'CURLOPT_COOKIESESSION' => array(
144
+			'5.0' => false,
145
+			'5.1' => true,
146
+		),
147
+		'CURLOPT_FTPSSLAUTH' => array(
148
+			'5.0' => false,
149
+			'5.1' => true,
150
+		),
151
+		'CURLOPT_PROXYAUTH' => array(
152
+			'5.0' => false,
153
+			'5.1' => true,
154
+		),
155
+		'CURLOPT_TIMECONDITION' => array(
156
+			'5.0' => false,
157
+			'5.1' => true,
158
+		),
159
+		// POSIX:
160
+		'POSIX_F_OK' => array(
161
+			'5.0' => false,
162
+			'5.1' => true,
163
+		),
164
+		'POSIX_R_OK' => array(
165
+			'5.0' => false,
166
+			'5.1' => true,
167
+		),
168
+		'POSIX_W_OK' => array(
169
+			'5.0' => false,
170
+			'5.1' => true,
171
+		),
172
+		'POSIX_X_OK' => array(
173
+			'5.0' => false,
174
+			'5.1' => true,
175
+		),
176
+		'POSIX_S_IFBLK' => array(
177
+			'5.0' => false,
178
+			'5.1' => true,
179
+		),
180
+		'POSIX_S_IFCHR' => array(
181
+			'5.0' => false,
182
+			'5.1' => true,
183
+		),
184
+		'POSIX_S_IFIFO' => array(
185
+			'5.0' => false,
186
+			'5.1' => true,
187
+		),
188
+		'POSIX_S_IFREG' => array(
189
+			'5.0' => false,
190
+			'5.1' => true,
191
+		),
192
+		'POSIX_S_IFSOCK' => array(
193
+			'5.0' => false,
194
+			'5.1' => true,
195
+		),
196
+		// Streams:
197
+		'STREAM_IPPROTO_ICMP' => array(
198
+			'5.0' => false,
199
+			'5.1' => true,
200
+		),
201
+		'STREAM_IPPROTO_IP' => array(
202
+			'5.0' => false,
203
+			'5.1' => true,
204
+		),
205
+		'STREAM_IPPROTO_RAW' => array(
206
+			'5.0' => false,
207
+			'5.1' => true,
208
+		),
209
+		'STREAM_IPPROTO_TCP' => array(
210
+			'5.0' => false,
211
+			'5.1' => true,
212
+		),
213
+		'STREAM_IPPROTO_UDP' => array(
214
+			'5.0' => false,
215
+			'5.1' => true,
216
+		),
217
+		'STREAM_PF_INET' => array(
218
+			'5.0' => false,
219
+			'5.1' => true,
220
+		),
221
+		'STREAM_PF_INET6' => array(
222
+			'5.0' => false,
223
+			'5.1' => true,
224
+		),
225
+		'STREAM_PF_UNIX' => array(
226
+			'5.0' => false,
227
+			'5.1' => true,
228
+		),
229
+		'STREAM_SOCK_DGRAM' => array(
230
+			'5.0' => false,
231
+			'5.1' => true,
232
+		),
233
+		'STREAM_SOCK_RAW' => array(
234
+			'5.0' => false,
235
+			'5.1' => true,
236
+		),
237
+		'STREAM_SOCK_RDM' => array(
238
+			'5.0' => false,
239
+			'5.1' => true,
240
+		),
241
+		'STREAM_SOCK_SEQPACKET' => array(
242
+			'5.0' => false,
243
+			'5.1' => true,
244
+		),
245
+		'STREAM_SOCK_STREAM' => array(
246
+			'5.0' => false,
247
+			'5.1' => true,
248
+		),
249
+		// Tokenizer:
250
+		'T_HALT_COMPILER' => array(
251
+			'5.0' => false,
252
+			'5.1' => true,
253
+		),
254
+
255
+		// Date/Time:
256
+		'DATE_ATOM' => array(
257
+			'5.1.0' => false,
258
+			'5.1.1' => true,
259
+		),
260
+		'DATE_COOKIE' => array(
261
+			'5.1.0' => false,
262
+			'5.1.1' => true,
263
+		),
264
+		'DATE_ISO8601' => array(
265
+			'5.1.0' => false,
266
+			'5.1.1' => true,
267
+		),
268
+		'DATE_RFC822' => array(
269
+			'5.1.0' => false,
270
+			'5.1.1' => true,
271
+		),
272
+		'DATE_RFC850' => array(
273
+			'5.1.0' => false,
274
+			'5.1.1' => true,
275
+		),
276
+		'DATE_RFC1036' => array(
277
+			'5.1.0' => false,
278
+			'5.1.1' => true,
279
+		),
280
+		'DATE_RFC1123' => array(
281
+			'5.1.0' => false,
282
+			'5.1.1' => true,
283
+		),
284
+		'DATE_RFC2822' => array(
285
+			'5.1.0' => false,
286
+			'5.1.1' => true,
287
+		),
288
+		'DATE_RFC3339' => array(
289
+			'5.1.0' => false,
290
+			'5.1.1' => true,
291
+		),
292
+		'DATE_RSS' => array(
293
+			'5.1.0' => false,
294
+			'5.1.1' => true,
295
+		),
296
+		'DATE_W3C' => array(
297
+			'5.1.0' => false,
298
+			'5.1.1' => true,
299
+		),
300
+
301
+		// Date/Time:
302
+		'SUNFUNCS_RET_TIMESTAMP' => array(
303
+			'5.1.1' => false,
304
+			'5.1.2' => true,
305
+		),
306
+		'SUNFUNCS_RET_STRING' => array(
307
+			'5.1.1' => false,
308
+			'5.1.2' => true,
309
+		),
310
+		'SUNFUNCS_RET_DOUBLE' => array(
311
+			'5.1.1' => false,
312
+			'5.1.2' => true,
313
+		),
314
+		// XSL:
315
+		'LIBXSLT_VERSION' => array(
316
+			'5.1.1' => false,
317
+			'5.1.2' => true,
318
+		),
319
+		'LIBXSLT_DOTTED_VERSION' => array(
320
+			'5.1.1' => false,
321
+			'5.1.2' => true,
322
+		),
323
+		'LIBEXSLT_VERSION' => array(
324
+			'5.1.1' => false,
325
+			'5.1.2' => true,
326
+		),
327
+		'LIBEXSLT_DOTTED_VERSION' => array(
328
+			'5.1.1' => false,
329
+			'5.1.2' => true,
330
+		),
331
+		// URL:
332
+		'PHP_URL_SCHEME' => array(
333
+			'5.1.1' => false,
334
+			'5.1.2' => true,
335
+		),
336
+		'PHP_URL_HOST' => array(
337
+			'5.1.1' => false,
338
+			'5.1.2' => true,
339
+		),
340
+		'PHP_URL_PORT' => array(
341
+			'5.1.1' => false,
342
+			'5.1.2' => true,
343
+		),
344
+		'PHP_URL_USER' => array(
345
+			'5.1.1' => false,
346
+			'5.1.2' => true,
347
+		),
348
+		'PHP_URL_PASS' => array(
349
+			'5.1.1' => false,
350
+			'5.1.2' => true,
351
+		),
352
+		'PHP_URL_PATH' => array(
353
+			'5.1.1' => false,
354
+			'5.1.2' => true,
355
+		),
356
+		'PHP_URL_QUERY' => array(
357
+			'5.1.1' => false,
358
+			'5.1.2' => true,
359
+		),
360
+		'PHP_URL_FRAGMENT' => array(
361
+			'5.1.1' => false,
362
+			'5.1.2' => true,
363
+		),
364
+		'PHP_QUERY_RFC1738' => array(
365
+			'5.1.1' => false,
366
+			'5.1.2' => true,
367
+		),
368
+		'PHP_QUERY_RFC3986' => array(
369
+			'5.1.1' => false,
370
+			'5.1.2' => true,
371
+		),
372
+
373
+		// Curl:
374
+		'CURLINFO_HEADER_OUT' => array(
375
+			'5.1.2' => false,
376
+			'5.1.3' => true,
377
+		),
378
+
379
+		// Core:
380
+		'E_RECOVERABLE_ERROR' => array(
381
+			'5.1' => false,
382
+			'5.2' => true,
383
+		),
384
+		// Math:
385
+		'M_EULER' => array(
386
+			'5.1' => false,
387
+			'5.2' => true,
388
+		),
389
+		'M_LNPI' => array(
390
+			'5.1' => false,
391
+			'5.2' => true,
392
+		),
393
+		'M_SQRT3' => array(
394
+			'5.1' => false,
395
+			'5.2' => true,
396
+		),
397
+		'M_SQRTPI' => array(
398
+			'5.1' => false,
399
+			'5.2' => true,
400
+		),
401
+		'PATHINFO_FILENAME' => array(
402
+			'5.1' => false,
403
+			'5.2' => true,
404
+		),
405
+		'UPLOAD_ERR_EXTENSION' => array(
406
+			'5.1' => false,
407
+			'5.2' => true,
408
+		),
409
+		// Curl:
410
+		'CURLE_FILESIZE_EXCEEDED' => array(
411
+			'5.1' => false,
412
+			'5.2' => true,
413
+		),
414
+		'CURLE_FTP_SSL_FAILED' => array(
415
+			'5.1' => false,
416
+			'5.2' => true,
417
+		),
418
+		'CURLE_LDAP_INVALID_URL' => array(
419
+			'5.1' => false,
420
+			'5.2' => true,
421
+		),
422
+		'CURLFTPAUTH_DEFAULT' => array(
423
+			'5.1' => false,
424
+			'5.2' => true,
425
+		),
426
+		'CURLFTPAUTH_SSL' => array(
427
+			'5.1' => false,
428
+			'5.2' => true,
429
+		),
430
+		'CURLFTPAUTH_TLS' => array(
431
+			'5.1' => false,
432
+			'5.2' => true,
433
+		),
434
+		'CURLFTPSSL_ALL' => array(
435
+			'5.1' => false,
436
+			'5.2' => true,
437
+		),
438
+		'CURLFTPSSL_CONTROL' => array(
439
+			'5.1' => false,
440
+			'5.2' => true,
441
+		),
442
+		'CURLFTPSSL_NONE' => array(
443
+			'5.1' => false,
444
+			'5.2' => true,
445
+		),
446
+		'CURLFTPSSL_TRY' => array(
447
+			'5.1' => false,
448
+			'5.2' => true,
449
+		),
450
+		'CURLOPT_FTP_SSL' => array(
451
+			'5.1' => false,
452
+			'5.2' => true,
453
+		),
454
+		// Ming:
455
+		'SWFTEXTFIELD_USEFONT' => array(
456
+			'5.1' => false,
457
+			'5.2' => true,
458
+		),
459
+		'SWFTEXTFIELD_AUTOSIZE' => array(
460
+			'5.1' => false,
461
+			'5.2' => true,
462
+		),
463
+		'SWF_SOUND_NOT_COMPRESSED' => array(
464
+			'5.1' => false,
465
+			'5.2' => true,
466
+		),
467
+		'SWF_SOUND_ADPCM_COMPRESSED' => array(
468
+			'5.1' => false,
469
+			'5.2' => true,
470
+		),
471
+		'SWF_SOUND_MP3_COMPRESSED' => array(
472
+			'5.1' => false,
473
+			'5.2' => true,
474
+		),
475
+		'SWF_SOUND_NOT_COMPRESSED_LE' => array(
476
+			'5.1' => false,
477
+			'5.2' => true,
478
+		),
479
+		'SWF_SOUND_NELLY_COMPRESSED' => array(
480
+			'5.1' => false,
481
+			'5.2' => true,
482
+		),
483
+		'SWF_SOUND_5KHZ' => array(
484
+			'5.1' => false,
485
+			'5.2' => true,
486
+		),
487
+		'SWF_SOUND_11KHZ' => array(
488
+			'5.1' => false,
489
+			'5.2' => true,
490
+		),
491
+		'SWF_SOUND_22KHZ' => array(
492
+			'5.1' => false,
493
+			'5.2' => true,
494
+		),
495
+		'SWF_SOUND_44KHZ' => array(
496
+			'5.1' => false,
497
+			'5.2' => true,
498
+		),
499
+		'SWF_SOUND_8BITS' => array(
500
+			'5.1' => false,
501
+			'5.2' => true,
502
+		),
503
+		'SWF_SOUND_16BITS' => array(
504
+			'5.1' => false,
505
+			'5.2' => true,
506
+		),
507
+		'SWF_SOUND_MONO' => array(
508
+			'5.1' => false,
509
+			'5.2' => true,
510
+		),
511
+		'SWF_SOUND_STEREO' => array(
512
+			'5.1' => false,
513
+			'5.2' => true,
514
+		),
515
+		// OpenSSL:
516
+		'OPENSSL_KEYTYPE_EC' => array(
517
+			'5.1' => false,
518
+			'5.2' => true,
519
+		),
520
+		'OPENSSL_VERSION_NUMBER' => array(
521
+			'5.1' => false,
522
+			'5.2' => true,
523
+		),
524
+		'OPENSSL_VERSION_TEXT' => array(
525
+			'5.1' => false,
526
+			'5.2' => true,
527
+		),
528
+		// PCRE:
529
+		'PREG_BACKTRACK_LIMIT_ERROR' => array(
530
+			'5.1' => false,
531
+			'5.2' => true,
532
+		),
533
+		'PREG_BAD_UTF8_ERROR' => array(
534
+			'5.1' => false,
535
+			'5.2' => true,
536
+		),
537
+		'PREG_INTERNAL_ERROR' => array(
538
+			'5.1' => false,
539
+			'5.2' => true,
540
+		),
541
+		'PREG_NO_ERROR' => array(
542
+			'5.1' => false,
543
+			'5.2' => true,
544
+		),
545
+		'PREG_RECURSION_LIMIT_ERROR' => array(
546
+			'5.1' => false,
547
+			'5.2' => true,
548
+		),
549
+		// Snmp:
550
+		'SNMP_OID_OUTPUT_FULL' => array(
551
+			'5.1' => false,
552
+			'5.2' => true,
553
+		),
554
+		'SNMP_OID_OUTPUT_NUMERIC' => array(
555
+			'5.1' => false,
556
+			'5.2' => true,
557
+		),
558
+		// Semaphore:
559
+		'MSG_EAGAIN' => array(
560
+			'5.1' => false,
561
+			'5.2' => true,
562
+		),
563
+		'MSG_ENOMSG' => array(
564
+			'5.1' => false,
565
+			'5.2' => true,
566
+		),
567
+
568
+		// Curl:
569
+		'CURLOPT_TCP_NODELAY' => array(
570
+			'5.2.0' => false,
571
+			'5.2.1' => true,
572
+		),
573
+
574
+		// Stream:
575
+		'STREAM_SHUT_RD' => array(
576
+			'5.2.0' => false,
577
+			'5.2.1' => true,
578
+		),
579
+		'STREAM_SHUT_WR' => array(
580
+			'5.2.0' => false,
581
+			'5.2.1' => true,
582
+		),
583
+		'STREAM_SHUT_RDWR' => array(
584
+			'5.2.0' => false,
585
+			'5.2.1' => true,
586
+		),
587
+
588
+		'GMP_VERSION' => array(
589
+			'5.2.1' => false,
590
+			'5.2.2' => true,
591
+		),
592
+
593
+		// Curl:
594
+		'CURLOPT_TIMEOUT_MS' => array(
595
+			'5.2.2' => false,
596
+			'5.2.3' => true,
597
+		),
598
+		'CURLOPT_CONNECTTIMEOUT_MS' => array(
599
+			'5.2.2' => false,
600
+			'5.2.3' => true,
601
+		),
602
+
603
+		// Curl:
604
+		'CURLOPT_PRIVATE' => array(
605
+			'5.2.3' => false,
606
+			'5.2.4' => true,
607
+		),
608
+		'CURLINFO_PRIVATE' => array(
609
+			'5.2.3' => false,
610
+			'5.2.4' => true,
611
+		),
612
+		// GD:
613
+		'GD_VERSION' => array(
614
+			'5.2.3' => false,
615
+			'5.2.4' => true,
616
+		),
617
+		'GD_MAJOR_VERSION' => array(
618
+			'5.2.3' => false,
619
+			'5.2.4' => true,
620
+		),
621
+		'GD_MINOR_VERSION' => array(
622
+			'5.2.3' => false,
623
+			'5.2.4' => true,
624
+		),
625
+		'GD_RELEASE_VERSION' => array(
626
+			'5.2.3' => false,
627
+			'5.2.4' => true,
628
+		),
629
+		'GD_EXTRA_VERSION' => array(
630
+			'5.2.3' => false,
631
+			'5.2.4' => true,
632
+		),
633
+		// PCRE:
634
+		'PCRE_VERSION' => array(
635
+			'5.2.3' => false,
636
+			'5.2.4' => true,
637
+		),
638
+
639
+		'PHP_MAJOR_VERSION' => array(
640
+			'5.2.6' => false,
641
+			'5.2.7' => true,
642
+		),
643
+		'PHP_MINOR_VERSION' => array(
644
+			'5.2.6' => false,
645
+			'5.2.7' => true,
646
+		),
647
+		'PHP_RELEASE_VERSION' => array(
648
+			'5.2.6' => false,
649
+			'5.2.7' => true,
650
+		),
651
+		'PHP_VERSION_ID' => array(
652
+			'5.2.6' => false,
653
+			'5.2.7' => true,
654
+		),
655
+		'PHP_EXTRA_VERSION' => array(
656
+			'5.2.6' => false,
657
+			'5.2.7' => true,
658
+		),
659
+		'PHP_ZTS' => array(
660
+			'5.2.6' => false,
661
+			'5.2.7' => true,
662
+		),
663
+		'PHP_DEBUG' => array(
664
+			'5.2.6' => false,
665
+			'5.2.7' => true,
666
+		),
667
+		'FILE_BINARY' => array(
668
+			'5.2.6' => false,
669
+			'5.2.7' => true,
670
+		),
671
+		'FILE_TEXT' => array(
672
+			'5.2.6' => false,
673
+			'5.2.7' => true,
674
+		),
675
+		// Sockets:
676
+		'TCP_NODELAY' => array(
677
+			'5.2.6' => false,
678
+			'5.2.7' => true,
679
+		),
680
+
681
+		// Curl:
682
+		'CURLOPT_PROTOCOLS' => array(
683
+			'5.2.9'  => false,
684
+			'5.2.10' => true,
685
+		),
686
+		'CURLOPT_REDIR_PROTOCOLS' => array(
687
+			'5.2.9'  => false,
688
+			'5.2.10' => true,
689
+		),
690
+		'CURLPROXY_SOCKS4' => array(
691
+			'5.2.9'  => false,
692
+			'5.2.10' => true,
693
+		),
694
+
695
+		// Libxml:
696
+		'LIBXML_PARSEHUGE' => array(
697
+			'5.2.11' => false,
698
+			'5.2.12' => true,
699
+		),
700
+
701
+		// Core:
702
+		'ENT_IGNORE' => array(
703
+			'5.2' => false,
704
+			'5.3' => true,
705
+		),
706
+		'E_DEPRECATED' => array(
707
+			'5.2' => false,
708
+			'5.3' => true,
709
+		),
710
+		'E_USER_DEPRECATED' => array(
711
+			'5.2' => false,
712
+			'5.3' => true,
713
+		),
714
+		'INI_SCANNER_NORMAL' => array(
715
+			'5.2' => false,
716
+			'5.3' => true,
717
+		),
718
+		'INI_SCANNER_RAW' => array(
719
+			'5.2' => false,
720
+			'5.3' => true,
721
+		),
722
+		'PHP_MAXPATHLEN' => array(
723
+			'5.2' => false,
724
+			'5.3' => true,
725
+		),
726
+		'PHP_WINDOWS_NT_DOMAIN_CONTROLLER' => array(
727
+			'5.2' => false,
728
+			'5.3' => true,
729
+		),
730
+		'PHP_WINDOWS_NT_SERVER' => array(
731
+			'5.2' => false,
732
+			'5.3' => true,
733
+		),
734
+		'PHP_WINDOWS_NT_WORKSTATION' => array(
735
+			'5.2' => false,
736
+			'5.3' => true,
737
+		),
738
+		'PHP_WINDOWS_VERSION_BUILD' => array(
739
+			'5.2' => false,
740
+			'5.3' => true,
741
+		),
742
+		'PHP_WINDOWS_VERSION_MAJOR' => array(
743
+			'5.2' => false,
744
+			'5.3' => true,
745
+		),
746
+		'PHP_WINDOWS_VERSION_MINOR' => array(
747
+			'5.2' => false,
748
+			'5.3' => true,
749
+		),
750
+		'PHP_WINDOWS_VERSION_PLATFORM' => array(
751
+			'5.2' => false,
752
+			'5.3' => true,
753
+		),
754
+		'PHP_WINDOWS_VERSION_PRODUCTTYPE' => array(
755
+			'5.2' => false,
756
+			'5.3' => true,
757
+		),
758
+		'PHP_WINDOWS_VERSION_SP_MAJOR' => array(
759
+			'5.2' => false,
760
+			'5.3' => true,
761
+		),
762
+		'PHP_WINDOWS_VERSION_SP_MINOR' => array(
763
+			'5.2' => false,
764
+			'5.3' => true,
765
+		),
766
+		'PHP_WINDOWS_VERSION_SUITEMASK' => array(
767
+			'5.2' => false,
768
+			'5.3' => true,
769
+		),
770
+		// Curl:
771
+		'CURLINFO_CERTINFO' => array(
772
+			'5.2' => false,
773
+			'5.3' => true,
774
+		),
775
+		'CURLOPT_PROGRESSFUNCTION' => array(
776
+			'5.2' => false,
777
+			'5.3' => true,
778
+		),
779
+		'CURLE_SSH' => array(
780
+			'5.2' => false,
781
+			'5.3' => true,
782
+		),
783
+		// GD:
784
+		'IMG_FILTER_PIXELATE' => array(
785
+			'5.2' => false,
786
+			'5.3' => true,
787
+		),
788
+		'IMAGETYPE_ICO' => array(
789
+			'5.2' => false,
790
+			'5.3' => true,
791
+		),
792
+		// Fileinfo:
793
+		'FILEINFO_MIME_TYPE' => array(
794
+			'5.2' => false,
795
+			'5.3' => true,
796
+		),
797
+		'FILEINFO_MIME_ENCODING' => array(
798
+			'5.2' => false,
799
+			'5.3' => true,
800
+		),
801
+		// JSON:
802
+		'JSON_ERROR_CTRL_CHAR' => array(
803
+			'5.2' => false,
804
+			'5.3' => true,
805
+		),
806
+		'JSON_ERROR_DEPTH' => array(
807
+			'5.2' => false,
808
+			'5.3' => true,
809
+		),
810
+		'JSON_ERROR_NONE' => array(
811
+			'5.2' => false,
812
+			'5.3' => true,
813
+		),
814
+		'JSON_ERROR_STATE_MISMATCH' => array(
815
+			'5.2' => false,
816
+			'5.3' => true,
817
+		),
818
+		'JSON_ERROR_SYNTAX' => array(
819
+			'5.2' => false,
820
+			'5.3' => true,
821
+		),
822
+		'JSON_FORCE_OBJECT' => array(
823
+			'5.2' => false,
824
+			'5.3' => true,
825
+		),
826
+		'JSON_HEX_TAG' => array(
827
+			'5.2' => false,
828
+			'5.3' => true,
829
+		),
830
+		'JSON_HEX_AMP' => array(
831
+			'5.2' => false,
832
+			'5.3' => true,
833
+		),
834
+		'JSON_HEX_APOS' => array(
835
+			'5.2' => false,
836
+			'5.3' => true,
837
+		),
838
+		'JSON_HEX_QUOT' => array(
839
+			'5.2' => false,
840
+			'5.3' => true,
841
+		),
842
+		// LDAP:
843
+		'LDAP_OPT_NETWORK_TIMEOUT' => array(
844
+			'5.2' => false,
845
+			'5.3' => true,
846
+		),
847
+		// Libxml:
848
+		'LIBXML_LOADED_VERSION' => array(
849
+			'5.2' => false,
850
+			'5.3' => true,
851
+		),
852
+		// Math:
853
+		'PHP_ROUND_HALF_UP' => array(
854
+			'5.2' => false,
855
+			'5.3' => true,
856
+		),
857
+		'PHP_ROUND_HALF_DOWN' => array(
858
+			'5.2' => false,
859
+			'5.3' => true,
860
+		),
861
+		'PHP_ROUND_HALF_EVEN' => array(
862
+			'5.2' => false,
863
+			'5.3' => true,
864
+		),
865
+		'PHP_ROUND_HALF_ODD' => array(
866
+			'5.2' => false,
867
+			'5.3' => true,
868
+		),
869
+		// Mysqli
870
+		'MYSQLI_OPT_INT_AND_FLOAT_NATIVE' => array(
871
+			'5.2' => false,
872
+			'5.3' => true,
873
+		),
874
+		'MYSQLI_OPT_NET_CMD_BUFFER_SIZE' => array(
875
+			'5.2' => false,
876
+			'5.3' => true,
877
+		),
878
+		'MYSQLI_OPT_NET_READ_BUFFER_SIZE' => array(
879
+			'5.2' => false,
880
+			'5.3' => true,
881
+		),
882
+		'MYSQLI_OPT_SSL_VERIFY_SERVER_CERT' => array(
883
+			'5.2' => false,
884
+			'5.3' => true,
885
+		),
886
+		// OCI8:
887
+		'OCI_CRED_EXT' => array(
888
+			'5.2' => false,
889
+			'5.3' => true,
890
+		),
891
+		// PCRE:
892
+		'PREG_BAD_UTF8_OFFSET_ERROR' => array(
893
+			'5.2' => false,
894
+			'5.3' => true,
895
+		),
896
+		// PCNTL:
897
+		'BUS_ADRALN' => array(
898
+			'5.2' => false,
899
+			'5.3' => true,
900
+		),
901
+		'BUS_ADRERR' => array(
902
+			'5.2' => false,
903
+			'5.3' => true,
904
+		),
905
+		'BUS_OBJERR' => array(
906
+			'5.2' => false,
907
+			'5.3' => true,
908
+		),
909
+		'CLD_CONTIUNED' => array(
910
+			'5.2' => false,
911
+			'5.3' => true,
912
+		),
913
+		'CLD_DUMPED' => array(
914
+			'5.2' => false,
915
+			'5.3' => true,
916
+		),
917
+		'CLD_EXITED' => array(
918
+			'5.2' => false,
919
+			'5.3' => true,
920
+		),
921
+		'CLD_KILLED' => array(
922
+			'5.2' => false,
923
+			'5.3' => true,
924
+		),
925
+		'CLD_STOPPED' => array(
926
+			'5.2' => false,
927
+			'5.3' => true,
928
+		),
929
+		'CLD_TRAPPED' => array(
930
+			'5.2' => false,
931
+			'5.3' => true,
932
+		),
933
+		'FPE_FLTDIV' => array(
934
+			'5.2' => false,
935
+			'5.3' => true,
936
+		),
937
+		'FPE_FLTINV' => array(
938
+			'5.2' => false,
939
+			'5.3' => true,
940
+		),
941
+		'FPE_FLTOVF' => array(
942
+			'5.2' => false,
943
+			'5.3' => true,
944
+		),
945
+		'FPE_FLTRES' => array(
946
+			'5.2' => false,
947
+			'5.3' => true,
948
+		),
949
+		'FPE_FLTSUB' => array(
950
+			'5.2' => false,
951
+			'5.3' => true,
952
+		),
953
+		'FPE_FLTUND' => array(
954
+			'5.2' => false,
955
+			'5.3' => true,
956
+		),
957
+		'FPE_INTDIV' => array(
958
+			'5.2' => false,
959
+			'5.3' => true,
960
+		),
961
+		'FPE_INTOVF' => array(
962
+			'5.2' => false,
963
+			'5.3' => true,
964
+		),
965
+		'ILL_BADSTK' => array(
966
+			'5.2' => false,
967
+			'5.3' => true,
968
+		),
969
+		'ILL_COPROC' => array(
970
+			'5.2' => false,
971
+			'5.3' => true,
972
+		),
973
+		'ILL_ILLADR' => array(
974
+			'5.2' => false,
975
+			'5.3' => true,
976
+		),
977
+		'ILL_ILLOPC' => array(
978
+			'5.2' => false,
979
+			'5.3' => true,
980
+		),
981
+		'ILL_ILLOPN' => array(
982
+			'5.2' => false,
983
+			'5.3' => true,
984
+		),
985
+		'ILL_ILLTRP' => array(
986
+			'5.2' => false,
987
+			'5.3' => true,
988
+		),
989
+		'ILL_PRVOPC' => array(
990
+			'5.2' => false,
991
+			'5.3' => true,
992
+		),
993
+		'ILL_PRVREG' => array(
994
+			'5.2' => false,
995
+			'5.3' => true,
996
+		),
997
+		'POLL_ERR' => array(
998
+			'5.2' => false,
999
+			'5.3' => true,
1000
+		),
1001
+		'POLL_HUP' => array(
1002
+			'5.2' => false,
1003
+			'5.3' => true,
1004
+		),
1005
+		'POLL_IN' => array(
1006
+			'5.2' => false,
1007
+			'5.3' => true,
1008
+		),
1009
+		'POLL_MSG' => array(
1010
+			'5.2' => false,
1011
+			'5.3' => true,
1012
+		),
1013
+		'POLL_OUT' => array(
1014
+			'5.2' => false,
1015
+			'5.3' => true,
1016
+		),
1017
+		'POLL_PRI' => array(
1018
+			'5.2' => false,
1019
+			'5.3' => true,
1020
+		),
1021
+		'SEGV_ACCERR' => array(
1022
+			'5.2' => false,
1023
+			'5.3' => true,
1024
+		),
1025
+		'SEGV_MAPERR' => array(
1026
+			'5.2' => false,
1027
+			'5.3' => true,
1028
+		),
1029
+		'SI_ASYNCIO' => array(
1030
+			'5.2' => false,
1031
+			'5.3' => true,
1032
+		),
1033
+		'SI_KERNEL' => array(
1034
+			'5.2' => false,
1035
+			'5.3' => true,
1036
+		),
1037
+		'SI_MSGGQ' => array(
1038
+			'5.2' => false,
1039
+			'5.3' => true,
1040
+		),
1041
+		'SI_NOINFO' => array(
1042
+			'5.2' => false,
1043
+			'5.3' => true,
1044
+		),
1045
+		'SI_QUEUE' => array(
1046
+			'5.2' => false,
1047
+			'5.3' => true,
1048
+		),
1049
+		'SI_SIGIO' => array(
1050
+			'5.2' => false,
1051
+			'5.3' => true,
1052
+		),
1053
+		'SI_TIMER' => array(
1054
+			'5.2' => false,
1055
+			'5.3' => true,
1056
+		),
1057
+		'SI_TKILL' => array(
1058
+			'5.2' => false,
1059
+			'5.3' => true,
1060
+		),
1061
+		'SI_USER' => array(
1062
+			'5.2' => false,
1063
+			'5.3' => true,
1064
+		),
1065
+		'SIG_BLOCK' => array(
1066
+			'5.2' => false,
1067
+			'5.3' => true,
1068
+		),
1069
+		'SIG_SETMASK' => array(
1070
+			'5.2' => false,
1071
+			'5.3' => true,
1072
+		),
1073
+		'SIG_UNBLOCK' => array(
1074
+			'5.2' => false,
1075
+			'5.3' => true,
1076
+		),
1077
+		'TRAP_BRKPT' => array(
1078
+			'5.2' => false,
1079
+			'5.3' => true,
1080
+		),
1081
+		'TRAP_TRACE' => array(
1082
+			'5.2' => false,
1083
+			'5.3' => true,
1084
+		),
1085
+		// Tokenizer:
1086
+		'T_DIR' => array(
1087
+			'5.2' => false,
1088
+			'5.3' => true,
1089
+		),
1090
+		'T_GOTO' => array(
1091
+			'5.2' => false,
1092
+			'5.3' => true,
1093
+		),
1094
+		'T_NAMESPACE' => array(
1095
+			'5.2' => false,
1096
+			'5.3' => true,
1097
+		),
1098
+		'T_NS_C' => array(
1099
+			'5.2' => false,
1100
+			'5.3' => true,
1101
+		),
1102
+		'T_NS_SEPARATOR' => array(
1103
+			'5.2' => false,
1104
+			'5.3' => true,
1105
+		),
1106
+		'T_USE' => array(
1107
+			'5.2' => false,
1108
+			'5.3' => true,
1109
+		),
1110
+
1111
+		// OCI8:
1112
+		'OCI_NO_AUTO_COMMIT' => array(
1113
+			'5.3.1' => false,
1114
+			'5.3.2' => true,
1115
+		),
1116
+		// OpenSSL:
1117
+		'OPENSSL_TLSEXT_SERVER_NAME' => array(
1118
+			'5.3.1' => false,
1119
+			'5.3.2' => true,
1120
+		),
1121
+
1122
+		// JSON:
1123
+		'JSON_ERROR_UTF8' => array(
1124
+			'5.3.2' => false,
1125
+			'5.3.3' => true,
1126
+		),
1127
+		'JSON_NUMERIC_CHECK' => array(
1128
+			'5.3.2' => false,
1129
+			'5.3.3' => true,
1130
+		),
1131
+
1132
+		'DEBUG_BACKTRACE_IGNORE_ARGS' => array(
1133
+			'5.3.5' => false,
1134
+			'5.3.6' => true,
1135
+		),
1136
+
1137
+		'CURLINFO_REDIRECT_URL' => array(
1138
+			'5.3.6' => false,
1139
+			'5.3.7' => true,
1140
+		),
1141
+		'PHP_MANDIR' => array(
1142
+			'5.3.6' => false,
1143
+			'5.3.7' => true,
1144
+		),
1145
+
1146
+		'PHP_BINARY' => array(
1147
+			'5.3' => false,
1148
+			'5.4' => true,
1149
+		),
1150
+		'SORT_NATURAL' => array(
1151
+			'5.3' => false,
1152
+			'5.4' => true,
1153
+		),
1154
+		'SORT_FLAG_CASE' => array(
1155
+			'5.3' => false,
1156
+			'5.4' => true,
1157
+		),
1158
+		'ENT_HTML401' => array(
1159
+			'5.3' => false,
1160
+			'5.4' => true,
1161
+		),
1162
+		'ENT_XML1' => array(
1163
+			'5.3' => false,
1164
+			'5.4' => true,
1165
+		),
1166
+		'ENT_XHTML' => array(
1167
+			'5.3' => false,
1168
+			'5.4' => true,
1169
+		),
1170
+		'ENT_HTML5' => array(
1171
+			'5.3' => false,
1172
+			'5.4' => true,
1173
+		),
1174
+		'ENT_SUBSTITUTE' => array(
1175
+			'5.3' => false,
1176
+			'5.4' => true,
1177
+		),
1178
+		'ENT_DISALLOWED' => array(
1179
+			'5.3' => false,
1180
+			'5.4' => true,
1181
+		),
1182
+		'IPPROTO_IP' => array(
1183
+			'5.3' => false,
1184
+			'5.4' => true,
1185
+		),
1186
+		'IPPROTO_IPV6' => array(
1187
+			'5.3' => false,
1188
+			'5.4' => true,
1189
+		),
1190
+		'IPV6_MULTICAST_HOPS' => array(
1191
+			'5.3' => false,
1192
+			'5.4' => true,
1193
+		),
1194
+		'IPV6_MULTICAST_IF' => array(
1195
+			'5.3' => false,
1196
+			'5.4' => true,
1197
+		),
1198
+		'IPV6_MULTICAST_LOOP' => array(
1199
+			'5.3' => false,
1200
+			'5.4' => true,
1201
+		),
1202
+		'IP_MULTICAST_IF' => array(
1203
+			'5.3' => false,
1204
+			'5.4' => true,
1205
+		),
1206
+		'IP_MULTICAST_LOOP' => array(
1207
+			'5.3' => false,
1208
+			'5.4' => true,
1209
+		),
1210
+		'IP_MULTICAST_TTL' => array(
1211
+			'5.3' => false,
1212
+			'5.4' => true,
1213
+		),
1214
+		'MCAST_JOIN_GROUP' => array(
1215
+			'5.3' => false,
1216
+			'5.4' => true,
1217
+		),
1218
+		'MCAST_LEAVE_GROUP' => array(
1219
+			'5.3' => false,
1220
+			'5.4' => true,
1221
+		),
1222
+		'MCAST_BLOCK_SOURCE' => array(
1223
+			'5.3' => false,
1224
+			'5.4' => true,
1225
+		),
1226
+		'MCAST_UNBLOCK_SOURCE' => array(
1227
+			'5.3' => false,
1228
+			'5.4' => true,
1229
+		),
1230
+		'MCAST_JOIN_SOURCE_GROUP' => array(
1231
+			'5.3' => false,
1232
+			'5.4' => true,
1233
+		),
1234
+		'MCAST_LEAVE_SOURCE_GROUP' => array(
1235
+			'5.3' => false,
1236
+			'5.4' => true,
1237
+		),
1238
+		// Curl:
1239
+		'CURLOPT_MAX_RECV_SPEED_LARGE' => array(
1240
+			'5.3' => false,
1241
+			'5.4' => true,
1242
+		),
1243
+		'CURLOPT_MAX_SEND_SPEED_LARGE' => array(
1244
+			'5.3' => false,
1245
+			'5.4' => true,
1246
+		),
1247
+		// Directories:
1248
+		'SCANDIR_SORT_ASCENDING' => array(
1249
+			'5.3' => false,
1250
+			'5.4' => true,
1251
+		),
1252
+		'SCANDIR_SORT_DESCENDING' => array(
1253
+			'5.3' => false,
1254
+			'5.4' => true,
1255
+		),
1256
+		'SCANDIR_SORT_NONE' => array(
1257
+			'5.3' => false,
1258
+			'5.4' => true,
1259
+		),
1260
+		// LibXML:
1261
+		'LIBXML_HTML_NODEFDTD' => array(
1262
+			'5.3' => false,
1263
+			'5.4' => true,
1264
+		),
1265
+		'LIBXML_HTML_NOIMPLIED' => array(
1266
+			'5.3' => false,
1267
+			'5.4' => true,
1268
+		),
1269
+		'LIBXML_PEDANTIC' => array(
1270
+			'5.3' => false,
1271
+			'5.4' => true,
1272
+		),
1273
+		// OpenSSL:
1274
+		'OPENSSL_CIPHER_AES_128_CBC' => array(
1275
+			'5.3' => false,
1276
+			'5.4' => true,
1277
+		),
1278
+		'OPENSSL_CIPHER_AES_192_CBC' => array(
1279
+			'5.3' => false,
1280
+			'5.4' => true,
1281
+		),
1282
+		'OPENSSL_CIPHER_AES_256_CBC' => array(
1283
+			'5.3' => false,
1284
+			'5.4' => true,
1285
+		),
1286
+		'OPENSSL_RAW_DATA' => array(
1287
+			'5.3' => false,
1288
+			'5.4' => true,
1289
+		),
1290
+		'OPENSSL_ZERO_PADDING' => array(
1291
+			'5.3' => false,
1292
+			'5.4' => true,
1293
+		),
1294
+		// Output buffering:
1295
+		'PHP_OUTPUT_HANDLER_CLEAN' => array(
1296
+			'5.3' => false,
1297
+			'5.4' => true,
1298
+		),
1299
+		'PHP_OUTPUT_HANDLER_CLEANABLE' => array(
1300
+			'5.3' => false,
1301
+			'5.4' => true,
1302
+		),
1303
+		'PHP_OUTPUT_HANDLER_DISABLED' => array(
1304
+			'5.3' => false,
1305
+			'5.4' => true,
1306
+		),
1307
+		'PHP_OUTPUT_HANDLER_FINAL' => array(
1308
+			'5.3' => false,
1309
+			'5.4' => true,
1310
+		),
1311
+		'PHP_OUTPUT_HANDLER_FLUSH' => array(
1312
+			'5.3' => false,
1313
+			'5.4' => true,
1314
+		),
1315
+		'PHP_OUTPUT_HANDLER_FLUSHABLE' => array(
1316
+			'5.3' => false,
1317
+			'5.4' => true,
1318
+		),
1319
+		'PHP_OUTPUT_HANDLER_REMOVABLE' => array(
1320
+			'5.3' => false,
1321
+			'5.4' => true,
1322
+		),
1323
+		'PHP_OUTPUT_HANDLER_STARTED' => array(
1324
+			'5.3' => false,
1325
+			'5.4' => true,
1326
+		),
1327
+		'PHP_OUTPUT_HANDLER_STDFLAGS' => array(
1328
+			'5.3' => false,
1329
+			'5.4' => true,
1330
+		),
1331
+		'PHP_OUTPUT_HANDLER_WRITE' => array(
1332
+			'5.3' => false,
1333
+			'5.4' => true,
1334
+		),
1335
+		// Sessions:
1336
+		'PHP_SESSION_ACTIVE' => array(
1337
+			'5.3' => false,
1338
+			'5.4' => true,
1339
+		),
1340
+		'PHP_SESSION_DISABLED' => array(
1341
+			'5.3' => false,
1342
+			'5.4' => true,
1343
+		),
1344
+		'PHP_SESSION_NONE' => array(
1345
+			'5.3' => false,
1346
+			'5.4' => true,
1347
+		),
1348
+		// Streams:
1349
+		'STREAM_META_ACCESS' => array(
1350
+			'5.3' => false,
1351
+			'5.4' => true,
1352
+		),
1353
+		'STREAM_META_GROUP' => array(
1354
+			'5.3' => false,
1355
+			'5.4' => true,
1356
+		),
1357
+		'STREAM_META_GROUP_NAME' => array(
1358
+			'5.3' => false,
1359
+			'5.4' => true,
1360
+		),
1361
+		'STREAM_META_OWNER' => array(
1362
+			'5.3' => false,
1363
+			'5.4' => true,
1364
+		),
1365
+		'STREAM_META_OWNER_NAME' => array(
1366
+			'5.3' => false,
1367
+			'5.4' => true,
1368
+		),
1369
+		'STREAM_META_TOUCH' => array(
1370
+			'5.3' => false,
1371
+			'5.4' => true,
1372
+		),
1373
+		// Intl:
1374
+		'U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR' => array(
1375
+			'5.3' => false,
1376
+			'5.4' => true,
1377
+		),
1378
+		'IDNA_CHECK_BIDI' => array(
1379
+			'5.3' => false,
1380
+			'5.4' => true,
1381
+		),
1382
+		'IDNA_CHECK_CONTEXTJ' => array(
1383
+			'5.3' => false,
1384
+			'5.4' => true,
1385
+		),
1386
+		'IDNA_NONTRANSITIONAL_TO_ASCII' => array(
1387
+			'5.3' => false,
1388
+			'5.4' => true,
1389
+		),
1390
+		'IDNA_NONTRANSITIONAL_TO_UNICODE' => array(
1391
+			'5.3' => false,
1392
+			'5.4' => true,
1393
+		),
1394
+		'INTL_IDNA_VARIANT_2003' => array(
1395
+			'5.3' => false,
1396
+			'5.4' => true,
1397
+		),
1398
+		'INTL_IDNA_VARIANT_UTS46' => array(
1399
+			'5.3' => false,
1400
+			'5.4' => true,
1401
+		),
1402
+		'IDNA_ERROR_EMPTY_LABEL' => array(
1403
+			'5.3' => false,
1404
+			'5.4' => true,
1405
+		),
1406
+		'IDNA_ERROR_LABEL_TOO_LONG' => array(
1407
+			'5.3' => false,
1408
+			'5.4' => true,
1409
+		),
1410
+		'IDNA_ERROR_DOMAIN_NAME_TOO_LONG' => array(
1411
+			'5.3' => false,
1412
+			'5.4' => true,
1413
+		),
1414
+		'IDNA_ERROR_LEADING_HYPHEN' => array(
1415
+			'5.3' => false,
1416
+			'5.4' => true,
1417
+		),
1418
+		'IDNA_ERROR_TRAILING_HYPHEN' => array(
1419
+			'5.3' => false,
1420
+			'5.4' => true,
1421
+		),
1422
+		'IDNA_ERROR_HYPHEN_3_4' => array(
1423
+			'5.3' => false,
1424
+			'5.4' => true,
1425
+		),
1426
+		'IDNA_ERROR_LEADING_COMBINING_MARK' => array(
1427
+			'5.3' => false,
1428
+			'5.4' => true,
1429
+		),
1430
+		'IDNA_ERROR_DISALLOWED' => array(
1431
+			'5.3' => false,
1432
+			'5.4' => true,
1433
+		),
1434
+		'IDNA_ERROR_PUNYCODE' => array(
1435
+			'5.3' => false,
1436
+			'5.4' => true,
1437
+		),
1438
+		'IDNA_ERROR_LABEL_HAS_DOT' => array(
1439
+			'5.3' => false,
1440
+			'5.4' => true,
1441
+		),
1442
+		'IDNA_ERROR_INVALID_ACE_LABEL' => array(
1443
+			'5.3' => false,
1444
+			'5.4' => true,
1445
+		),
1446
+		'IDNA_ERROR_BIDI' => array(
1447
+			'5.3' => false,
1448
+			'5.4' => true,
1449
+		),
1450
+		'IDNA_ERROR_CONTEXTJ' => array(
1451
+			'5.3' => false,
1452
+			'5.4' => true,
1453
+		),
1454
+		// Json:
1455
+		'JSON_PRETTY_PRINT' => array(
1456
+			'5.3' => false,
1457
+			'5.4' => true,
1458
+		),
1459
+		'JSON_UNESCAPED_SLASHES' => array(
1460
+			'5.3' => false,
1461
+			'5.4' => true,
1462
+		),
1463
+		'JSON_UNESCAPED_UNICODE' => array(
1464
+			'5.3' => false,
1465
+			'5.4' => true,
1466
+		),
1467
+		'JSON_BIGINT_AS_STRING' => array(
1468
+			'5.3' => false,
1469
+			'5.4' => true,
1470
+		),
1471
+		'JSON_OBJECT_AS_ARRAY' => array(
1472
+			'5.3' => false,
1473
+			'5.4' => true,
1474
+		),
1475
+		// Snmp:
1476
+		'SNMP_OID_OUTPUT_SUFFIX' => array(
1477
+			'5.3' => false,
1478
+			'5.4' => true,
1479
+		),
1480
+		'SNMP_OID_OUTPUT_MODULE' => array(
1481
+			'5.3' => false,
1482
+			'5.4' => true,
1483
+		),
1484
+		'SNMP_OID_OUTPUT_UCD' => array(
1485
+			'5.3' => false,
1486
+			'5.4' => true,
1487
+		),
1488
+		'SNMP_OID_OUTPUT_NONE' => array(
1489
+			'5.3' => false,
1490
+			'5.4' => true,
1491
+		),
1492
+		// Tokenizer:
1493
+		'T_INSTEADOF' => array(
1494
+			'5.3' => false,
1495
+			'5.4' => true,
1496
+		),
1497
+		'T_TRAIT' => array(
1498
+			'5.3' => false,
1499
+			'5.4' => true,
1500
+		),
1501
+		'T_TRAIT_C' => array(
1502
+			'5.3' => false,
1503
+			'5.4' => true,
1504
+		),
1505
+
1506
+		// Curl:
1507
+		'CURLINFO_PRIMARY_IP' => array(
1508
+			'5.4.6' => false,
1509
+			'5.4.7' => true,
1510
+		),
1511
+		'CURLINFO_PRIMARY_PORT' => array(
1512
+			'5.4.6' => false,
1513
+			'5.4.7' => true,
1514
+		),
1515
+		'CURLINFO_LOCAL_IP' => array(
1516
+			'5.4.6' => false,
1517
+			'5.4.7' => true,
1518
+		),
1519
+		'CURLINFO_LOCAL_PORT' => array(
1520
+			'5.4.6' => false,
1521
+			'5.4.7' => true,
1522
+		),
1523
+
1524
+		// OpenSSL:
1525
+		'OPENSSL_ALGO_RMD160' => array(
1526
+			'5.4.7' => false,
1527
+			'5.4.8' => true,
1528
+		),
1529
+		'OPENSSL_ALGO_SHA224' => array(
1530
+			'5.4.7' => false,
1531
+			'5.4.8' => true,
1532
+		),
1533
+		'OPENSSL_ALGO_SHA256' => array(
1534
+			'5.4.7' => false,
1535
+			'5.4.8' => true,
1536
+		),
1537
+		'OPENSSL_ALGO_SHA384' => array(
1538
+			'5.4.7' => false,
1539
+			'5.4.8' => true,
1540
+		),
1541
+		'OPENSSL_ALGO_SHA512' => array(
1542
+			'5.4.7' => false,
1543
+			'5.4.8' => true,
1544
+		),
1545
+
1546
+		// Filter:
1547
+		'FILTER_VALIDATE_MAC' => array(
1548
+			'5.4' => false,
1549
+			'5.5' => true,
1550
+		),
1551
+		// GD
1552
+		'IMG_AFFINE_TRANSLATE' => array(
1553
+			'5.4' => false,
1554
+			'5.5' => true,
1555
+		),
1556
+		'IMG_AFFINE_SCALE' => array(
1557
+			'5.4' => false,
1558
+			'5.5' => true,
1559
+		),
1560
+		'IMG_AFFINE_ROTATE' => array(
1561
+			'5.4' => false,
1562
+			'5.5' => true,
1563
+		),
1564
+		'IMG_AFFINE_SHEAR_HORIZONTAL' => array(
1565
+			'5.4' => false,
1566
+			'5.5' => true,
1567
+		),
1568
+		'IMG_AFFINE_SHEAR_VERTICAL' => array(
1569
+			'5.4' => false,
1570
+			'5.5' => true,
1571
+		),
1572
+		'IMG_CROP_DEFAULT' => array(
1573
+			'5.4' => false,
1574
+			'5.5' => true,
1575
+		),
1576
+		'IMG_CROP_TRANSPARENT' => array(
1577
+			'5.4' => false,
1578
+			'5.5' => true,
1579
+		),
1580
+		'IMG_CROP_BLACK' => array(
1581
+			'5.4' => false,
1582
+			'5.5' => true,
1583
+		),
1584
+		'IMG_CROP_WHITE' => array(
1585
+			'5.4' => false,
1586
+			'5.5' => true,
1587
+		),
1588
+		'IMG_CROP_SIDES' => array(
1589
+			'5.4' => false,
1590
+			'5.5' => true,
1591
+		),
1592
+		'IMG_FLIP_BOTH' => array(
1593
+			'5.4' => false,
1594
+			'5.5' => true,
1595
+		),
1596
+		'IMG_FLIP_HORIZONTAL' => array(
1597
+			'5.4' => false,
1598
+			'5.5' => true,
1599
+		),
1600
+		'IMG_FLIP_VERTICAL' => array(
1601
+			'5.4' => false,
1602
+			'5.5' => true,
1603
+		),
1604
+		'IMG_BELL' => array(
1605
+			'5.4' => false,
1606
+			'5.5' => true,
1607
+		),
1608
+		'IMG_BESSEL' => array(
1609
+			'5.4' => false,
1610
+			'5.5' => true,
1611
+		),
1612
+		'IMG_BILINEAR_FIXED' => array(
1613
+			'5.4' => false,
1614
+			'5.5' => true,
1615
+		),
1616
+		'IMG_BICUBIC' => array(
1617
+			'5.4' => false,
1618
+			'5.5' => true,
1619
+		),
1620
+		'IMG_BICUBIC_FIXED' => array(
1621
+			'5.4' => false,
1622
+			'5.5' => true,
1623
+		),
1624
+		'IMG_BLACKMAN' => array(
1625
+			'5.4' => false,
1626
+			'5.5' => true,
1627
+		),
1628
+		'IMG_BOX' => array(
1629
+			'5.4' => false,
1630
+			'5.5' => true,
1631
+		),
1632
+		'IMG_BSPLINE' => array(
1633
+			'5.4' => false,
1634
+			'5.5' => true,
1635
+		),
1636
+		'IMG_CATMULLROM' => array(
1637
+			'5.4' => false,
1638
+			'5.5' => true,
1639
+		),
1640
+		'IMG_GAUSSIAN' => array(
1641
+			'5.4' => false,
1642
+			'5.5' => true,
1643
+		),
1644
+		'IMG_GENERALIZED_CUBIC' => array(
1645
+			'5.4' => false,
1646
+			'5.5' => true,
1647
+		),
1648
+		'IMG_HERMITE' => array(
1649
+			'5.4' => false,
1650
+			'5.5' => true,
1651
+		),
1652
+		'IMG_HAMMING' => array(
1653
+			'5.4' => false,
1654
+			'5.5' => true,
1655
+		),
1656
+		'IMG_HANNING' => array(
1657
+			'5.4' => false,
1658
+			'5.5' => true,
1659
+		),
1660
+		'IMG_MITCHELL' => array(
1661
+			'5.4' => false,
1662
+			'5.5' => true,
1663
+		),
1664
+		'IMG_POWER' => array(
1665
+			'5.4' => false,
1666
+			'5.5' => true,
1667
+		),
1668
+		'IMG_QUADRATIC' => array(
1669
+			'5.4' => false,
1670
+			'5.5' => true,
1671
+		),
1672
+		'IMG_SINC' => array(
1673
+			'5.4' => false,
1674
+			'5.5' => true,
1675
+		),
1676
+		'IMG_NEAREST_NEIGHBOUR' => array(
1677
+			'5.4' => false,
1678
+			'5.5' => true,
1679
+		),
1680
+		'IMG_WEIGHTED4' => array(
1681
+			'5.4' => false,
1682
+			'5.5' => true,
1683
+		),
1684
+		'IMG_TRIANGLE' => array(
1685
+			'5.4' => false,
1686
+			'5.5' => true,
1687
+		),
1688
+		// JSON:
1689
+		'JSON_ERROR_RECURSION' => array(
1690
+			'5.4' => false,
1691
+			'5.5' => true,
1692
+		),
1693
+		'JSON_ERROR_INF_OR_NAN' => array(
1694
+			'5.4' => false,
1695
+			'5.5' => true,
1696
+		),
1697
+		'JSON_ERROR_UNSUPPORTED_TYPE' => array(
1698
+			'5.4' => false,
1699
+			'5.5' => true,
1700
+		),
1701
+		'JSON_PARTIAL_OUTPUT_ON_ERROR' => array(
1702
+			'5.4' => false,
1703
+			'5.5' => true,
1704
+		),
1705
+		// MySQLi
1706
+		'MYSQLI_SERVER_PUBLIC_KEY' => array(
1707
+			'5.4' => false,
1708
+			'5.5' => true,
1709
+		),
1710
+		// Curl:
1711
+		'CURLOPT_SHARE' => array(
1712
+			'5.4' => false,
1713
+			'5.5' => true,
1714
+		),
1715
+		'CURLOPT_SSL_OPTIONS' => array(
1716
+			'5.4' => false,
1717
+			'5.5' => true,
1718
+		),
1719
+		'CURLSSLOPT_ALLOW_BEAST' => array(
1720
+			'5.4' => false,
1721
+			'5.5' => true,
1722
+		),
1723
+		'CURLOPT_USERNAME' => array(
1724
+			'5.4' => false,
1725
+			'5.5' => true,
1726
+		),
1727
+		'CURLINFO_RESPONSE_CODE' => array(
1728
+			'5.4' => false,
1729
+			'5.5' => true,
1730
+		),
1731
+		'CURLINFO_HTTP_CONNECTCODE' => array(
1732
+			'5.4' => false,
1733
+			'5.5' => true,
1734
+		),
1735
+		'CURLINFO_HTTPAUTH_AVAIL' => array(
1736
+			'5.4' => false,
1737
+			'5.5' => true,
1738
+		),
1739
+		'CURLINFO_PROXYAUTH_AVAIL' => array(
1740
+			'5.4' => false,
1741
+			'5.5' => true,
1742
+		),
1743
+		'CURLINFO_OS_ERRNO' => array(
1744
+			'5.4' => false,
1745
+			'5.5' => true,
1746
+		),
1747
+		'CURLINFO_NUM_CONNECTS' => array(
1748
+			'5.4' => false,
1749
+			'5.5' => true,
1750
+		),
1751
+		'CURLINFO_SSL_ENGINES' => array(
1752
+			'5.4' => false,
1753
+			'5.5' => true,
1754
+		),
1755
+		'CURLINFO_COOKIELIST' => array(
1756
+			'5.4' => false,
1757
+			'5.5' => true,
1758
+		),
1759
+		'CURLINFO_FTP_ENTRY_PATH' => array(
1760
+			'5.4' => false,
1761
+			'5.5' => true,
1762
+		),
1763
+		'CURLINFO_APPCONNECT_TIME' => array(
1764
+			'5.4' => false,
1765
+			'5.5' => true,
1766
+		),
1767
+		'CURLINFO_CONDITION_UNMET' => array(
1768
+			'5.4' => false,
1769
+			'5.5' => true,
1770
+		),
1771
+		'CURLINFO_RTSP_CLIENT_CSEQ' => array(
1772
+			'5.4' => false,
1773
+			'5.5' => true,
1774
+		),
1775
+		'CURLINFO_RTSP_CSEQ_RECV' => array(
1776
+			'5.4' => false,
1777
+			'5.5' => true,
1778
+		),
1779
+		'CURLINFO_RTSP_SERVER_CSEQ' => array(
1780
+			'5.4' => false,
1781
+			'5.5' => true,
1782
+		),
1783
+		'CURLINFO_RTSP_SESSION_ID' => array(
1784
+			'5.4' => false,
1785
+			'5.5' => true,
1786
+		),
1787
+		'CURLMOPT_PIPELINING' => array(
1788
+			'5.4' => false,
1789
+			'5.5' => true,
1790
+		),
1791
+		'CURLMOPT_MAXCONNECTS' => array(
1792
+			'5.4' => false,
1793
+			'5.5' => true,
1794
+		),
1795
+		'CURLPAUSE_ALL' => array(
1796
+			'5.4' => false,
1797
+			'5.5' => true,
1798
+		),
1799
+		'CURLPAUSE_CONT' => array(
1800
+			'5.4' => false,
1801
+			'5.5' => true,
1802
+		),
1803
+		'CURLPAUSE_RECV' => array(
1804
+			'5.4' => false,
1805
+			'5.5' => true,
1806
+		),
1807
+		'CURLPAUSE_RECV_CONT' => array(
1808
+			'5.4' => false,
1809
+			'5.5' => true,
1810
+		),
1811
+		'CURLPAUSE_SEND' => array(
1812
+			'5.4' => false,
1813
+			'5.5' => true,
1814
+		),
1815
+		'CURLPAUSE_SEND_CONT' => array(
1816
+			'5.4' => false,
1817
+			'5.5' => true,
1818
+		),
1819
+		// Soap:
1820
+		'SOAP_SSL_METHOD_TLS' => array(
1821
+			'5.4' => false,
1822
+			'5.5' => true,
1823
+		),
1824
+		'SOAP_SSL_METHOD_SSLv2' => array(
1825
+			'5.4' => false,
1826
+			'5.5' => true,
1827
+		),
1828
+		'SOAP_SSL_METHOD_SSLv3' => array(
1829
+			'5.4' => false,
1830
+			'5.5' => true,
1831
+		),
1832
+		'SOAP_SSL_METHOD_SSLv23' => array(
1833
+			'5.4' => false,
1834
+			'5.5' => true,
1835
+		),
1836
+		// Tokenizer:
1837
+		'T_FINALLY' => array(
1838
+			'5.4' => false,
1839
+			'5.5' => true,
1840
+		),
1841
+		'T_YIELD' => array(
1842
+			'5.4' => false,
1843
+			'5.5' => true,
1844
+		),
1845
+		// Core/Password Hashing:
1846
+		'PASSWORD_BCRYPT' => array(
1847
+			'5.4' => false,
1848
+			'5.5' => true,
1849
+		),
1850
+		'PASSWORD_DEFAULT' => array(
1851
+			'5.4' => false,
1852
+			'5.5' => true,
1853
+		),
1854
+		'PASSWORD_BCRYPT_DEFAULT_COST' => array(
1855
+			'5.4' => false,
1856
+			'5.5' => true,
1857
+		),
1858
+
1859
+
1860
+		// Libxml:
1861
+		'LIBXML_SCHEMA_CREATE' => array(
1862
+			'5.5.1' => false,
1863
+			'5.5.2' => true,
1864
+		),
1865
+
1866
+		// Curl:
1867
+		'CURL_SSLVERSION_TLSv1_0' => array(
1868
+			'5.5.18' => false,
1869
+			'5.5.19' => true,
1870
+		),
1871
+		'CURL_SSLVERSION_TLSv1_1' => array(
1872
+			'5.5.18' => false,
1873
+			'5.5.19' => true,
1874
+		),
1875
+		'CURL_SSLVERSION_TLSv1_2' => array(
1876
+			'5.5.18' => false,
1877
+			'5.5.19' => true,
1878
+		),
1879
+
1880
+		'CURLPROXY_SOCKS4A' => array(
1881
+			'5.5.22' => false,
1882
+			'5.5.23' => true,
1883
+		),
1884
+		'CURLPROXY_SOCKS5_HOSTNAME' => array(
1885
+			'5.5.22' => false,
1886
+			'5.5.23' => true,
1887
+		),
1888
+
1889
+		'CURL_VERSION_HTTP2' => array(
1890
+			'5.5.23' => false,
1891
+			'5.5.24' => true,
1892
+		),
1893
+
1894
+		'ARRAY_FILTER_USE_KEY' => array(
1895
+			'5.5' => false,
1896
+			'5.6' => true,
1897
+		),
1898
+		'ARRAY_FILTER_USE_BOTH' => array(
1899
+			'5.5' => false,
1900
+			'5.6' => true,
1901
+		),
1902
+		// LDAP:
1903
+		'LDAP_ESCAPE_DN' => array(
1904
+			'5.5' => false,
1905
+			'5.6' => true,
1906
+		),
1907
+		'LDAP_ESCAPE_FILTER' => array(
1908
+			'5.5' => false,
1909
+			'5.6' => true,
1910
+		),
1911
+		// OpenSSL:
1912
+		'OPENSSL_DEFAULT_STREAM_CIPHERS' => array(
1913
+			'5.5' => false,
1914
+			'5.6' => true,
1915
+		),
1916
+		'STREAM_CRYPTO_METHOD_ANY_CLIENT' => array(
1917
+			'5.5' => false,
1918
+			'5.6' => true,
1919
+		),
1920
+		'STREAM_CRYPTO_METHOD_ANY_SERVER' => array(
1921
+			'5.5' => false,
1922
+			'5.6' => true,
1923
+		),
1924
+		'STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT' => array(
1925
+			'5.5' => false,
1926
+			'5.6' => true,
1927
+		),
1928
+		'STREAM_CRYPTO_METHOD_TLSv1_0_SERVER' => array(
1929
+			'5.5' => false,
1930
+			'5.6' => true,
1931
+		),
1932
+		'STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT' => array(
1933
+			'5.5' => false,
1934
+			'5.6' => true,
1935
+		),
1936
+		'STREAM_CRYPTO_METHOD_TLSv1_1_SERVER' => array(
1937
+			'5.5' => false,
1938
+			'5.6' => true,
1939
+		),
1940
+		'STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT' => array(
1941
+			'5.5' => false,
1942
+			'5.6' => true,
1943
+		),
1944
+		'STREAM_CRYPTO_METHOD_TLSv1_2_SERVER' => array(
1945
+			'5.5' => false,
1946
+			'5.6' => true,
1947
+		),
1948
+		// PostgreSQL:
1949
+		'PGSQL_CONNECT_ASYNC' => array(
1950
+			'5.5' => false,
1951
+			'5.6' => true,
1952
+		),
1953
+		'PGSQL_CONNECTION_AUTH_OK' => array(
1954
+			'5.5' => false,
1955
+			'5.6' => true,
1956
+		),
1957
+		'PGSQL_CONNECTION_AWAITING_RESPONSE' => array(
1958
+			'5.5' => false,
1959
+			'5.6' => true,
1960
+		),
1961
+		'PGSQL_CONNECTION_MADE' => array(
1962
+			'5.5' => false,
1963
+			'5.6' => true,
1964
+		),
1965
+		'PGSQL_CONNECTION_SETENV' => array(
1966
+			'5.5' => false,
1967
+			'5.6' => true,
1968
+		),
1969
+		'PGSQL_CONNECTION_SSL_STARTUP' => array(
1970
+			'5.5' => false,
1971
+			'5.6' => true,
1972
+		),
1973
+		'PGSQL_CONNECTION_STARTED' => array(
1974
+			'5.5' => false,
1975
+			'5.6' => true,
1976
+		),
1977
+		'PGSQL_DML_ESCAPE' => array(
1978
+			'5.5' => false,
1979
+			'5.6' => true,
1980
+		),
1981
+		'PGSQL_POLLING_ACTIVE' => array(
1982
+			'5.5' => false,
1983
+			'5.6' => true,
1984
+		),
1985
+		'PGSQL_POLLING_FAILED' => array(
1986
+			'5.5' => false,
1987
+			'5.6' => true,
1988
+		),
1989
+		'PGSQL_POLLING_OK' => array(
1990
+			'5.5' => false,
1991
+			'5.6' => true,
1992
+		),
1993
+		'PGSQL_POLLING_READING' => array(
1994
+			'5.5' => false,
1995
+			'5.6' => true,
1996
+		),
1997
+		'PGSQL_POLLING_WRITING' => array(
1998
+			'5.5' => false,
1999
+			'5.6' => true,
2000
+		),
2001
+		// Tokenizer:
2002
+		'T_ELLIPSIS' => array(
2003
+			'5.5' => false,
2004
+			'5.6' => true,
2005
+		),
2006
+		'T_POW' => array(
2007
+			'5.5' => false,
2008
+			'5.6' => true,
2009
+		),
2010
+		'T_POW_EQUAL' => array(
2011
+			'5.5' => false,
2012
+			'5.6' => true,
2013
+		),
2014
+
2015
+		'INI_SCANNER_TYPED' => array(
2016
+			'5.6.0' => false,
2017
+			'5.6.1' => true,
2018
+		),
2019
+
2020
+		'JSON_PRESERVE_ZERO_FRACTION' => array(
2021
+			'5.6.5' => false,
2022
+			'5.6.6' => true,
2023
+		),
2024
+
2025
+		'MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT' => array(
2026
+			'5.6.15' => false,
2027
+			'5.6.16' => true,
2028
+		),
2029
+
2030
+		// GD:
2031
+		// Also introduced in 7.0.10.
2032
+		'IMG_WEBP' => array(
2033
+			'5.6.24' => false,
2034
+			'5.6.25' => true,
2035
+		),
2036
+
2037
+
2038
+		'TOKEN_PARSE' => array(
2039
+			'5.6' => false,
2040
+			'7.0' => true,
2041
+		),
2042
+		'FILTER_VALIDATE_DOMAIN' => array(
2043
+			'5.6' => false,
2044
+			'7.0' => true,
2045
+		),
2046
+		'PHP_INT_MIN' => array(
2047
+			'5.6' => false,
2048
+			'7.0' => true,
2049
+		),
2050
+		// Curl:
2051
+		'CURLPIPE_NOTHING' => array(
2052
+			'5.6' => false,
2053
+			'7.0' => true,
2054
+		),
2055
+		'CURLPIPE_HTTP1' => array(
2056
+			'5.6' => false,
2057
+			'7.0' => true,
2058
+		),
2059
+		'CURLPIPE_MULTIPLEX' => array(
2060
+			'5.6' => false,
2061
+			'7.0' => true,
2062
+		),
2063
+		// JSON:
2064
+		'JSON_ERROR_INVALID_PROPERTY_NAME' => array(
2065
+			'5.6' => false,
2066
+			'7.0' => true,
2067
+		),
2068
+		'JSON_ERROR_UTF16' => array(
2069
+			'5.6' => false,
2070
+			'7.0' => true,
2071
+		),
2072
+		// LibXML:
2073
+		'LIBXML_BIGLINES' => array(
2074
+			'5.6' => false,
2075
+			'7.0' => true,
2076
+		),
2077
+		// PCRE:
2078
+		'PREG_JIT_STACKLIMIT_ERROR' => array(
2079
+			'5.6' => false,
2080
+			'7.0' => true,
2081
+		),
2082
+		// POSIX:
2083
+		'POSIX_RLIMIT_AS' => array(
2084
+			'5.6' => false,
2085
+			'7.0' => true,
2086
+		),
2087
+		'POSIX_RLIMIT_CORE' => array(
2088
+			'5.6' => false,
2089
+			'7.0' => true,
2090
+		),
2091
+		'POSIX_RLIMIT_CPU' => array(
2092
+			'5.6' => false,
2093
+			'7.0' => true,
2094
+		),
2095
+		'POSIX_RLIMIT_DATA' => array(
2096
+			'5.6' => false,
2097
+			'7.0' => true,
2098
+		),
2099
+		'POSIX_RLIMIT_FSIZE' => array(
2100
+			'5.6' => false,
2101
+			'7.0' => true,
2102
+		),
2103
+		'POSIX_RLIMIT_LOCKS' => array(
2104
+			'5.6' => false,
2105
+			'7.0' => true,
2106
+		),
2107
+		'POSIX_RLIMIT_MEMLOCK' => array(
2108
+			'5.6' => false,
2109
+			'7.0' => true,
2110
+		),
2111
+		'POSIX_RLIMIT_MSGQUEUE' => array(
2112
+			'5.6' => false,
2113
+			'7.0' => true,
2114
+		),
2115
+		'POSIX_RLIMIT_NICE' => array(
2116
+			'5.6' => false,
2117
+			'7.0' => true,
2118
+		),
2119
+		'POSIX_RLIMIT_NOFILE' => array(
2120
+			'5.6' => false,
2121
+			'7.0' => true,
2122
+		),
2123
+		'POSIX_RLIMIT_NPROC' => array(
2124
+			'5.6' => false,
2125
+			'7.0' => true,
2126
+		),
2127
+		'POSIX_RLIMIT_RSS' => array(
2128
+			'5.6' => false,
2129
+			'7.0' => true,
2130
+		),
2131
+		'POSIX_RLIMIT_RTPRIO' => array(
2132
+			'5.6' => false,
2133
+			'7.0' => true,
2134
+		),
2135
+		'POSIX_RLIMIT_RTTIME' => array(
2136
+			'5.6' => false,
2137
+			'7.0' => true,
2138
+		),
2139
+		'POSIX_RLIMIT_SIGPENDING' => array(
2140
+			'5.6' => false,
2141
+			'7.0' => true,
2142
+		),
2143
+		'POSIX_RLIMIT_STACK' => array(
2144
+			'5.6' => false,
2145
+			'7.0' => true,
2146
+		),
2147
+		'POSIX_RLIMIT_INFINITY' => array(
2148
+			'5.6' => false,
2149
+			'7.0' => true,
2150
+		),
2151
+		// Tokenizer:
2152
+		'T_COALESCE' => array(
2153
+			'5.6' => false,
2154
+			'7.0' => true,
2155
+		),
2156
+		'T_SPACESHIP' => array(
2157
+			'5.6' => false,
2158
+			'7.0' => true,
2159
+		),
2160
+		'T_YIELD_FROM' => array(
2161
+			'5.6' => false,
2162
+			'7.0' => true,
2163
+		),
2164
+
2165
+		// Zlib:
2166
+		// The first three are in the PHP 5.4 changelog, but the Extension constant page says 7.0.
2167
+		'ZLIB_ENCODING_RAW' => array(
2168
+			'5.6' => false,
2169
+			'7.0' => true,
2170
+		),
2171
+		'ZLIB_ENCODING_DEFLATE' => array(
2172
+			'5.6' => false,
2173
+			'7.0' => true,
2174
+		),
2175
+		'ZLIB_ENCODING_GZIP' => array(
2176
+			'5.6' => false,
2177
+			'7.0' => true,
2178
+		),
2179
+		'ZLIB_FILTERED' => array(
2180
+			'5.6' => false,
2181
+			'7.0' => true,
2182
+		),
2183
+		'ZLIB_HUFFMAN_ONLY' => array(
2184
+			'5.6' => false,
2185
+			'7.0' => true,
2186
+		),
2187
+		'ZLIB_FIXED' => array(
2188
+			'5.6' => false,
2189
+			'7.0' => true,
2190
+		),
2191
+		'ZLIB_RLE' => array(
2192
+			'5.6' => false,
2193
+			'7.0' => true,
2194
+		),
2195
+		'ZLIB_DEFAULT_STRATEGY' => array(
2196
+			'5.6' => false,
2197
+			'7.0' => true,
2198
+		),
2199
+		'ZLIB_BLOCK' => array(
2200
+			'5.6' => false,
2201
+			'7.0' => true,
2202
+		),
2203
+		'ZLIB_FINISH' => array(
2204
+			'5.6' => false,
2205
+			'7.0' => true,
2206
+		),
2207
+		'ZLIB_FULL_FLUSH' => array(
2208
+			'5.6' => false,
2209
+			'7.0' => true,
2210
+		),
2211
+		'ZLIB_NO_FLUSH' => array(
2212
+			'5.6' => false,
2213
+			'7.0' => true,
2214
+		),
2215
+		'ZLIB_PARTIAL_FLUSH' => array(
2216
+			'5.6' => false,
2217
+			'7.0' => true,
2218
+		),
2219
+		'ZLIB_SYNC_FLUSH' => array(
2220
+			'5.6' => false,
2221
+			'7.0' => true,
2222
+		),
2223
+
2224
+		'CURL_HTTP_VERSION_2' => array(
2225
+			'7.0.6' => false,
2226
+			'7.0.7' => true,
2227
+		),
2228
+		'CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE' => array(
2229
+			'7.0.6' => false,
2230
+			'7.0.7' => true,
2231
+		),
2232
+		'CURL_HTTP_VERSION_2TLS' => array(
2233
+			'7.0.6' => false,
2234
+			'7.0.7' => true,
2235
+		),
2236
+		'CURL_REDIR_POST_301' => array(
2237
+			'7.0.6' => false,
2238
+			'7.0.7' => true,
2239
+		),
2240
+		'CURL_REDIR_POST_302' => array(
2241
+			'7.0.6' => false,
2242
+			'7.0.7' => true,
2243
+		),
2244
+		'CURL_REDIR_POST_303' => array(
2245
+			'7.0.6' => false,
2246
+			'7.0.7' => true,
2247
+		),
2248
+		'CURL_REDIR_POST_ALL' => array(
2249
+			'7.0.6' => false,
2250
+			'7.0.7' => true,
2251
+		),
2252
+		'CURL_VERSION_KERBEROS5' => array(
2253
+			'7.0.6' => false,
2254
+			'7.0.7' => true,
2255
+		),
2256
+		'CURL_VERSION_PSL' => array(
2257
+			'7.0.6' => false,
2258
+			'7.0.7' => true,
2259
+		),
2260
+		'CURL_VERSION_UNIX_SOCKETS' => array(
2261
+			'7.0.6' => false,
2262
+			'7.0.7' => true,
2263
+		),
2264
+		'CURLAUTH_NEGOTIATE' => array(
2265
+			'7.0.6' => false,
2266
+			'7.0.7' => true,
2267
+		),
2268
+		'CURLAUTH_NTLM_WB' => array(
2269
+			'7.0.6' => false,
2270
+			'7.0.7' => true,
2271
+		),
2272
+		'CURLFTP_CREATE_DIR' => array(
2273
+			'7.0.6' => false,
2274
+			'7.0.7' => true,
2275
+		),
2276
+		'CURLFTP_CREATE_DIR_NONE' => array(
2277
+			'7.0.6' => false,
2278
+			'7.0.7' => true,
2279
+		),
2280
+		'CURLFTP_CREATE_DIR_RETRY' => array(
2281
+			'7.0.6' => false,
2282
+			'7.0.7' => true,
2283
+		),
2284
+		'CURLHEADER_SEPARATE' => array(
2285
+			'7.0.6' => false,
2286
+			'7.0.7' => true,
2287
+		),
2288
+		'CURLHEADER_UNIFIED' => array(
2289
+			'7.0.6' => false,
2290
+			'7.0.7' => true,
2291
+		),
2292
+		'CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE' => array(
2293
+			'7.0.6' => false,
2294
+			'7.0.7' => true,
2295
+		),
2296
+		'CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE' => array(
2297
+			'7.0.6' => false,
2298
+			'7.0.7' => true,
2299
+		),
2300
+		'CURLMOPT_MAX_HOST_CONNECTIONS' => array(
2301
+			'7.0.6' => false,
2302
+			'7.0.7' => true,
2303
+		),
2304
+		'CURLMOPT_MAX_PIPELINE_LENGTH' => array(
2305
+			'7.0.6' => false,
2306
+			'7.0.7' => true,
2307
+		),
2308
+		'CURLMOPT_MAX_TOTAL_CONNECTIONS' => array(
2309
+			'7.0.6' => false,
2310
+			'7.0.7' => true,
2311
+		),
2312
+		'CURLOPT_CONNECT_TO' => array(
2313
+			'7.0.6' => false,
2314
+			'7.0.7' => true,
2315
+		),
2316
+		'CURLOPT_DEFAULT_PROTOCOL' => array(
2317
+			'7.0.6' => false,
2318
+			'7.0.7' => true,
2319
+		),
2320
+		'CURLOPT_DNS_INTERFACE' => array(
2321
+			'7.0.6' => false,
2322
+			'7.0.7' => true,
2323
+		),
2324
+		'CURLOPT_DNS_LOCAL_IP4' => array(
2325
+			'7.0.6' => false,
2326
+			'7.0.7' => true,
2327
+		),
2328
+		'CURLOPT_DNS_LOCAL_IP6' => array(
2329
+			'7.0.6' => false,
2330
+			'7.0.7' => true,
2331
+		),
2332
+		'CURLOPT_EXPECT_100_TIMEOUT_MS' => array(
2333
+			'7.0.6' => false,
2334
+			'7.0.7' => true,
2335
+		),
2336
+		'CURLOPT_HEADEROPT' => array(
2337
+			'7.0.6' => false,
2338
+			'7.0.7' => true,
2339
+		),
2340
+		'CURLOPT_LOGIN_OPTIONS' => array(
2341
+			'7.0.6' => false,
2342
+			'7.0.7' => true,
2343
+		),
2344
+		'CURLOPT_PATH_AS_IS' => array(
2345
+			'7.0.6' => false,
2346
+			'7.0.7' => true,
2347
+		),
2348
+		'CURLOPT_PINNEDPUBLICKEY' => array(
2349
+			'7.0.6' => false,
2350
+			'7.0.7' => true,
2351
+		),
2352
+		'CURLOPT_PIPEWAIT' => array(
2353
+			'7.0.6' => false,
2354
+			'7.0.7' => true,
2355
+		),
2356
+		'CURLOPT_PROXY_SERVICE_NAME' => array(
2357
+			'7.0.6' => false,
2358
+			'7.0.7' => true,
2359
+		),
2360
+		'CURLOPT_PROXYHEADER' => array(
2361
+			'7.0.6' => false,
2362
+			'7.0.7' => true,
2363
+		),
2364
+		'CURLOPT_SASL_IR' => array(
2365
+			'7.0.6' => false,
2366
+			'7.0.7' => true,
2367
+		),
2368
+		'CURLOPT_SERVICE_NAME' => array(
2369
+			'7.0.6' => false,
2370
+			'7.0.7' => true,
2371
+		),
2372
+		'CURLOPT_SSL_ENABLE_ALPN' => array(
2373
+			'7.0.6' => false,
2374
+			'7.0.7' => true,
2375
+		),
2376
+		'CURLOPT_SSL_ENABLE_NPN' => array(
2377
+			'7.0.6' => false,
2378
+			'7.0.7' => true,
2379
+		),
2380
+		'CURLOPT_SSL_FALSESTART' => array(
2381
+			'7.0.6' => false,
2382
+			'7.0.7' => true,
2383
+		),
2384
+		'CURLOPT_SSL_VERIFYSTATUS' => array(
2385
+			'7.0.6' => false,
2386
+			'7.0.7' => true,
2387
+		),
2388
+		'CURLOPT_STREAM_WEIGHT' => array(
2389
+			'7.0.6' => false,
2390
+			'7.0.7' => true,
2391
+		),
2392
+		'CURLOPT_TCP_FASTOPEN' => array(
2393
+			'7.0.6' => false,
2394
+			'7.0.7' => true,
2395
+		),
2396
+		'CURLOPT_TFTP_NO_OPTIONS' => array(
2397
+			'7.0.6' => false,
2398
+			'7.0.7' => true,
2399
+		),
2400
+		'CURLOPT_UNIX_SOCKET_PATH' => array(
2401
+			'7.0.6' => false,
2402
+			'7.0.7' => true,
2403
+		),
2404
+		'CURLOPT_XOAUTH2_BEARER' => array(
2405
+			'7.0.6' => false,
2406
+			'7.0.7' => true,
2407
+		),
2408
+		'CURLPROTO_SMB' => array(
2409
+			'7.0.6' => false,
2410
+			'7.0.7' => true,
2411
+		),
2412
+		'CURLPROTO_SMBS' => array(
2413
+			'7.0.6' => false,
2414
+			'7.0.7' => true,
2415
+		),
2416
+		'CURLPROXY_HTTP_1_0' => array(
2417
+			'7.0.6' => false,
2418
+			'7.0.7' => true,
2419
+		),
2420
+		'CURLSSH_AUTH_AGENT' => array(
2421
+			'7.0.6' => false,
2422
+			'7.0.7' => true,
2423
+		),
2424
+		'CURLSSLOPT_NO_REVOKE' => array(
2425
+			'7.0.6' => false,
2426
+			'7.0.7' => true,
2427
+		),
2428
+
2429
+		'PHP_FD_SETSIZE' => array(
2430
+			'7.0' => false,
2431
+			'7.1' => true,
2432
+		),
2433
+		// Curl:
2434
+		'CURLMOPT_PUSHFUNCTION' => array(
2435
+			'7.0' => false,
2436
+			'7.1' => true,
2437
+		),
2438
+		'CURL_PUSH_OK' => array(
2439
+			'7.0' => false,
2440
+			'7.1' => true,
2441
+		),
2442
+		'CURL_PUSH_DENY' => array(
2443
+			'7.0' => false,
2444
+			'7.1' => true,
2445
+		),
2446
+		// Filter:
2447
+		'FILTER_FLAG_EMAIL_UNICODE' => array(
2448
+			'7.0' => false,
2449
+			'7.1' => true,
2450
+		),
2451
+		// GD:
2452
+		'IMAGETYPE_WEBP' => array(
2453
+			'7.0' => false,
2454
+			'7.1' => true,
2455
+		),
2456
+		// Json:
2457
+		'JSON_UNESCAPED_LINE_TERMINATORS' => array(
2458
+			'7.0' => false,
2459
+			'7.1' => true,
2460
+		),
2461
+		// LDAP:
2462
+		'LDAP_OPT_X_SASL_NOCANON' => array(
2463
+			'7.0' => false,
2464
+			'7.1' => true,
2465
+		),
2466
+		'LDAP_OPT_X_SASL_USERNAME' => array(
2467
+			'7.0' => false,
2468
+			'7.1' => true,
2469
+		),
2470
+		'LDAP_OPT_X_TLS_CACERTDIR' => array(
2471
+			'7.0' => false,
2472
+			'7.1' => true,
2473
+		),
2474
+		'LDAP_OPT_X_TLS_CACERTFILE' => array(
2475
+			'7.0' => false,
2476
+			'7.1' => true,
2477
+		),
2478
+		'LDAP_OPT_X_TLS_CERTFILE' => array(
2479
+			'7.0' => false,
2480
+			'7.1' => true,
2481
+		),
2482
+		'LDAP_OPT_X_TLS_CIPHER_SUITE' => array(
2483
+			'7.0' => false,
2484
+			'7.1' => true,
2485
+		),
2486
+		'LDAP_OPT_X_TLS_KEYFILE' => array(
2487
+			'7.0' => false,
2488
+			'7.1' => true,
2489
+		),
2490
+		'LDAP_OPT_X_TLS_RANDOM_FILE' => array(
2491
+			'7.0' => false,
2492
+			'7.1' => true,
2493
+		),
2494
+		'LDAP_OPT_X_TLS_CRLCHECK' => array(
2495
+			'7.0' => false,
2496
+			'7.1' => true,
2497
+		),
2498
+		'LDAP_OPT_X_TLS_CRL_NONE' => array(
2499
+			'7.0' => false,
2500
+			'7.1' => true,
2501
+		),
2502
+		'LDAP_OPT_X_TLS_CRL_PEER' => array(
2503
+			'7.0' => false,
2504
+			'7.1' => true,
2505
+		),
2506
+		'LDAP_OPT_X_TLS_CRL_ALL' => array(
2507
+			'7.0' => false,
2508
+			'7.1' => true,
2509
+		),
2510
+		'LDAP_OPT_X_TLS_DHFILE' => array(
2511
+			'7.0' => false,
2512
+			'7.1' => true,
2513
+		),
2514
+		'LDAP_OPT_X_TLS_CRLFILE' => array(
2515
+			'7.0' => false,
2516
+			'7.1' => true,
2517
+		),
2518
+		'LDAP_OPT_X_TLS_PROTOCOL_MIN' => array(
2519
+			'7.0' => false,
2520
+			'7.1' => true,
2521
+		),
2522
+		'LDAP_OPT_X_TLS_PROTOCOL_SSL2' => array(
2523
+			'7.0' => false,
2524
+			'7.1' => true,
2525
+		),
2526
+		'LDAP_OPT_X_TLS_PROTOCOL_SSL3' => array(
2527
+			'7.0' => false,
2528
+			'7.1' => true,
2529
+		),
2530
+		'LDAP_OPT_X_TLS_PROTOCOL_TLS1_0' => array(
2531
+			'7.0' => false,
2532
+			'7.1' => true,
2533
+		),
2534
+		'LDAP_OPT_X_TLS_PROTOCOL_TLS1_1' => array(
2535
+			'7.0' => false,
2536
+			'7.1' => true,
2537
+		),
2538
+		'LDAP_OPT_X_TLS_PROTOCOL_TLS1_2' => array(
2539
+			'7.0' => false,
2540
+			'7.1' => true,
2541
+		),
2542
+		'LDAP_OPT_X_TLS_PACKAGE' => array(
2543
+			'7.0' => false,
2544
+			'7.1' => true,
2545
+		),
2546
+		'LDAP_OPT_X_KEEPALIVE_IDLE' => array(
2547
+			'7.0' => false,
2548
+			'7.1' => true,
2549
+		),
2550
+		'LDAP_OPT_X_KEEPALIVE_PROBES' => array(
2551
+			'7.0' => false,
2552
+			'7.1' => true,
2553
+		),
2554
+		'LDAP_OPT_X_KEEPALIVE_INTERVAL' => array(
2555
+			'7.0' => false,
2556
+			'7.1' => true,
2557
+		),
2558
+		// PostgreSQL:
2559
+		'PGSQL_NOTICE_LAST' => array(
2560
+			'7.0' => false,
2561
+			'7.1' => true,
2562
+		),
2563
+		'PGSQL_NOTICE_ALL' => array(
2564
+			'7.0' => false,
2565
+			'7.1' => true,
2566
+		),
2567
+		'PGSQL_NOTICE_CLEAR' => array(
2568
+			'7.0' => false,
2569
+			'7.1' => true,
2570
+		),
2571
+		// SPL:
2572
+		'MT_RAND_PHP' => array(
2573
+			'7.0' => false,
2574
+			'7.1' => true,
2575
+		),
2576
+
2577
+		// SQLite3:
2578
+		'SQLITE3_DETERMINISTIC' => array(
2579
+			'7.1.3' => false,
2580
+			'7.1.4' => true,
2581
+		),
2582
+
2583
+		// Core:
2584
+		'PHP_OS_FAMILY' => array(
2585
+			'7.1' => false,
2586
+			'7.2' => true,
2587
+		),
2588
+		'PHP_FLOAT_DIG' => array(
2589
+			'7.1' => false,
2590
+			'7.2' => true,
2591
+		),
2592
+		'PHP_FLOAT_EPSILON' => array(
2593
+			'7.1' => false,
2594
+			'7.2' => true,
2595
+		),
2596
+		'PHP_FLOAT_MIN' => array(
2597
+			'7.1' => false,
2598
+			'7.2' => true,
2599
+		),
2600
+		'PHP_FLOAT_MAX' => array(
2601
+			'7.1' => false,
2602
+			'7.2' => true,
2603
+		),
2604
+
2605
+		// Core/Password Hashing:
2606
+		'PASSWORD_ARGON2I' => array(
2607
+			'7.1' => false,
2608
+			'7.2' => true,
2609
+		),
2610
+		'PASSWORD_ARGON2_DEFAULT_MEMORY_COST' => array(
2611
+			'7.1' => false,
2612
+			'7.2' => true,
2613
+		),
2614
+		'PASSWORD_ARGON2_DEFAULT_TIME_COST' => array(
2615
+			'7.1' => false,
2616
+			'7.2' => true,
2617
+		),
2618
+		'PASSWORD_ARGON2_DEFAULT_THREADS' => array(
2619
+			'7.1' => false,
2620
+			'7.2' => true,
2621
+		),
2622
+
2623
+		// Fileinfo:
2624
+		'FILEINFO_EXTENSION' => array(
2625
+			'7.1' => false,
2626
+			'7.2' => true,
2627
+		),
2628
+
2629
+		// GD:
2630
+		'IMG_EFFECT_MULTIPLY' => array(
2631
+			'7.1' => false,
2632
+			'7.2' => true,
2633
+		),
2634
+		'IMG_BMP' => array(
2635
+			'7.1' => false,
2636
+			'7.2' => true,
2637
+		),
2638
+
2639
+		// JSON:
2640
+		'JSON_INVALID_UTF8_IGNORE' => array(
2641
+			'7.1' => false,
2642
+			'7.2' => true,
2643
+		),
2644
+		'JSON_INVALID_UTF8_SUBSTITUTE' => array(
2645
+			'7.1' => false,
2646
+			'7.2' => true,
2647
+		),
2648
+
2649
+		// LDAP:
2650
+		'LDAP_EXOP_START_TLS' => array(
2651
+			'7.1' => false,
2652
+			'7.2' => true,
2653
+		),
2654
+		'LDAP_EXOP_MODIFY_PASSWD' => array(
2655
+			'7.1' => false,
2656
+			'7.2' => true,
2657
+		),
2658
+		'LDAP_EXOP_REFRESH' => array(
2659
+			'7.1' => false,
2660
+			'7.2' => true,
2661
+		),
2662
+		'LDAP_EXOP_WHO_AM_I' => array(
2663
+			'7.1' => false,
2664
+			'7.2' => true,
2665
+		),
2666
+		'LDAP_EXOP_TURN' => array(
2667
+			'7.1' => false,
2668
+			'7.2' => true,
2669
+		),
2670
+
2671
+		// PCRE:
2672
+		'PREG_UNMATCHED_AS_NULL' => array(
2673
+			'7.1' => false,
2674
+			'7.2' => true,
2675
+		),
2676
+
2677
+		// Sodium:
2678
+		'SODIUM_LIBRARY_VERSION' => array(
2679
+			'7.1' => false,
2680
+			'7.2' => true,
2681
+		),
2682
+		'SODIUM_LIBRARY_MAJOR_VERSION' => array(
2683
+			'7.1' => false,
2684
+			'7.2' => true,
2685
+		),
2686
+		'SODIUM_LIBRARY_MINOR_VERSION' => array(
2687
+			'7.1' => false,
2688
+			'7.2' => true,
2689
+		),
2690
+		'SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES' => array(
2691
+			'7.1' => false,
2692
+			'7.2' => true,
2693
+		),
2694
+		'SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES' => array(
2695
+			'7.1' => false,
2696
+			'7.2' => true,
2697
+		),
2698
+		'SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES' => array(
2699
+			'7.1' => false,
2700
+			'7.2' => true,
2701
+		),
2702
+		'SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES' => array(
2703
+			'7.1' => false,
2704
+			'7.2' => true,
2705
+		),
2706
+		'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES' => array(
2707
+			'7.1' => false,
2708
+			'7.2' => true,
2709
+		),
2710
+		'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES' => array(
2711
+			'7.1' => false,
2712
+			'7.2' => true,
2713
+		),
2714
+		'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES' => array(
2715
+			'7.1' => false,
2716
+			'7.2' => true,
2717
+		),
2718
+		'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES' => array(
2719
+			'7.1' => false,
2720
+			'7.2' => true,
2721
+		),
2722
+		'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES' => array(
2723
+			'7.1' => false,
2724
+			'7.2' => true,
2725
+		),
2726
+		'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES' => array(
2727
+			'7.1' => false,
2728
+			'7.2' => true,
2729
+		),
2730
+		'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES' => array(
2731
+			'7.1' => false,
2732
+			'7.2' => true,
2733
+		),
2734
+		'SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES' => array(
2735
+			'7.1' => false,
2736
+			'7.2' => true,
2737
+		),
2738
+		'SODIUM_CRYPTO_AUTH_BYTES' => array(
2739
+			'7.1' => false,
2740
+			'7.2' => true,
2741
+		),
2742
+		'SODIUM_CRYPTO_AUTH_KEYBYTES' => array(
2743
+			'7.1' => false,
2744
+			'7.2' => true,
2745
+		),
2746
+		'SODIUM_CRYPTO_BOX_SEALBYTES' => array(
2747
+			'7.1' => false,
2748
+			'7.2' => true,
2749
+		),
2750
+		'SODIUM_CRYPTO_BOX_SECRETKEYBYTES' => array(
2751
+			'7.1' => false,
2752
+			'7.2' => true,
2753
+		),
2754
+		'SODIUM_CRYPTO_BOX_PUBLICKEYBYTES' => array(
2755
+			'7.1' => false,
2756
+			'7.2' => true,
2757
+		),
2758
+		'SODIUM_CRYPTO_BOX_KEYPAIRBYTES' => array(
2759
+			'7.1' => false,
2760
+			'7.2' => true,
2761
+		),
2762
+		'SODIUM_CRYPTO_BOX_MACBYTES' => array(
2763
+			'7.1' => false,
2764
+			'7.2' => true,
2765
+		),
2766
+		'SODIUM_CRYPTO_BOX_NONCEBYTES' => array(
2767
+			'7.1' => false,
2768
+			'7.2' => true,
2769
+		),
2770
+		'SODIUM_CRYPTO_BOX_SEEDBYTES' => array(
2771
+			'7.1' => false,
2772
+			'7.2' => true,
2773
+		),
2774
+		'SODIUM_CRYPTO_KDF_BYTES_MIN' => array(
2775
+			'7.1' => false,
2776
+			'7.2' => true,
2777
+		),
2778
+		'SODIUM_CRYPTO_KDF_BYTES_MAX' => array(
2779
+			'7.1' => false,
2780
+			'7.2' => true,
2781
+		),
2782
+		'SODIUM_CRYPTO_KDF_CONTEXTBYTES' => array(
2783
+			'7.1' => false,
2784
+			'7.2' => true,
2785
+		),
2786
+		'SODIUM_CRYPTO_KDF_KEYBYTES' => array(
2787
+			'7.1' => false,
2788
+			'7.2' => true,
2789
+		),
2790
+		'SODIUM_CRYPTO_KX_SEEDBYTES' => array(
2791
+			'7.1' => false,
2792
+			'7.2' => true,
2793
+		),
2794
+		'SODIUM_CRYPTO_KX_SESSIONKEYBYTES' => array(
2795
+			'7.1' => false,
2796
+			'7.2' => true,
2797
+		),
2798
+		'SODIUM_CRYPTO_KX_PUBLICKEYBYTES' => array(
2799
+			'7.1' => false,
2800
+			'7.2' => true,
2801
+		),
2802
+		'SODIUM_CRYPTO_KX_SECRETKEYBYTES' => array(
2803
+			'7.1' => false,
2804
+			'7.2' => true,
2805
+		),
2806
+		'SODIUM_CRYPTO_KX_KEYPAIRBYTES' => array(
2807
+			'7.1' => false,
2808
+			'7.2' => true,
2809
+		),
2810
+		'SODIUM_CRYPTO_GENERICHASH_BYTES' => array(
2811
+			'7.1' => false,
2812
+			'7.2' => true,
2813
+		),
2814
+		'SODIUM_CRYPTO_GENERICHASH_BYTES_MIN' => array(
2815
+			'7.1' => false,
2816
+			'7.2' => true,
2817
+		),
2818
+		'SODIUM_CRYPTO_GENERICHASH_BYTES_MAX' => array(
2819
+			'7.1' => false,
2820
+			'7.2' => true,
2821
+		),
2822
+		'SODIUM_CRYPTO_GENERICHASH_KEYBYTES' => array(
2823
+			'7.1' => false,
2824
+			'7.2' => true,
2825
+		),
2826
+		'SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN' => array(
2827
+			'7.1' => false,
2828
+			'7.2' => true,
2829
+		),
2830
+		'SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX' => array(
2831
+			'7.1' => false,
2832
+			'7.2' => true,
2833
+		),
2834
+		'SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13' => array(
2835
+			'7.1' => false,
2836
+			'7.2' => true,
2837
+		),
2838
+		'SODIUM_CRYPTO_PWHASH_ALG_DEFAULT' => array(
2839
+			'7.1' => false,
2840
+			'7.2' => true,
2841
+		),
2842
+		'SODIUM_CRYPTO_PWHASH_SALTBYTES' => array(
2843
+			'7.1' => false,
2844
+			'7.2' => true,
2845
+		),
2846
+		'SODIUM_CRYPTO_PWHASH_STRPREFIX' => array(
2847
+			'7.1' => false,
2848
+			'7.2' => true,
2849
+		),
2850
+		'SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE' => array(
2851
+			'7.1' => false,
2852
+			'7.2' => true,
2853
+		),
2854
+		'SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE' => array(
2855
+			'7.1' => false,
2856
+			'7.2' => true,
2857
+		),
2858
+		'SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE' => array(
2859
+			'7.1' => false,
2860
+			'7.2' => true,
2861
+		),
2862
+		'SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE' => array(
2863
+			'7.1' => false,
2864
+			'7.2' => true,
2865
+		),
2866
+		'SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE' => array(
2867
+			'7.1' => false,
2868
+			'7.2' => true,
2869
+		),
2870
+		'SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE' => array(
2871
+			'7.1' => false,
2872
+			'7.2' => true,
2873
+		),
2874
+		'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES' => array(
2875
+			'7.1' => false,
2876
+			'7.2' => true,
2877
+		),
2878
+		'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX' => array(
2879
+			'7.1' => false,
2880
+			'7.2' => true,
2881
+		),
2882
+		'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE' => array(
2883
+			'7.1' => false,
2884
+			'7.2' => true,
2885
+		),
2886
+		'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE' => array(
2887
+			'7.1' => false,
2888
+			'7.2' => true,
2889
+		),
2890
+		'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE' => array(
2891
+			'7.1' => false,
2892
+			'7.2' => true,
2893
+		),
2894
+		'SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE' => array(
2895
+			'7.1' => false,
2896
+			'7.2' => true,
2897
+		),
2898
+		'SODIUM_CRYPTO_SCALARMULT_BYTES' => array(
2899
+			'7.1' => false,
2900
+			'7.2' => true,
2901
+		),
2902
+		'SODIUM_CRYPTO_SCALARMULT_SCALARBYTES' => array(
2903
+			'7.1' => false,
2904
+			'7.2' => true,
2905
+		),
2906
+		'SODIUM_CRYPTO_SHORTHASH_BYTES' => array(
2907
+			'7.1' => false,
2908
+			'7.2' => true,
2909
+		),
2910
+		'SODIUM_CRYPTO_SHORTHASH_KEYBYTES' => array(
2911
+			'7.1' => false,
2912
+			'7.2' => true,
2913
+		),
2914
+		'SODIUM_CRYPTO_SECRETBOX_KEYBYTES' => array(
2915
+			'7.1' => false,
2916
+			'7.2' => true,
2917
+		),
2918
+		'SODIUM_CRYPTO_SECRETBOX_MACBYTES' => array(
2919
+			'7.1' => false,
2920
+			'7.2' => true,
2921
+		),
2922
+		'SODIUM_CRYPTO_SECRETBOX_NONCEBYTES' => array(
2923
+			'7.1' => false,
2924
+			'7.2' => true,
2925
+		),
2926
+		'SODIUM_CRYPTO_SIGN_BYTES' => array(
2927
+			'7.1' => false,
2928
+			'7.2' => true,
2929
+		),
2930
+		'SODIUM_CRYPTO_SIGN_SEEDBYTES' => array(
2931
+			'7.1' => false,
2932
+			'7.2' => true,
2933
+		),
2934
+		'SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES' => array(
2935
+			'7.1' => false,
2936
+			'7.2' => true,
2937
+		),
2938
+		'SODIUM_CRYPTO_SIGN_SECRETKEYBYTES' => array(
2939
+			'7.1' => false,
2940
+			'7.2' => true,
2941
+		),
2942
+		'SODIUM_CRYPTO_SIGN_KEYPAIRBYTES' => array(
2943
+			'7.1' => false,
2944
+			'7.2' => true,
2945
+		),
2946
+		'SODIUM_CRYPTO_STREAM_NONCEBYTES' => array(
2947
+			'7.1' => false,
2948
+			'7.2' => true,
2949
+		),
2950
+		'SODIUM_CRYPTO_STREAM_KEYBYTES' => array(
2951
+			'7.1' => false,
2952
+			'7.2' => true,
2953
+		),
2954
+
2955
+		'CURLAUTH_BEARER' => array(
2956
+			'7.2' => false,
2957
+			'7.3' => true,
2958
+		),
2959
+		'CURLAUTH_GSSAPI' => array(
2960
+			'7.2' => false,
2961
+			'7.3' => true,
2962
+		),
2963
+		'CURLE_WEIRD_SERVER_REPLY' => array(
2964
+			'7.2' => false,
2965
+			'7.3' => true,
2966
+		),
2967
+		'CURLINFO_APPCONNECT_TIME_T' => array(
2968
+			'7.2' => false,
2969
+			'7.3' => true,
2970
+		),
2971
+		'CURLINFO_CONNECT_TIME_T' => array(
2972
+			'7.2' => false,
2973
+			'7.3' => true,
2974
+		),
2975
+		'CURLINFO_CONTENT_LENGTH_DOWNLOAD_T' => array(
2976
+			'7.2' => false,
2977
+			'7.3' => true,
2978
+		),
2979
+		'CURLINFO_CONTENT_LENGTH_UPLOAD_T' => array(
2980
+			'7.2' => false,
2981
+			'7.3' => true,
2982
+		),
2983
+		'CURLINFO_FILETIME_T' => array(
2984
+			'7.2' => false,
2985
+			'7.3' => true,
2986
+		),
2987
+		'CURLINFO_HTTP_VERSION' => array(
2988
+			'7.2' => false,
2989
+			'7.3' => true,
2990
+		),
2991
+		'CURLINFO_NAMELOOKUP_TIME_T' => array(
2992
+			'7.2' => false,
2993
+			'7.3' => true,
2994
+		),
2995
+		'CURLINFO_PRETRANSFER_TIME_T' => array(
2996
+			'7.2' => false,
2997
+			'7.3' => true,
2998
+		),
2999
+		'CURLINFO_PROTOCOL' => array(
3000
+			'7.2' => false,
3001
+			'7.3' => true,
3002
+		),
3003
+		'CURLINFO_PROXY_SSL_VERIFYRESULT' => array(
3004
+			'7.2' => false,
3005
+			'7.3' => true,
3006
+		),
3007
+		'CURLINFO_REDIRECT_TIME_T' => array(
3008
+			'7.2' => false,
3009
+			'7.3' => true,
3010
+		),
3011
+		'CURLINFO_SCHEME' => array(
3012
+			'7.2' => false,
3013
+			'7.3' => true,
3014
+		),
3015
+		'CURLINFO_SIZE_DOWNLOAD_T' => array(
3016
+			'7.2' => false,
3017
+			'7.3' => true,
3018
+		),
3019
+		'CURLINFO_SIZE_UPLOAD_T' => array(
3020
+			'7.2' => false,
3021
+			'7.3' => true,
3022
+		),
3023
+		'CURLINFO_SPEED_DOWNLOAD_T' => array(
3024
+			'7.2' => false,
3025
+			'7.3' => true,
3026
+		),
3027
+		'CURLINFO_SPEED_UPLOAD_T' => array(
3028
+			'7.2' => false,
3029
+			'7.3' => true,
3030
+		),
3031
+		'CURLINFO_STARTTRANSFER_TIME_T' => array(
3032
+			'7.2' => false,
3033
+			'7.3' => true,
3034
+		),
3035
+		'CURLINFO_TOTAL_TIME_T' => array(
3036
+			'7.2' => false,
3037
+			'7.3' => true,
3038
+		),
3039
+		'CURL_LOCK_DATA_CONNECT' => array(
3040
+			'7.2' => false,
3041
+			'7.3' => true,
3042
+		),
3043
+		'CURL_LOCK_DATA_PSL' => array(
3044
+			'7.2' => false,
3045
+			'7.3' => true,
3046
+		),
3047
+		'CURL_MAX_READ_SIZE' => array(
3048
+			'7.2' => false,
3049
+			'7.3' => true,
3050
+		),
3051
+		'CURLOPT_ABSTRACT_UNIX_SOCKET' => array(
3052
+			'7.2' => false,
3053
+			'7.3' => true,
3054
+		),
3055
+		'CURLOPT_DISALLOW_USERNAME_IN_URL' => array(
3056
+			'7.2' => false,
3057
+			'7.3' => true,
3058
+		),
3059
+		'CURLOPT_DNS_SHUFFLE_ADDRESSES' => array(
3060
+			'7.2' => false,
3061
+			'7.3' => true,
3062
+		),
3063
+		'CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS' => array(
3064
+			'7.2' => false,
3065
+			'7.3' => true,
3066
+		),
3067
+		'CURLOPT_HAPROXYPROTOCOL' => array(
3068
+			'7.2' => false,
3069
+			'7.3' => true,
3070
+		),
3071
+		'CURLOPT_KEEP_SENDING_ON_ERROR' => array(
3072
+			'7.2' => false,
3073
+			'7.3' => true,
3074
+		),
3075
+		'CURLOPT_PRE_PROXY' => array(
3076
+			'7.2' => false,
3077
+			'7.3' => true,
3078
+		),
3079
+		'CURLOPT_PROXY_CAINFO' => array(
3080
+			'7.2' => false,
3081
+			'7.3' => true,
3082
+		),
3083
+		'CURLOPT_PROXY_CAPATH' => array(
3084
+			'7.2' => false,
3085
+			'7.3' => true,
3086
+		),
3087
+		'CURLOPT_PROXY_CRLFILE' => array(
3088
+			'7.2' => false,
3089
+			'7.3' => true,
3090
+		),
3091
+		'CURLOPT_PROXY_KEYPASSWD' => array(
3092
+			'7.2' => false,
3093
+			'7.3' => true,
3094
+		),
3095
+		'CURLOPT_PROXY_PINNEDPUBLICKEY' => array(
3096
+			'7.2' => false,
3097
+			'7.3' => true,
3098
+		),
3099
+		'CURLOPT_PROXY_SSLCERT' => array(
3100
+			'7.2' => false,
3101
+			'7.3' => true,
3102
+		),
3103
+		'CURLOPT_PROXY_SSLCERTTYPE' => array(
3104
+			'7.2' => false,
3105
+			'7.3' => true,
3106
+		),
3107
+		'CURLOPT_PROXY_SSL_CIPHER_LIST' => array(
3108
+			'7.2' => false,
3109
+			'7.3' => true,
3110
+		),
3111
+		'CURLOPT_PROXY_SSLKEY' => array(
3112
+			'7.2' => false,
3113
+			'7.3' => true,
3114
+		),
3115
+		'CURLOPT_PROXY_SSLKEYTYPE' => array(
3116
+			'7.2' => false,
3117
+			'7.3' => true,
3118
+		),
3119
+		'CURLOPT_PROXY_SSL_OPTIONS' => array(
3120
+			'7.2' => false,
3121
+			'7.3' => true,
3122
+		),
3123
+		'CURLOPT_PROXY_SSL_VERIFYHOST' => array(
3124
+			'7.2' => false,
3125
+			'7.3' => true,
3126
+		),
3127
+		'CURLOPT_PROXY_SSL_VERIFYPEER' => array(
3128
+			'7.2' => false,
3129
+			'7.3' => true,
3130
+		),
3131
+		'CURLOPT_PROXY_SSLVERSION' => array(
3132
+			'7.2' => false,
3133
+			'7.3' => true,
3134
+		),
3135
+		'CURLOPT_PROXY_TLS13_CIPHERS' => array(
3136
+			'7.2' => false,
3137
+			'7.3' => true,
3138
+		),
3139
+		'CURLOPT_PROXY_TLSAUTH_PASSWORD' => array(
3140
+			'7.2' => false,
3141
+			'7.3' => true,
3142
+		),
3143
+		'CURLOPT_PROXY_TLSAUTH_TYPE' => array(
3144
+			'7.2' => false,
3145
+			'7.3' => true,
3146
+		),
3147
+		'CURLOPT_PROXY_TLSAUTH_USERNAME' => array(
3148
+			'7.2' => false,
3149
+			'7.3' => true,
3150
+		),
3151
+		'CURLOPT_REQUEST_TARGET' => array(
3152
+			'7.2' => false,
3153
+			'7.3' => true,
3154
+		),
3155
+		'CURLOPT_SOCKS5_AUTH' => array(
3156
+			'7.2' => false,
3157
+			'7.3' => true,
3158
+		),
3159
+		'CURLOPT_SSH_COMPRESSION' => array(
3160
+			'7.2' => false,
3161
+			'7.3' => true,
3162
+		),
3163
+		'CURLOPT_SUPPRESS_CONNECT_HEADERS' => array(
3164
+			'7.2' => false,
3165
+			'7.3' => true,
3166
+		),
3167
+		'CURLOPT_TIMEVALUE_LARGE' => array(
3168
+			'7.2' => false,
3169
+			'7.3' => true,
3170
+		),
3171
+		'CURLOPT_TLS13_CIPHERS' => array(
3172
+			'7.2' => false,
3173
+			'7.3' => true,
3174
+		),
3175
+		'CURLPROXY_HTTPS' => array(
3176
+			'7.2' => false,
3177
+			'7.3' => true,
3178
+		),
3179
+		'CURLSSH_AUTH_GSSAPI' => array(
3180
+			'7.2' => false,
3181
+			'7.3' => true,
3182
+		),
3183
+		'CURL_SSLVERSION_MAX_DEFAULT' => array(
3184
+			'7.2' => false,
3185
+			'7.3' => true,
3186
+		),
3187
+		'CURL_SSLVERSION_MAX_NONE' => array(
3188
+			'7.2' => false,
3189
+			'7.3' => true,
3190
+		),
3191
+		'CURL_SSLVERSION_MAX_TLSv1_0' => array(
3192
+			'7.2' => false,
3193
+			'7.3' => true,
3194
+		),
3195
+		'CURL_SSLVERSION_MAX_TLSv1_1' => array(
3196
+			'7.2' => false,
3197
+			'7.3' => true,
3198
+		),
3199
+		'CURL_SSLVERSION_MAX_TLSv1_2' => array(
3200
+			'7.2' => false,
3201
+			'7.3' => true,
3202
+		),
3203
+		'CURL_SSLVERSION_MAX_TLSv1_3' => array(
3204
+			'7.2' => false,
3205
+			'7.3' => true,
3206
+		),
3207
+		'CURL_SSLVERSION_TLSv1_3' => array(
3208
+			'7.2' => false,
3209
+			'7.3' => true,
3210
+		),
3211
+		'CURL_VERSION_ASYNCHDNS' => array(
3212
+			'7.2' => false,
3213
+			'7.3' => true,
3214
+		),
3215
+		'CURL_VERSION_BROTLI' => array(
3216
+			'7.2' => false,
3217
+			'7.3' => true,
3218
+		),
3219
+		'CURL_VERSION_CONV' => array(
3220
+			'7.2' => false,
3221
+			'7.3' => true,
3222
+		),
3223
+		'CURL_VERSION_DEBUG' => array(
3224
+			'7.2' => false,
3225
+			'7.3' => true,
3226
+		),
3227
+		'CURL_VERSION_GSSAPI' => array(
3228
+			'7.2' => false,
3229
+			'7.3' => true,
3230
+		),
3231
+		'CURL_VERSION_GSSNEGOTIATE' => array(
3232
+			'7.2' => false,
3233
+			'7.3' => true,
3234
+		),
3235
+		'CURL_VERSION_HTTPS_PROXY' => array(
3236
+			'7.2' => false,
3237
+			'7.3' => true,
3238
+		),
3239
+		'CURL_VERSION_IDN' => array(
3240
+			'7.2' => false,
3241
+			'7.3' => true,
3242
+		),
3243
+		'CURL_VERSION_LARGEFILE' => array(
3244
+			'7.2' => false,
3245
+			'7.3' => true,
3246
+		),
3247
+		'CURL_VERSION_MULTI_SSL' => array(
3248
+			'7.2' => false,
3249
+			'7.3' => true,
3250
+		),
3251
+		'CURL_VERSION_NTLM' => array(
3252
+			'7.2' => false,
3253
+			'7.3' => true,
3254
+		),
3255
+		'CURL_VERSION_NTLM_WB' => array(
3256
+			'7.2' => false,
3257
+			'7.3' => true,
3258
+		),
3259
+		'CURL_VERSION_SPNEGO' => array(
3260
+			'7.2' => false,
3261
+			'7.3' => true,
3262
+		),
3263
+		'CURL_VERSION_SSPI' => array(
3264
+			'7.2' => false,
3265
+			'7.3' => true,
3266
+		),
3267
+		'CURL_VERSION_TLSAUTH_SRP' => array(
3268
+			'7.2' => false,
3269
+			'7.3' => true,
3270
+		),
3271
+		'FILTER_SANITIZE_ADD_SLASHES' => array(
3272
+			'7.2' => false,
3273
+			'7.3' => true,
3274
+		),
3275
+		'JSON_THROW_ON_ERROR' => array(
3276
+			'7.2' => false,
3277
+			'7.3' => true,
3278
+		),
3279
+		'LDAP_CONTROL_MANAGEDSAIT' => array(
3280
+			'7.2' => false,
3281
+			'7.3' => true,
3282
+		),
3283
+		'LDAP_CONTROL_PROXY_AUTHZ' => array(
3284
+			'7.2' => false,
3285
+			'7.3' => true,
3286
+		),
3287
+		'LDAP_CONTROL_SUBENTRIES' => array(
3288
+			'7.2' => false,
3289
+			'7.3' => true,
3290
+		),
3291
+		'LDAP_CONTROL_VALUESRETURNFILTER' => array(
3292
+			'7.2' => false,
3293
+			'7.3' => true,
3294
+		),
3295
+		'LDAP_CONTROL_ASSERT' => array(
3296
+			'7.2' => false,
3297
+			'7.3' => true,
3298
+		),
3299
+		'LDAP_CONTROL_PRE_READ' => array(
3300
+			'7.2' => false,
3301
+			'7.3' => true,
3302
+		),
3303
+		'LDAP_CONTROL_POST_READ' => array(
3304
+			'7.2' => false,
3305
+			'7.3' => true,
3306
+		),
3307
+		'LDAP_CONTROL_SORTREQUEST' => array(
3308
+			'7.2' => false,
3309
+			'7.3' => true,
3310
+		),
3311
+		'LDAP_CONTROL_SORTRESPONSE' => array(
3312
+			'7.2' => false,
3313
+			'7.3' => true,
3314
+		),
3315
+		'LDAP_CONTROL_PAGEDRESULTS' => array(
3316
+			'7.2' => false,
3317
+			'7.3' => true,
3318
+		),
3319
+		'LDAP_CONTROL_AUTHZID_REQUEST' => array(
3320
+			'7.2' => false,
3321
+			'7.3' => true,
3322
+		),
3323
+		'LDAP_CONTROL_AUTHZID_RESPONSE' => array(
3324
+			'7.2' => false,
3325
+			'7.3' => true,
3326
+		),
3327
+		'LDAP_CONTROL_SYNC' => array(
3328
+			'7.2' => false,
3329
+			'7.3' => true,
3330
+		),
3331
+		'LDAP_CONTROL_SYNC_STATE' => array(
3332
+			'7.2' => false,
3333
+			'7.3' => true,
3334
+		),
3335
+		'LDAP_CONTROL_SYNC_DONE' => array(
3336
+			'7.2' => false,
3337
+			'7.3' => true,
3338
+		),
3339
+		'LDAP_CONTROL_DONTUSECOPY' => array(
3340
+			'7.2' => false,
3341
+			'7.3' => true,
3342
+		),
3343
+		'LDAP_CONTROL_PASSWORDPOLICYREQUEST' => array(
3344
+			'7.2' => false,
3345
+			'7.3' => true,
3346
+		),
3347
+		'LDAP_CONTROL_PASSWORDPOLICYRESPONSE' => array(
3348
+			'7.2' => false,
3349
+			'7.3' => true,
3350
+		),
3351
+		'LDAP_CONTROL_X_INCREMENTAL_VALUES' => array(
3352
+			'7.2' => false,
3353
+			'7.3' => true,
3354
+		),
3355
+		'LDAP_CONTROL_X_DOMAIN_SCOPE' => array(
3356
+			'7.2' => false,
3357
+			'7.3' => true,
3358
+		),
3359
+		'LDAP_CONTROL_X_PERMISSIVE_MODIFY' => array(
3360
+			'7.2' => false,
3361
+			'7.3' => true,
3362
+		),
3363
+		'LDAP_CONTROL_X_SEARCH_OPTIONS' => array(
3364
+			'7.2' => false,
3365
+			'7.3' => true,
3366
+		),
3367
+		'LDAP_CONTROL_X_TREE_DELETE' => array(
3368
+			'7.2' => false,
3369
+			'7.3' => true,
3370
+		),
3371
+		'LDAP_CONTROL_X_EXTENDED_DN' => array(
3372
+			'7.2' => false,
3373
+			'7.3' => true,
3374
+		),
3375
+		'LDAP_CONTROL_VLVREQUEST' => array(
3376
+			'7.2' => false,
3377
+			'7.3' => true,
3378
+		),
3379
+		'LDAP_CONTROL_VLVRESPONSE' => array(
3380
+			'7.2' => false,
3381
+			'7.3' => true,
3382
+		),
3383
+		'MB_CASE_FOLD' => array(
3384
+			'7.2' => false,
3385
+			'7.3' => true,
3386
+		),
3387
+		'MB_CASE_UPPER_SIMPLE' => array(
3388
+			'7.2' => false,
3389
+			'7.3' => true,
3390
+		),
3391
+		'MB_CASE_LOWER_SIMPLE' => array(
3392
+			'7.2' => false,
3393
+			'7.3' => true,
3394
+		),
3395
+		'MB_CASE_TITLE_SIMPLE' => array(
3396
+			'7.2' => false,
3397
+			'7.3' => true,
3398
+		),
3399
+		'MB_CASE_FOLD_SIMPLE' => array(
3400
+			'7.2' => false,
3401
+			'7.3' => true,
3402
+		),
3403
+		'PGSQL_DIAG_SCHEMA_NAME' => array(
3404
+			'7.2' => false,
3405
+			'7.3' => true,
3406
+		),
3407
+		'PGSQL_DIAG_TABLE_NAME' => array(
3408
+			'7.2' => false,
3409
+			'7.3' => true,
3410
+		),
3411
+		'PGSQL_DIAG_COLUMN_NAME' => array(
3412
+			'7.2' => false,
3413
+			'7.3' => true,
3414
+		),
3415
+		'PGSQL_DIAG_DATATYPE_NAME' => array(
3416
+			'7.2' => false,
3417
+			'7.3' => true,
3418
+		),
3419
+		'PGSQL_DIAG_CONSTRAINT_NAME' => array(
3420
+			'7.2' => false,
3421
+			'7.3' => true,
3422
+		),
3423
+		'PGSQL_DIAG_SEVERITY_NONLOCALIZED' => array(
3424
+			'7.2' => false,
3425
+			'7.3' => true,
3426
+		),
3427
+		'PASSWORD_ARGON2ID' => array(
3428
+			'7.2' => false,
3429
+			'7.3' => true,
3430
+		),
3431
+		'STREAM_CRYPTO_PROTO_SSLv3' => array(
3432
+			'7.2' => false,
3433
+			'7.3' => true,
3434
+		),
3435
+		'STREAM_CRYPTO_PROTO_TLSv1_0' => array(
3436
+			'7.2' => false,
3437
+			'7.3' => true,
3438
+		),
3439
+		'STREAM_CRYPTO_PROTO_TLSv1_1' => array(
3440
+			'7.2' => false,
3441
+			'7.3' => true,
3442
+		),
3443
+		'STREAM_CRYPTO_PROTO_TLSv1_2' => array(
3444
+			'7.2' => false,
3445
+			'7.3' => true,
3446
+		),
3447
+
3448
+		'MB_ONIGURUMA_VERSION' => array(
3449
+			'7.3' => false,
3450
+			'7.4' => true,
3451
+		),
3452
+		'SO_LABEL' => array(
3453
+			'7.3' => false,
3454
+			'7.4' => true,
3455
+		),
3456
+		'SO_PEERLABEL' => array(
3457
+			'7.3' => false,
3458
+			'7.4' => true,
3459
+		),
3460
+		'SO_LISTENQLIMIT' => array(
3461
+			'7.3' => false,
3462
+			'7.4' => true,
3463
+		),
3464
+		'SO_LISTENQLEN' => array(
3465
+			'7.3' => false,
3466
+			'7.4' => true,
3467
+		),
3468
+		'SO_USER_COOKIE' => array(
3469
+			'7.3' => false,
3470
+			'7.4' => true,
3471
+		),
3472
+		'PHP_WINDOWS_EVENT_CTRL_C' => array(
3473
+			'7.3' => false,
3474
+			'7.4' => true,
3475
+		),
3476
+		'PHP_WINDOWS_EVENT_CTRL_BREAK' => array(
3477
+			'7.3' => false,
3478
+			'7.4' => true,
3479
+		),
3480
+		'TIDY_TAG_ARTICLE' => array(
3481
+			'7.3' => false,
3482
+			'7.4' => true,
3483
+		),
3484
+		'TIDY_TAG_ASIDE' => array(
3485
+			'7.3' => false,
3486
+			'7.4' => true,
3487
+		),
3488
+		'TIDY_TAG_AUDIO' => array(
3489
+			'7.3' => false,
3490
+			'7.4' => true,
3491
+		),
3492
+		'TIDY_TAG_BDI' => array(
3493
+			'7.3' => false,
3494
+			'7.4' => true,
3495
+		),
3496
+		'TIDY_TAG_CANVAS' => array(
3497
+			'7.3' => false,
3498
+			'7.4' => true,
3499
+		),
3500
+		'TIDY_TAG_COMMAND' => array(
3501
+			'7.3' => false,
3502
+			'7.4' => true,
3503
+		),
3504
+		'TIDY_TAG_DATALIST' => array(
3505
+			'7.3' => false,
3506
+			'7.4' => true,
3507
+		),
3508
+		'TIDY_TAG_DETAILS' => array(
3509
+			'7.3' => false,
3510
+			'7.4' => true,
3511
+		),
3512
+		'TIDY_TAG_DIALOG' => array(
3513
+			'7.3' => false,
3514
+			'7.4' => true,
3515
+		),
3516
+		'TIDY_TAG_FIGCAPTION' => array(
3517
+			'7.3' => false,
3518
+			'7.4' => true,
3519
+		),
3520
+		'TIDY_TAG_FIGURE' => array(
3521
+			'7.3' => false,
3522
+			'7.4' => true,
3523
+		),
3524
+		'TIDY_TAG_FOOTER' => array(
3525
+			'7.3' => false,
3526
+			'7.4' => true,
3527
+		),
3528
+		'TIDY_TAG_HEADER' => array(
3529
+			'7.3' => false,
3530
+			'7.4' => true,
3531
+		),
3532
+		'TIDY_TAG_HGROUP' => array(
3533
+			'7.3' => false,
3534
+			'7.4' => true,
3535
+		),
3536
+		'TIDY_TAG_MAIN' => array(
3537
+			'7.3' => false,
3538
+			'7.4' => true,
3539
+		),
3540
+		'TIDY_TAG_MARK' => array(
3541
+			'7.3' => false,
3542
+			'7.4' => true,
3543
+		),
3544
+		'TIDY_TAG_MENUITEM' => array(
3545
+			'7.3' => false,
3546
+			'7.4' => true,
3547
+		),
3548
+		'TIDY_TAG_METER' => array(
3549
+			'7.3' => false,
3550
+			'7.4' => true,
3551
+		),
3552
+		'TIDY_TAG_NAV' => array(
3553
+			'7.3' => false,
3554
+			'7.4' => true,
3555
+		),
3556
+		'TIDY_TAG_OUTPUT' => array(
3557
+			'7.3' => false,
3558
+			'7.4' => true,
3559
+		),
3560
+		'TIDY_TAG_PROGRESS' => array(
3561
+			'7.3' => false,
3562
+			'7.4' => true,
3563
+		),
3564
+		'TIDY_TAG_SECTION' => array(
3565
+			'7.3' => false,
3566
+			'7.4' => true,
3567
+		),
3568
+		'TIDY_TAG_SOURCE' => array(
3569
+			'7.3' => false,
3570
+			'7.4' => true,
3571
+		),
3572
+		'TIDY_TAG_SUMMARY' => array(
3573
+			'7.3' => false,
3574
+			'7.4' => true,
3575
+		),
3576
+		'TIDY_TAG_TEMPLATE' => array(
3577
+			'7.3' => false,
3578
+			'7.4' => true,
3579
+		),
3580
+		'TIDY_TAG_TIME' => array(
3581
+			'7.3' => false,
3582
+			'7.4' => true,
3583
+		),
3584
+		'TIDY_TAG_TRACK' => array(
3585
+			'7.3' => false,
3586
+			'7.4' => true,
3587
+		),
3588
+		'TIDY_TAG_VIDEO' => array(
3589
+			'7.3' => false,
3590
+			'7.4' => true,
3591
+		),
3592
+	);
3593
+
3594
+
3595
+	/**
3596
+	 * Returns an array of tokens this test wants to listen for.
3597
+	 *
3598
+	 * @return array
3599
+	 */
3600
+	public function register()
3601
+	{
3602
+		return array(\T_STRING);
3603
+	}
3604
+
3605
+	/**
3606
+	 * Processes this test, when one of its tokens is encountered.
3607
+	 *
3608
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
3609
+	 * @param int                   $stackPtr  The position of the current token in the
3610
+	 *                                         stack passed in $tokens.
3611
+	 *
3612
+	 * @return void
3613
+	 */
3614
+	public function process(File $phpcsFile, $stackPtr)
3615
+	{
3616
+		$tokens       = $phpcsFile->getTokens();
3617
+		$constantName = $tokens[$stackPtr]['content'];
3618
+
3619
+		if (isset($this->newConstants[$constantName]) === false) {
3620
+			return;
3621
+		}
3622
+
3623
+		if ($this->isUseOfGlobalConstant($phpcsFile, $stackPtr) === false) {
3624
+			return;
3625
+		}
3626
+
3627
+		$itemInfo = array(
3628
+			'name' => $constantName,
3629
+		);
3630
+		$this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
3631
+	}
3632
+
3633
+
3634
+	/**
3635
+	 * Get the relevant sub-array for a specific item from a multi-dimensional array.
3636
+	 *
3637
+	 * @param array $itemInfo Base information about the item.
3638
+	 *
3639
+	 * @return array Version and other information about the item.
3640
+	 */
3641
+	public function getItemArray(array $itemInfo)
3642
+	{
3643
+		return $this->newConstants[$itemInfo['name']];
3644
+	}
3645
+
3646
+
3647
+	/**
3648
+	 * Get the error message template for this sniff.
3649
+	 *
3650
+	 * @return string
3651
+	 */
3652
+	protected function getErrorMsgTemplate()
3653
+	{
3654
+		return 'The constant "%s" is not present in PHP version %s or earlier';
3655
+	}
3656 3656
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/Constants/RemovedConstantsSniff.php 1 patch
Indentation   +505 added lines, -505 removed lines patch added patch discarded remove patch
@@ -22,526 +22,526 @@
 block discarded – undo
22 22
 class RemovedConstantsSniff extends AbstractRemovedFeatureSniff
23 23
 {
24 24
 
25
-    /**
26
-     * A list of removed PHP Constants.
27
-     *
28
-     * The array lists : version number with false (deprecated) or true (removed).
29
-     * If's sufficient to list the first version where the constant was deprecated/removed.
30
-     *
31
-     * Note: PHP Constants are case-sensitive!
32
-     *
33
-     * @var array(string => array(string => bool|string|null))
34
-     */
35
-    protected $removedConstants = array(
36
-        // Disabled since PHP 5.3.0 due to thread safety issues.
37
-        'FILEINFO_COMPRESS' => array(
38
-            '5.3' => true,
39
-        ),
25
+	/**
26
+	 * A list of removed PHP Constants.
27
+	 *
28
+	 * The array lists : version number with false (deprecated) or true (removed).
29
+	 * If's sufficient to list the first version where the constant was deprecated/removed.
30
+	 *
31
+	 * Note: PHP Constants are case-sensitive!
32
+	 *
33
+	 * @var array(string => array(string => bool|string|null))
34
+	 */
35
+	protected $removedConstants = array(
36
+		// Disabled since PHP 5.3.0 due to thread safety issues.
37
+		'FILEINFO_COMPRESS' => array(
38
+			'5.3' => true,
39
+		),
40 40
 
41
-        'CURLOPT_CLOSEPOLICY' => array(
42
-            '5.6' => true,
43
-        ),
44
-        'CURLCLOSEPOLICY_LEAST_RECENTLY_USED' => array(
45
-            '5.6' => true,
46
-        ),
47
-        'CURLCLOSEPOLICY_LEAST_TRAFFIC' => array(
48
-            '5.6' => true,
49
-        ),
50
-        'CURLCLOSEPOLICY_SLOWEST' => array(
51
-            '5.6' => true,
52
-        ),
53
-        'CURLCLOSEPOLICY_CALLBACK' => array(
54
-            '5.6' => true,
55
-        ),
56
-        'CURLCLOSEPOLICY_OLDEST' => array(
57
-            '5.6' => true,
58
-        ),
41
+		'CURLOPT_CLOSEPOLICY' => array(
42
+			'5.6' => true,
43
+		),
44
+		'CURLCLOSEPOLICY_LEAST_RECENTLY_USED' => array(
45
+			'5.6' => true,
46
+		),
47
+		'CURLCLOSEPOLICY_LEAST_TRAFFIC' => array(
48
+			'5.6' => true,
49
+		),
50
+		'CURLCLOSEPOLICY_SLOWEST' => array(
51
+			'5.6' => true,
52
+		),
53
+		'CURLCLOSEPOLICY_CALLBACK' => array(
54
+			'5.6' => true,
55
+		),
56
+		'CURLCLOSEPOLICY_OLDEST' => array(
57
+			'5.6' => true,
58
+		),
59 59
 
60
-        'PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT' => array(
61
-            '7.0' => true,
62
-        ),
60
+		'PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT' => array(
61
+			'7.0' => true,
62
+		),
63 63
 
64
-        'INTL_IDNA_VARIANT_2003' => array(
65
-            '7.2' => false,
66
-        ),
64
+		'INTL_IDNA_VARIANT_2003' => array(
65
+			'7.2' => false,
66
+		),
67 67
 
68
-        'MCRYPT_MODE_ECB' => array(
69
-            '7.1' => false,
70
-            '7.2' => true,
71
-        ),
72
-        'MCRYPT_MODE_CBC' => array(
73
-            '7.1' => false,
74
-            '7.2' => true,
75
-        ),
76
-        'MCRYPT_MODE_CFB' => array(
77
-            '7.1' => false,
78
-            '7.2' => true,
79
-        ),
80
-        'MCRYPT_MODE_OFB' => array(
81
-            '7.1' => false,
82
-            '7.2' => true,
83
-        ),
84
-        'MCRYPT_MODE_NOFB' => array(
85
-            '7.1' => false,
86
-            '7.2' => true,
87
-        ),
88
-        'MCRYPT_MODE_STREAM' => array(
89
-            '7.1' => false,
90
-            '7.2' => true,
91
-        ),
92
-        'MCRYPT_ENCRYPT' => array(
93
-            '7.1' => false,
94
-            '7.2' => true,
95
-        ),
96
-        'MCRYPT_DECRYPT' => array(
97
-            '7.1' => false,
98
-            '7.2' => true,
99
-        ),
100
-        'MCRYPT_DEV_RANDOM' => array(
101
-            '7.1' => false,
102
-            '7.2' => true,
103
-        ),
104
-        'MCRYPT_DEV_URANDOM' => array(
105
-            '7.1' => false,
106
-            '7.2' => true,
107
-        ),
108
-        'MCRYPT_RAND' => array(
109
-            '7.1' => false,
110
-            '7.2' => true,
111
-        ),
112
-        'MCRYPT_3DES' => array(
113
-            '7.1' => false,
114
-            '7.2' => true,
115
-        ),
116
-        'MCRYPT_ARCFOUR_IV' => array(
117
-            '7.1' => false,
118
-            '7.2' => true,
119
-        ),
120
-        'MCRYPT_ARCFOUR' => array(
121
-            '7.1' => false,
122
-            '7.2' => true,
123
-        ),
124
-        'MCRYPT_BLOWFISH' => array(
125
-            '7.1' => false,
126
-            '7.2' => true,
127
-        ),
128
-        'MCRYPT_CAST_128' => array(
129
-            '7.1' => false,
130
-            '7.2' => true,
131
-        ),
132
-        'MCRYPT_CAST_256' => array(
133
-            '7.1' => false,
134
-            '7.2' => true,
135
-        ),
136
-        'MCRYPT_CRYPT' => array(
137
-            '7.1' => false,
138
-            '7.2' => true,
139
-        ),
140
-        'MCRYPT_DES' => array(
141
-            '7.1' => false,
142
-            '7.2' => true,
143
-        ),
144
-        'MCRYPT_DES_COMPAT' => array(
145
-            '7.1' => false,
146
-            '7.2' => true,
147
-        ),
148
-        'MCRYPT_ENIGMA' => array(
149
-            '7.1' => false,
150
-            '7.2' => true,
151
-        ),
152
-        'MCRYPT_GOST' => array(
153
-            '7.1' => false,
154
-            '7.2' => true,
155
-        ),
156
-        'MCRYPT_IDEA' => array(
157
-            '7.1' => false,
158
-            '7.2' => true,
159
-        ),
160
-        'MCRYPT_LOKI97' => array(
161
-            '7.1' => false,
162
-            '7.2' => true,
163
-        ),
164
-        'MCRYPT_MARS' => array(
165
-            '7.1' => false,
166
-            '7.2' => true,
167
-        ),
168
-        'MCRYPT_PANAMA' => array(
169
-            '7.1' => false,
170
-            '7.2' => true,
171
-        ),
172
-        'MCRYPT_RIJNDAEL_128' => array(
173
-            '7.1' => false,
174
-            '7.2' => true,
175
-        ),
176
-        'MCRYPT_RIJNDAEL_192' => array(
177
-            '7.1' => false,
178
-            '7.2' => true,
179
-        ),
180
-        'MCRYPT_RIJNDAEL_256' => array(
181
-            '7.1' => false,
182
-            '7.2' => true,
183
-        ),
184
-        'MCRYPT_RC2' => array(
185
-            '7.1' => false,
186
-            '7.2' => true,
187
-        ),
188
-        'MCRYPT_RC4' => array(
189
-            '7.1' => false,
190
-            '7.2' => true,
191
-        ),
192
-        'MCRYPT_RC6' => array(
193
-            '7.1' => false,
194
-            '7.2' => true,
195
-        ),
196
-        'MCRYPT_RC6_128' => array(
197
-            '7.1' => false,
198
-            '7.2' => true,
199
-        ),
200
-        'MCRYPT_RC6_192' => array(
201
-            '7.1' => false,
202
-            '7.2' => true,
203
-        ),
204
-        'MCRYPT_RC6_256' => array(
205
-            '7.1' => false,
206
-            '7.2' => true,
207
-        ),
208
-        'MCRYPT_SAFER64' => array(
209
-            '7.1' => false,
210
-            '7.2' => true,
211
-        ),
212
-        'MCRYPT_SAFER128' => array(
213
-            '7.1' => false,
214
-            '7.2' => true,
215
-        ),
216
-        'MCRYPT_SAFERPLUS' => array(
217
-            '7.1' => false,
218
-            '7.2' => true,
219
-        ),
220
-        'MCRYPT_SERPENT' => array(
221
-            '7.1' => false,
222
-            '7.2' => true,
223
-        ),
224
-        'MCRYPT_SERPENT_128' => array(
225
-            '7.1' => false,
226
-            '7.2' => true,
227
-        ),
228
-        'MCRYPT_SERPENT_192' => array(
229
-            '7.1' => false,
230
-            '7.2' => true,
231
-        ),
232
-        'MCRYPT_SERPENT_256' => array(
233
-            '7.1' => false,
234
-            '7.2' => true,
235
-        ),
236
-        'MCRYPT_SKIPJACK' => array(
237
-            '7.1' => false,
238
-            '7.2' => true,
239
-        ),
240
-        'MCRYPT_TEAN' => array(
241
-            '7.1' => false,
242
-            '7.2' => true,
243
-        ),
244
-        'MCRYPT_THREEWAY' => array(
245
-            '7.1' => false,
246
-            '7.2' => true,
247
-        ),
248
-        'MCRYPT_TRIPLEDES' => array(
249
-            '7.1' => false,
250
-            '7.2' => true,
251
-        ),
252
-        'MCRYPT_TWOFISH' => array(
253
-            '7.1' => false,
254
-            '7.2' => true,
255
-        ),
256
-        'MCRYPT_TWOFISH128' => array(
257
-            '7.1' => false,
258
-            '7.2' => true,
259
-        ),
260
-        'MCRYPT_TWOFISH192' => array(
261
-            '7.1' => false,
262
-            '7.2' => true,
263
-        ),
264
-        'MCRYPT_TWOFISH256' => array(
265
-            '7.1' => false,
266
-            '7.2' => true,
267
-        ),
268
-        'MCRYPT_WAKE' => array(
269
-            '7.1' => false,
270
-            '7.2' => true,
271
-        ),
272
-        'MCRYPT_XTEA' => array(
273
-            '7.1' => false,
274
-            '7.2' => true,
275
-        ),
68
+		'MCRYPT_MODE_ECB' => array(
69
+			'7.1' => false,
70
+			'7.2' => true,
71
+		),
72
+		'MCRYPT_MODE_CBC' => array(
73
+			'7.1' => false,
74
+			'7.2' => true,
75
+		),
76
+		'MCRYPT_MODE_CFB' => array(
77
+			'7.1' => false,
78
+			'7.2' => true,
79
+		),
80
+		'MCRYPT_MODE_OFB' => array(
81
+			'7.1' => false,
82
+			'7.2' => true,
83
+		),
84
+		'MCRYPT_MODE_NOFB' => array(
85
+			'7.1' => false,
86
+			'7.2' => true,
87
+		),
88
+		'MCRYPT_MODE_STREAM' => array(
89
+			'7.1' => false,
90
+			'7.2' => true,
91
+		),
92
+		'MCRYPT_ENCRYPT' => array(
93
+			'7.1' => false,
94
+			'7.2' => true,
95
+		),
96
+		'MCRYPT_DECRYPT' => array(
97
+			'7.1' => false,
98
+			'7.2' => true,
99
+		),
100
+		'MCRYPT_DEV_RANDOM' => array(
101
+			'7.1' => false,
102
+			'7.2' => true,
103
+		),
104
+		'MCRYPT_DEV_URANDOM' => array(
105
+			'7.1' => false,
106
+			'7.2' => true,
107
+		),
108
+		'MCRYPT_RAND' => array(
109
+			'7.1' => false,
110
+			'7.2' => true,
111
+		),
112
+		'MCRYPT_3DES' => array(
113
+			'7.1' => false,
114
+			'7.2' => true,
115
+		),
116
+		'MCRYPT_ARCFOUR_IV' => array(
117
+			'7.1' => false,
118
+			'7.2' => true,
119
+		),
120
+		'MCRYPT_ARCFOUR' => array(
121
+			'7.1' => false,
122
+			'7.2' => true,
123
+		),
124
+		'MCRYPT_BLOWFISH' => array(
125
+			'7.1' => false,
126
+			'7.2' => true,
127
+		),
128
+		'MCRYPT_CAST_128' => array(
129
+			'7.1' => false,
130
+			'7.2' => true,
131
+		),
132
+		'MCRYPT_CAST_256' => array(
133
+			'7.1' => false,
134
+			'7.2' => true,
135
+		),
136
+		'MCRYPT_CRYPT' => array(
137
+			'7.1' => false,
138
+			'7.2' => true,
139
+		),
140
+		'MCRYPT_DES' => array(
141
+			'7.1' => false,
142
+			'7.2' => true,
143
+		),
144
+		'MCRYPT_DES_COMPAT' => array(
145
+			'7.1' => false,
146
+			'7.2' => true,
147
+		),
148
+		'MCRYPT_ENIGMA' => array(
149
+			'7.1' => false,
150
+			'7.2' => true,
151
+		),
152
+		'MCRYPT_GOST' => array(
153
+			'7.1' => false,
154
+			'7.2' => true,
155
+		),
156
+		'MCRYPT_IDEA' => array(
157
+			'7.1' => false,
158
+			'7.2' => true,
159
+		),
160
+		'MCRYPT_LOKI97' => array(
161
+			'7.1' => false,
162
+			'7.2' => true,
163
+		),
164
+		'MCRYPT_MARS' => array(
165
+			'7.1' => false,
166
+			'7.2' => true,
167
+		),
168
+		'MCRYPT_PANAMA' => array(
169
+			'7.1' => false,
170
+			'7.2' => true,
171
+		),
172
+		'MCRYPT_RIJNDAEL_128' => array(
173
+			'7.1' => false,
174
+			'7.2' => true,
175
+		),
176
+		'MCRYPT_RIJNDAEL_192' => array(
177
+			'7.1' => false,
178
+			'7.2' => true,
179
+		),
180
+		'MCRYPT_RIJNDAEL_256' => array(
181
+			'7.1' => false,
182
+			'7.2' => true,
183
+		),
184
+		'MCRYPT_RC2' => array(
185
+			'7.1' => false,
186
+			'7.2' => true,
187
+		),
188
+		'MCRYPT_RC4' => array(
189
+			'7.1' => false,
190
+			'7.2' => true,
191
+		),
192
+		'MCRYPT_RC6' => array(
193
+			'7.1' => false,
194
+			'7.2' => true,
195
+		),
196
+		'MCRYPT_RC6_128' => array(
197
+			'7.1' => false,
198
+			'7.2' => true,
199
+		),
200
+		'MCRYPT_RC6_192' => array(
201
+			'7.1' => false,
202
+			'7.2' => true,
203
+		),
204
+		'MCRYPT_RC6_256' => array(
205
+			'7.1' => false,
206
+			'7.2' => true,
207
+		),
208
+		'MCRYPT_SAFER64' => array(
209
+			'7.1' => false,
210
+			'7.2' => true,
211
+		),
212
+		'MCRYPT_SAFER128' => array(
213
+			'7.1' => false,
214
+			'7.2' => true,
215
+		),
216
+		'MCRYPT_SAFERPLUS' => array(
217
+			'7.1' => false,
218
+			'7.2' => true,
219
+		),
220
+		'MCRYPT_SERPENT' => array(
221
+			'7.1' => false,
222
+			'7.2' => true,
223
+		),
224
+		'MCRYPT_SERPENT_128' => array(
225
+			'7.1' => false,
226
+			'7.2' => true,
227
+		),
228
+		'MCRYPT_SERPENT_192' => array(
229
+			'7.1' => false,
230
+			'7.2' => true,
231
+		),
232
+		'MCRYPT_SERPENT_256' => array(
233
+			'7.1' => false,
234
+			'7.2' => true,
235
+		),
236
+		'MCRYPT_SKIPJACK' => array(
237
+			'7.1' => false,
238
+			'7.2' => true,
239
+		),
240
+		'MCRYPT_TEAN' => array(
241
+			'7.1' => false,
242
+			'7.2' => true,
243
+		),
244
+		'MCRYPT_THREEWAY' => array(
245
+			'7.1' => false,
246
+			'7.2' => true,
247
+		),
248
+		'MCRYPT_TRIPLEDES' => array(
249
+			'7.1' => false,
250
+			'7.2' => true,
251
+		),
252
+		'MCRYPT_TWOFISH' => array(
253
+			'7.1' => false,
254
+			'7.2' => true,
255
+		),
256
+		'MCRYPT_TWOFISH128' => array(
257
+			'7.1' => false,
258
+			'7.2' => true,
259
+		),
260
+		'MCRYPT_TWOFISH192' => array(
261
+			'7.1' => false,
262
+			'7.2' => true,
263
+		),
264
+		'MCRYPT_TWOFISH256' => array(
265
+			'7.1' => false,
266
+			'7.2' => true,
267
+		),
268
+		'MCRYPT_WAKE' => array(
269
+			'7.1' => false,
270
+			'7.2' => true,
271
+		),
272
+		'MCRYPT_XTEA' => array(
273
+			'7.1' => false,
274
+			'7.2' => true,
275
+		),
276 276
 
277
-        'PHPDBG_FILE' => array(
278
-            '7.3' => true,
279
-        ),
280
-        'PHPDBG_METHOD' => array(
281
-            '7.3' => true,
282
-        ),
283
-        'PHPDBG_LINENO' => array(
284
-            '7.3' => true,
285
-        ),
286
-        'PHPDBG_FUNC' => array(
287
-            '7.3' => true,
288
-        ),
289
-        'FILTER_FLAG_SCHEME_REQUIRED' => array(
290
-            '7.3' => false,
291
-        ),
292
-        'FILTER_FLAG_HOST_REQUIRED' => array(
293
-            '7.3' => false,
294
-        ),
277
+		'PHPDBG_FILE' => array(
278
+			'7.3' => true,
279
+		),
280
+		'PHPDBG_METHOD' => array(
281
+			'7.3' => true,
282
+		),
283
+		'PHPDBG_LINENO' => array(
284
+			'7.3' => true,
285
+		),
286
+		'PHPDBG_FUNC' => array(
287
+			'7.3' => true,
288
+		),
289
+		'FILTER_FLAG_SCHEME_REQUIRED' => array(
290
+			'7.3' => false,
291
+		),
292
+		'FILTER_FLAG_HOST_REQUIRED' => array(
293
+			'7.3' => false,
294
+		),
295 295
 
296
-        'IBASE_BKP_CONVERT' => array(
297
-            '7.4' => true,
298
-        ),
299
-        'IBASE_BKP_IGNORE_CHECKSUMS' => array(
300
-            '7.4' => true,
301
-        ),
302
-        'IBASE_BKP_IGNORE_LIMBO' => array(
303
-            '7.4' => true,
304
-        ),
305
-        'IBASE_BKP_METADATA_ONLY' => array(
306
-            '7.4' => true,
307
-        ),
308
-        'IBASE_BKP_NO_GARBAGE_COLLECT' => array(
309
-            '7.4' => true,
310
-        ),
311
-        'IBASE_BKP_NON_TRANSPORTABLE' => array(
312
-            '7.4' => true,
313
-        ),
314
-        'IBASE_BKP_OLD_DESCRIPTIONS' => array(
315
-            '7.4' => true,
316
-        ),
317
-        'IBASE_COMMITTED' => array(
318
-            '7.4' => true,
319
-        ),
320
-        'IBASE_CONCURRENCY' => array(
321
-            '7.4' => true,
322
-        ),
323
-        'IBASE_CONSISTENCY' => array(
324
-            '7.4' => true,
325
-        ),
326
-        'IBASE_DEFAULT' => array(
327
-            '7.4' => true,
328
-        ),
329
-        'IBASE_FETCH_ARRAYS' => array(
330
-            '7.4' => true,
331
-        ),
332
-        'IBASE_FETCH_BLOBS' => array(
333
-            '7.4' => true,
334
-        ),
335
-        'IBASE_NOWAIT' => array(
336
-            '7.4' => true,
337
-        ),
338
-        'IBASE_PRP_ACCESS_MODE' => array(
339
-            '7.4' => true,
340
-        ),
341
-        'IBASE_PRP_ACTIVATE' => array(
342
-            '7.4' => true,
343
-        ),
344
-        'IBASE_PRP_AM_READONLY' => array(
345
-            '7.4' => true,
346
-        ),
347
-        'IBASE_PRP_AM_READWRITE' => array(
348
-            '7.4' => true,
349
-        ),
350
-        'IBASE_PRP_DENY_NEW_ATTACHMENTS' => array(
351
-            '7.4' => true,
352
-        ),
353
-        'IBASE_PRP_DENY_NEW_TRANSACTIONS' => array(
354
-            '7.4' => true,
355
-        ),
356
-        'IBASE_PRP_DB_ONLINE' => array(
357
-            '7.4' => true,
358
-        ),
359
-        'IBASE_PRP_PAGE_BUFFERS' => array(
360
-            '7.4' => true,
361
-        ),
362
-        'IBASE_PRP_RES' => array(
363
-            '7.4' => true,
364
-        ),
365
-        'IBASE_PRP_RES_USE_FULL' => array(
366
-            '7.4' => true,
367
-        ),
368
-        'IBASE_PRP_RESERVE_SPACE' => array(
369
-            '7.4' => true,
370
-        ),
371
-        'IBASE_PRP_SET_SQL_DIALECT' => array(
372
-            '7.4' => true,
373
-        ),
374
-        'IBASE_PRP_SHUTDOWN_DB' => array(
375
-            '7.4' => true,
376
-        ),
377
-        'IBASE_PRP_SWEEP_INTERVAL' => array(
378
-            '7.4' => true,
379
-        ),
380
-        'IBASE_PRP_WM_ASYNC' => array(
381
-            '7.4' => true,
382
-        ),
383
-        'IBASE_PRP_WM_SYNC' => array(
384
-            '7.4' => true,
385
-        ),
386
-        'IBASE_PRP_WRITE_MODE' => array(
387
-            '7.4' => true,
388
-        ),
389
-        'IBASE_READ' => array(
390
-            '7.4' => true,
391
-        ),
392
-        'IBASE_RES_CREATE' => array(
393
-            '7.4' => true,
394
-        ),
395
-        'IBASE_RES_DEACTIVATE_IDX' => array(
396
-            '7.4' => true,
397
-        ),
398
-        'IBASE_RES_NO_SHADOW' => array(
399
-            '7.4' => true,
400
-        ),
401
-        'IBASE_RES_NO_VALIDITY' => array(
402
-            '7.4' => true,
403
-        ),
404
-        'IBASE_RES_ONE_AT_A_TIME' => array(
405
-            '7.4' => true,
406
-        ),
407
-        'IBASE_RES_REPLACE' => array(
408
-            '7.4' => true,
409
-        ),
410
-        'IBASE_RES_USE_ALL_SPACE' => array(
411
-            '7.4' => true,
412
-        ),
413
-        'IBASE_RPR_CHECK_DB' => array(
414
-            '7.4' => true,
415
-        ),
416
-        'IBASE_RPR_FULL' => array(
417
-            '7.4' => true,
418
-        ),
419
-        'IBASE_RPR_IGNORE_CHECKSUM' => array(
420
-            '7.4' => true,
421
-        ),
422
-        'IBASE_RPR_KILL_SHADOWS' => array(
423
-            '7.4' => true,
424
-        ),
425
-        'IBASE_RPR_MEND_DB' => array(
426
-            '7.4' => true,
427
-        ),
428
-        'IBASE_RPR_SWEEP_DB' => array(
429
-            '7.4' => true,
430
-        ),
431
-        'IBASE_RPR_VALIDATE_DB' => array(
432
-            '7.4' => true,
433
-        ),
434
-        'IBASE_STS_DATA_PAGES' => array(
435
-            '7.4' => true,
436
-        ),
437
-        'IBASE_STS_DB_LOG' => array(
438
-            '7.4' => true,
439
-        ),
440
-        'IBASE_STS_HDR_PAGES' => array(
441
-            '7.4' => true,
442
-        ),
443
-        'IBASE_STS_IDX_PAGES' => array(
444
-            '7.4' => true,
445
-        ),
446
-        'IBASE_STS_SYS_RELATIONS' => array(
447
-            '7.4' => true,
448
-        ),
449
-        'IBASE_SVC_GET_ENV' => array(
450
-            '7.4' => true,
451
-        ),
452
-        'IBASE_SVC_GET_ENV_LOCK' => array(
453
-            '7.4' => true,
454
-        ),
455
-        'IBASE_SVC_GET_ENV_MSG' => array(
456
-            '7.4' => true,
457
-        ),
458
-        'IBASE_SVC_GET_USERS' => array(
459
-            '7.4' => true,
460
-        ),
461
-        'IBASE_SVC_IMPLEMENTATION' => array(
462
-            '7.4' => true,
463
-        ),
464
-        'IBASE_SVC_SERVER_VERSION' => array(
465
-            '7.4' => true,
466
-        ),
467
-        'IBASE_SVC_SVR_DB_INFO' => array(
468
-            '7.4' => true,
469
-        ),
470
-        'IBASE_SVC_USER_DBPATH' => array(
471
-            '7.4' => true,
472
-        ),
473
-        'IBASE_UNIXTIME' => array(
474
-            '7.4' => true,
475
-        ),
476
-        'IBASE_WAIT' => array(
477
-            '7.4' => true,
478
-        ),
479
-        'IBASE_WRITE' => array(
480
-            '7.4' => true,
481
-        ),
482
-    );
296
+		'IBASE_BKP_CONVERT' => array(
297
+			'7.4' => true,
298
+		),
299
+		'IBASE_BKP_IGNORE_CHECKSUMS' => array(
300
+			'7.4' => true,
301
+		),
302
+		'IBASE_BKP_IGNORE_LIMBO' => array(
303
+			'7.4' => true,
304
+		),
305
+		'IBASE_BKP_METADATA_ONLY' => array(
306
+			'7.4' => true,
307
+		),
308
+		'IBASE_BKP_NO_GARBAGE_COLLECT' => array(
309
+			'7.4' => true,
310
+		),
311
+		'IBASE_BKP_NON_TRANSPORTABLE' => array(
312
+			'7.4' => true,
313
+		),
314
+		'IBASE_BKP_OLD_DESCRIPTIONS' => array(
315
+			'7.4' => true,
316
+		),
317
+		'IBASE_COMMITTED' => array(
318
+			'7.4' => true,
319
+		),
320
+		'IBASE_CONCURRENCY' => array(
321
+			'7.4' => true,
322
+		),
323
+		'IBASE_CONSISTENCY' => array(
324
+			'7.4' => true,
325
+		),
326
+		'IBASE_DEFAULT' => array(
327
+			'7.4' => true,
328
+		),
329
+		'IBASE_FETCH_ARRAYS' => array(
330
+			'7.4' => true,
331
+		),
332
+		'IBASE_FETCH_BLOBS' => array(
333
+			'7.4' => true,
334
+		),
335
+		'IBASE_NOWAIT' => array(
336
+			'7.4' => true,
337
+		),
338
+		'IBASE_PRP_ACCESS_MODE' => array(
339
+			'7.4' => true,
340
+		),
341
+		'IBASE_PRP_ACTIVATE' => array(
342
+			'7.4' => true,
343
+		),
344
+		'IBASE_PRP_AM_READONLY' => array(
345
+			'7.4' => true,
346
+		),
347
+		'IBASE_PRP_AM_READWRITE' => array(
348
+			'7.4' => true,
349
+		),
350
+		'IBASE_PRP_DENY_NEW_ATTACHMENTS' => array(
351
+			'7.4' => true,
352
+		),
353
+		'IBASE_PRP_DENY_NEW_TRANSACTIONS' => array(
354
+			'7.4' => true,
355
+		),
356
+		'IBASE_PRP_DB_ONLINE' => array(
357
+			'7.4' => true,
358
+		),
359
+		'IBASE_PRP_PAGE_BUFFERS' => array(
360
+			'7.4' => true,
361
+		),
362
+		'IBASE_PRP_RES' => array(
363
+			'7.4' => true,
364
+		),
365
+		'IBASE_PRP_RES_USE_FULL' => array(
366
+			'7.4' => true,
367
+		),
368
+		'IBASE_PRP_RESERVE_SPACE' => array(
369
+			'7.4' => true,
370
+		),
371
+		'IBASE_PRP_SET_SQL_DIALECT' => array(
372
+			'7.4' => true,
373
+		),
374
+		'IBASE_PRP_SHUTDOWN_DB' => array(
375
+			'7.4' => true,
376
+		),
377
+		'IBASE_PRP_SWEEP_INTERVAL' => array(
378
+			'7.4' => true,
379
+		),
380
+		'IBASE_PRP_WM_ASYNC' => array(
381
+			'7.4' => true,
382
+		),
383
+		'IBASE_PRP_WM_SYNC' => array(
384
+			'7.4' => true,
385
+		),
386
+		'IBASE_PRP_WRITE_MODE' => array(
387
+			'7.4' => true,
388
+		),
389
+		'IBASE_READ' => array(
390
+			'7.4' => true,
391
+		),
392
+		'IBASE_RES_CREATE' => array(
393
+			'7.4' => true,
394
+		),
395
+		'IBASE_RES_DEACTIVATE_IDX' => array(
396
+			'7.4' => true,
397
+		),
398
+		'IBASE_RES_NO_SHADOW' => array(
399
+			'7.4' => true,
400
+		),
401
+		'IBASE_RES_NO_VALIDITY' => array(
402
+			'7.4' => true,
403
+		),
404
+		'IBASE_RES_ONE_AT_A_TIME' => array(
405
+			'7.4' => true,
406
+		),
407
+		'IBASE_RES_REPLACE' => array(
408
+			'7.4' => true,
409
+		),
410
+		'IBASE_RES_USE_ALL_SPACE' => array(
411
+			'7.4' => true,
412
+		),
413
+		'IBASE_RPR_CHECK_DB' => array(
414
+			'7.4' => true,
415
+		),
416
+		'IBASE_RPR_FULL' => array(
417
+			'7.4' => true,
418
+		),
419
+		'IBASE_RPR_IGNORE_CHECKSUM' => array(
420
+			'7.4' => true,
421
+		),
422
+		'IBASE_RPR_KILL_SHADOWS' => array(
423
+			'7.4' => true,
424
+		),
425
+		'IBASE_RPR_MEND_DB' => array(
426
+			'7.4' => true,
427
+		),
428
+		'IBASE_RPR_SWEEP_DB' => array(
429
+			'7.4' => true,
430
+		),
431
+		'IBASE_RPR_VALIDATE_DB' => array(
432
+			'7.4' => true,
433
+		),
434
+		'IBASE_STS_DATA_PAGES' => array(
435
+			'7.4' => true,
436
+		),
437
+		'IBASE_STS_DB_LOG' => array(
438
+			'7.4' => true,
439
+		),
440
+		'IBASE_STS_HDR_PAGES' => array(
441
+			'7.4' => true,
442
+		),
443
+		'IBASE_STS_IDX_PAGES' => array(
444
+			'7.4' => true,
445
+		),
446
+		'IBASE_STS_SYS_RELATIONS' => array(
447
+			'7.4' => true,
448
+		),
449
+		'IBASE_SVC_GET_ENV' => array(
450
+			'7.4' => true,
451
+		),
452
+		'IBASE_SVC_GET_ENV_LOCK' => array(
453
+			'7.4' => true,
454
+		),
455
+		'IBASE_SVC_GET_ENV_MSG' => array(
456
+			'7.4' => true,
457
+		),
458
+		'IBASE_SVC_GET_USERS' => array(
459
+			'7.4' => true,
460
+		),
461
+		'IBASE_SVC_IMPLEMENTATION' => array(
462
+			'7.4' => true,
463
+		),
464
+		'IBASE_SVC_SERVER_VERSION' => array(
465
+			'7.4' => true,
466
+		),
467
+		'IBASE_SVC_SVR_DB_INFO' => array(
468
+			'7.4' => true,
469
+		),
470
+		'IBASE_SVC_USER_DBPATH' => array(
471
+			'7.4' => true,
472
+		),
473
+		'IBASE_UNIXTIME' => array(
474
+			'7.4' => true,
475
+		),
476
+		'IBASE_WAIT' => array(
477
+			'7.4' => true,
478
+		),
479
+		'IBASE_WRITE' => array(
480
+			'7.4' => true,
481
+		),
482
+	);
483 483
 
484 484
 
485
-    /**
486
-     * Returns an array of tokens this test wants to listen for.
487
-     *
488
-     * @return array
489
-     */
490
-    public function register()
491
-    {
492
-        return array(\T_STRING);
493
-    }
485
+	/**
486
+	 * Returns an array of tokens this test wants to listen for.
487
+	 *
488
+	 * @return array
489
+	 */
490
+	public function register()
491
+	{
492
+		return array(\T_STRING);
493
+	}
494 494
 
495 495
 
496
-    /**
497
-     * Processes this test, when one of its tokens is encountered.
498
-     *
499
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
500
-     * @param int                   $stackPtr  The position of the current token in
501
-     *                                         the stack passed in $tokens.
502
-     *
503
-     * @return void
504
-     */
505
-    public function process(File $phpcsFile, $stackPtr)
506
-    {
507
-        $tokens       = $phpcsFile->getTokens();
508
-        $constantName = $tokens[$stackPtr]['content'];
496
+	/**
497
+	 * Processes this test, when one of its tokens is encountered.
498
+	 *
499
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
500
+	 * @param int                   $stackPtr  The position of the current token in
501
+	 *                                         the stack passed in $tokens.
502
+	 *
503
+	 * @return void
504
+	 */
505
+	public function process(File $phpcsFile, $stackPtr)
506
+	{
507
+		$tokens       = $phpcsFile->getTokens();
508
+		$constantName = $tokens[$stackPtr]['content'];
509 509
 
510
-        if (isset($this->removedConstants[$constantName]) === false) {
511
-            return;
512
-        }
510
+		if (isset($this->removedConstants[$constantName]) === false) {
511
+			return;
512
+		}
513 513
 
514
-        if ($this->isUseOfGlobalConstant($phpcsFile, $stackPtr) === false) {
515
-            return;
516
-        }
514
+		if ($this->isUseOfGlobalConstant($phpcsFile, $stackPtr) === false) {
515
+			return;
516
+		}
517 517
 
518
-        $itemInfo = array(
519
-            'name' => $constantName,
520
-        );
521
-        $this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
522
-    }
518
+		$itemInfo = array(
519
+			'name' => $constantName,
520
+		);
521
+		$this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
522
+	}
523 523
 
524 524
 
525
-    /**
526
-     * Get the relevant sub-array for a specific item from a multi-dimensional array.
527
-     *
528
-     * @param array $itemInfo Base information about the item.
529
-     *
530
-     * @return array Version and other information about the item.
531
-     */
532
-    public function getItemArray(array $itemInfo)
533
-    {
534
-        return $this->removedConstants[$itemInfo['name']];
535
-    }
525
+	/**
526
+	 * Get the relevant sub-array for a specific item from a multi-dimensional array.
527
+	 *
528
+	 * @param array $itemInfo Base information about the item.
529
+	 *
530
+	 * @return array Version and other information about the item.
531
+	 */
532
+	public function getItemArray(array $itemInfo)
533
+	{
534
+		return $this->removedConstants[$itemInfo['name']];
535
+	}
536 536
 
537 537
 
538
-    /**
539
-     * Get the error message template for this sniff.
540
-     *
541
-     * @return string
542
-     */
543
-    protected function getErrorMsgTemplate()
544
-    {
545
-        return 'The constant "%s" is ';
546
-    }
538
+	/**
539
+	 * Get the error message template for this sniff.
540
+	 *
541
+	 * @return string
542
+	 */
543
+	protected function getErrorMsgTemplate()
544
+	{
545
+		return 'The constant "%s" is ';
546
+	}
547 547
 }
Please login to merge, or discard this patch.
php-compatibility/PHPCompatibility/Sniffs/Interfaces/NewInterfacesSniff.php 1 patch
Indentation   +310 added lines, -310 removed lines patch added patch discarded remove patch
@@ -23,314 +23,314 @@
 block discarded – undo
23 23
 class NewInterfacesSniff extends AbstractNewFeatureSniff
24 24
 {
25 25
 
26
-    /**
27
-     * A list of new interfaces, not present in older versions.
28
-     *
29
-     * The array lists : version number with false (not present) or true (present).
30
-     * If's sufficient to list the first version where the interface appears.
31
-     *
32
-     * @var array(string => array(string => int|string|null))
33
-     */
34
-    protected $newInterfaces = array(
35
-        'Traversable' => array(
36
-            '4.4' => false,
37
-            '5.0' => true,
38
-        ),
39
-        'Reflector' => array(
40
-            '4.4' => false,
41
-            '5.0' => true,
42
-        ),
43
-
44
-        'Countable' => array(
45
-            '5.0' => false,
46
-            '5.1' => true,
47
-        ),
48
-        'OuterIterator' => array(
49
-            '5.0' => false,
50
-            '5.1' => true,
51
-        ),
52
-        'RecursiveIterator' => array(
53
-            '5.0' => false,
54
-            '5.1' => true,
55
-        ),
56
-        'SeekableIterator' => array(
57
-            '5.0' => false,
58
-            '5.1' => true,
59
-        ),
60
-        'Serializable' => array(
61
-            '5.0' => false,
62
-            '5.1' => true,
63
-        ),
64
-        'SplObserver' => array(
65
-            '5.0' => false,
66
-            '5.1' => true,
67
-        ),
68
-        'SplSubject' => array(
69
-            '5.0' => false,
70
-            '5.1' => true,
71
-        ),
72
-
73
-        'JsonSerializable' => array(
74
-            '5.3' => false,
75
-            '5.4' => true,
76
-        ),
77
-        'SessionHandlerInterface' => array(
78
-            '5.3' => false,
79
-            '5.4' => true,
80
-        ),
81
-
82
-        'DateTimeInterface' => array(
83
-            '5.4' => false,
84
-            '5.5' => true,
85
-        ),
86
-
87
-        'SessionIdInterface' => array(
88
-            '5.5.0' => false,
89
-            '5.5.1' => true,
90
-        ),
91
-
92
-        'Throwable' => array(
93
-            '5.6' => false,
94
-            '7.0' => true,
95
-        ),
96
-        'SessionUpdateTimestampHandlerInterface' => array(
97
-            '5.6' => false,
98
-            '7.0' => true,
99
-        ),
100
-    );
101
-
102
-    /**
103
-     * A list of methods which cannot be used in combination with particular interfaces.
104
-     *
105
-     * @var array(string => array(string => string))
106
-     */
107
-    protected $unsupportedMethods = array(
108
-        'Serializable' => array(
109
-            '__sleep'  => 'http://php.net/serializable',
110
-            '__wakeup' => 'http://php.net/serializable',
111
-        ),
112
-    );
113
-
114
-    /**
115
-     * Returns an array of tokens this test wants to listen for.
116
-     *
117
-     * @return array
118
-     */
119
-    public function register()
120
-    {
121
-        // Handle case-insensitivity of interface names.
122
-        $this->newInterfaces      = $this->arrayKeysToLowercase($this->newInterfaces);
123
-        $this->unsupportedMethods = $this->arrayKeysToLowercase($this->unsupportedMethods);
124
-
125
-        $targets = array(
126
-            \T_CLASS,
127
-            \T_FUNCTION,
128
-            \T_CLOSURE,
129
-        );
130
-
131
-        if (\defined('T_ANON_CLASS')) {
132
-            $targets[] = \T_ANON_CLASS;
133
-        }
134
-
135
-        if (\defined('T_RETURN_TYPE')) {
136
-            $targets[] = \T_RETURN_TYPE;
137
-        }
138
-
139
-        return $targets;
140
-    }
141
-
142
-
143
-    /**
144
-     * Processes this test, when one of its tokens is encountered.
145
-     *
146
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
147
-     * @param int                   $stackPtr  The position of the current token in
148
-     *                                         the stack passed in $tokens.
149
-     *
150
-     * @return void
151
-     */
152
-    public function process(File $phpcsFile, $stackPtr)
153
-    {
154
-        $tokens = $phpcsFile->getTokens();
155
-
156
-        switch ($tokens[$stackPtr]['type']) {
157
-            case 'T_CLASS':
158
-            case 'T_ANON_CLASS':
159
-                $this->processClassToken($phpcsFile, $stackPtr);
160
-                break;
161
-
162
-            case 'T_FUNCTION':
163
-            case 'T_CLOSURE':
164
-                $this->processFunctionToken($phpcsFile, $stackPtr);
165
-
166
-                // Deal with older PHPCS versions which don't recognize return type hints
167
-                // as well as newer PHPCS versions (3.3.0+) where the tokenization has changed.
168
-                $returnTypeHint = $this->getReturnTypeHintToken($phpcsFile, $stackPtr);
169
-                if ($returnTypeHint !== false) {
170
-                    $this->processReturnTypeToken($phpcsFile, $returnTypeHint);
171
-                }
172
-                break;
173
-
174
-            case 'T_RETURN_TYPE':
175
-                $this->processReturnTypeToken($phpcsFile, $stackPtr);
176
-                break;
177
-
178
-            default:
179
-                // Deliberately left empty.
180
-                break;
181
-        }
182
-    }
183
-
184
-
185
-    /**
186
-     * Processes this test for when a class token is encountered.
187
-     *
188
-     * - Detect classes implementing the new interfaces.
189
-     * - Detect classes implementing the new interfaces with unsupported functions.
190
-     *
191
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
192
-     * @param int                   $stackPtr  The position of the current token in
193
-     *                                         the stack passed in $tokens.
194
-     *
195
-     * @return void
196
-     */
197
-    private function processClassToken(File $phpcsFile, $stackPtr)
198
-    {
199
-        $interfaces = PHPCSHelper::findImplementedInterfaceNames($phpcsFile, $stackPtr);
200
-
201
-        if (\is_array($interfaces) === false || $interfaces === array()) {
202
-            return;
203
-        }
204
-
205
-        $tokens       = $phpcsFile->getTokens();
206
-        $checkMethods = false;
207
-
208
-        if (isset($tokens[$stackPtr]['scope_closer'])) {
209
-            $checkMethods = true;
210
-            $scopeCloser  = $tokens[$stackPtr]['scope_closer'];
211
-        }
212
-
213
-        foreach ($interfaces as $interface) {
214
-            $interface   = ltrim($interface, '\\');
215
-            $interfaceLc = strtolower($interface);
216
-
217
-            if (isset($this->newInterfaces[$interfaceLc]) === true) {
218
-                $itemInfo = array(
219
-                    'name'   => $interface,
220
-                    'nameLc' => $interfaceLc,
221
-                );
222
-                $this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
223
-            }
224
-
225
-            if ($checkMethods === true && isset($this->unsupportedMethods[$interfaceLc]) === true) {
226
-                $nextFunc = $stackPtr;
227
-                while (($nextFunc = $phpcsFile->findNext(\T_FUNCTION, ($nextFunc + 1), $scopeCloser)) !== false) {
228
-                    $funcName   = $phpcsFile->getDeclarationName($nextFunc);
229
-                    $funcNameLc = strtolower($funcName);
230
-                    if ($funcNameLc === '') {
231
-                        continue;
232
-                    }
233
-
234
-                    if (isset($this->unsupportedMethods[$interfaceLc][$funcNameLc]) === true) {
235
-                        $error     = 'Classes that implement interface %s do not support the method %s(). See %s';
236
-                        $errorCode = $this->stringToErrorCode($interface) . 'UnsupportedMethod';
237
-                        $data      = array(
238
-                            $interface,
239
-                            $funcName,
240
-                            $this->unsupportedMethods[$interfaceLc][$funcNameLc],
241
-                        );
242
-
243
-                        $phpcsFile->addError($error, $nextFunc, $errorCode, $data);
244
-                    }
245
-                }
246
-            }
247
-        }
248
-    }
249
-
250
-
251
-    /**
252
-     * Processes this test for when a function token is encountered.
253
-     *
254
-     * - Detect new interfaces when used as a type hint.
255
-     *
256
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
257
-     * @param int                   $stackPtr  The position of the current token in
258
-     *                                         the stack passed in $tokens.
259
-     *
260
-     * @return void
261
-     */
262
-    private function processFunctionToken(File $phpcsFile, $stackPtr)
263
-    {
264
-        $typeHints = $this->getTypeHintsFromFunctionDeclaration($phpcsFile, $stackPtr);
265
-        if (empty($typeHints) || \is_array($typeHints) === false) {
266
-            return;
267
-        }
268
-
269
-        foreach ($typeHints as $hint) {
270
-
271
-            $typeHintLc = strtolower($hint);
272
-
273
-            if (isset($this->newInterfaces[$typeHintLc]) === true) {
274
-                $itemInfo = array(
275
-                    'name'   => $hint,
276
-                    'nameLc' => $typeHintLc,
277
-                );
278
-                $this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
279
-            }
280
-        }
281
-    }
282
-
283
-
284
-    /**
285
-     * Processes this test for when a return type token is encountered.
286
-     *
287
-     * - Detect new interfaces when used as a return type declaration.
288
-     *
289
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
290
-     * @param int                   $stackPtr  The position of the current token in
291
-     *                                         the stack passed in $tokens.
292
-     *
293
-     * @return void
294
-     */
295
-    private function processReturnTypeToken(File $phpcsFile, $stackPtr)
296
-    {
297
-        $returnTypeHint   = $this->getReturnTypeHintName($phpcsFile, $stackPtr);
298
-        $returnTypeHint   = ltrim($returnTypeHint, '\\');
299
-        $returnTypeHintLc = strtolower($returnTypeHint);
300
-
301
-        if (isset($this->newInterfaces[$returnTypeHintLc]) === false) {
302
-            return;
303
-        }
304
-
305
-        // Still here ? Then this is a return type declaration using a new interface.
306
-        $itemInfo = array(
307
-            'name'   => $returnTypeHint,
308
-            'nameLc' => $returnTypeHintLc,
309
-        );
310
-        $this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
311
-    }
312
-
313
-
314
-    /**
315
-     * Get the relevant sub-array for a specific item from a multi-dimensional array.
316
-     *
317
-     * @param array $itemInfo Base information about the item.
318
-     *
319
-     * @return array Version and other information about the item.
320
-     */
321
-    public function getItemArray(array $itemInfo)
322
-    {
323
-        return $this->newInterfaces[$itemInfo['nameLc']];
324
-    }
325
-
326
-
327
-    /**
328
-     * Get the error message template for this sniff.
329
-     *
330
-     * @return string
331
-     */
332
-    protected function getErrorMsgTemplate()
333
-    {
334
-        return 'The built-in interface ' . parent::getErrorMsgTemplate();
335
-    }
26
+	/**
27
+	 * A list of new interfaces, not present in older versions.
28
+	 *
29
+	 * The array lists : version number with false (not present) or true (present).
30
+	 * If's sufficient to list the first version where the interface appears.
31
+	 *
32
+	 * @var array(string => array(string => int|string|null))
33
+	 */
34
+	protected $newInterfaces = array(
35
+		'Traversable' => array(
36
+			'4.4' => false,
37
+			'5.0' => true,
38
+		),
39
+		'Reflector' => array(
40
+			'4.4' => false,
41
+			'5.0' => true,
42
+		),
43
+
44
+		'Countable' => array(
45
+			'5.0' => false,
46
+			'5.1' => true,
47
+		),
48
+		'OuterIterator' => array(
49
+			'5.0' => false,
50
+			'5.1' => true,
51
+		),
52
+		'RecursiveIterator' => array(
53
+			'5.0' => false,
54
+			'5.1' => true,
55
+		),
56
+		'SeekableIterator' => array(
57
+			'5.0' => false,
58
+			'5.1' => true,
59
+		),
60
+		'Serializable' => array(
61
+			'5.0' => false,
62
+			'5.1' => true,
63
+		),
64
+		'SplObserver' => array(
65
+			'5.0' => false,
66
+			'5.1' => true,
67
+		),
68
+		'SplSubject' => array(
69
+			'5.0' => false,
70
+			'5.1' => true,
71
+		),
72
+
73
+		'JsonSerializable' => array(
74
+			'5.3' => false,
75
+			'5.4' => true,
76
+		),
77
+		'SessionHandlerInterface' => array(
78
+			'5.3' => false,
79
+			'5.4' => true,
80
+		),
81
+
82
+		'DateTimeInterface' => array(
83
+			'5.4' => false,
84
+			'5.5' => true,
85
+		),
86
+
87
+		'SessionIdInterface' => array(
88
+			'5.5.0' => false,
89
+			'5.5.1' => true,
90
+		),
91
+
92
+		'Throwable' => array(
93
+			'5.6' => false,
94
+			'7.0' => true,
95
+		),
96
+		'SessionUpdateTimestampHandlerInterface' => array(
97
+			'5.6' => false,
98
+			'7.0' => true,
99
+		),
100
+	);
101
+
102
+	/**
103
+	 * A list of methods which cannot be used in combination with particular interfaces.
104
+	 *
105
+	 * @var array(string => array(string => string))
106
+	 */
107
+	protected $unsupportedMethods = array(
108
+		'Serializable' => array(
109
+			'__sleep'  => 'http://php.net/serializable',
110
+			'__wakeup' => 'http://php.net/serializable',
111
+		),
112
+	);
113
+
114
+	/**
115
+	 * Returns an array of tokens this test wants to listen for.
116
+	 *
117
+	 * @return array
118
+	 */
119
+	public function register()
120
+	{
121
+		// Handle case-insensitivity of interface names.
122
+		$this->newInterfaces      = $this->arrayKeysToLowercase($this->newInterfaces);
123
+		$this->unsupportedMethods = $this->arrayKeysToLowercase($this->unsupportedMethods);
124
+
125
+		$targets = array(
126
+			\T_CLASS,
127
+			\T_FUNCTION,
128
+			\T_CLOSURE,
129
+		);
130
+
131
+		if (\defined('T_ANON_CLASS')) {
132
+			$targets[] = \T_ANON_CLASS;
133
+		}
134
+
135
+		if (\defined('T_RETURN_TYPE')) {
136
+			$targets[] = \T_RETURN_TYPE;
137
+		}
138
+
139
+		return $targets;
140
+	}
141
+
142
+
143
+	/**
144
+	 * Processes this test, when one of its tokens is encountered.
145
+	 *
146
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
147
+	 * @param int                   $stackPtr  The position of the current token in
148
+	 *                                         the stack passed in $tokens.
149
+	 *
150
+	 * @return void
151
+	 */
152
+	public function process(File $phpcsFile, $stackPtr)
153
+	{
154
+		$tokens = $phpcsFile->getTokens();
155
+
156
+		switch ($tokens[$stackPtr]['type']) {
157
+			case 'T_CLASS':
158
+			case 'T_ANON_CLASS':
159
+				$this->processClassToken($phpcsFile, $stackPtr);
160
+				break;
161
+
162
+			case 'T_FUNCTION':
163
+			case 'T_CLOSURE':
164
+				$this->processFunctionToken($phpcsFile, $stackPtr);
165
+
166
+				// Deal with older PHPCS versions which don't recognize return type hints
167
+				// as well as newer PHPCS versions (3.3.0+) where the tokenization has changed.
168
+				$returnTypeHint = $this->getReturnTypeHintToken($phpcsFile, $stackPtr);
169
+				if ($returnTypeHint !== false) {
170
+					$this->processReturnTypeToken($phpcsFile, $returnTypeHint);
171
+				}
172
+				break;
173
+
174
+			case 'T_RETURN_TYPE':
175
+				$this->processReturnTypeToken($phpcsFile, $stackPtr);
176
+				break;
177
+
178
+			default:
179
+				// Deliberately left empty.
180
+				break;
181
+		}
182
+	}
183
+
184
+
185
+	/**
186
+	 * Processes this test for when a class token is encountered.
187
+	 *
188
+	 * - Detect classes implementing the new interfaces.
189
+	 * - Detect classes implementing the new interfaces with unsupported functions.
190
+	 *
191
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
192
+	 * @param int                   $stackPtr  The position of the current token in
193
+	 *                                         the stack passed in $tokens.
194
+	 *
195
+	 * @return void
196
+	 */
197
+	private function processClassToken(File $phpcsFile, $stackPtr)
198
+	{
199
+		$interfaces = PHPCSHelper::findImplementedInterfaceNames($phpcsFile, $stackPtr);
200
+
201
+		if (\is_array($interfaces) === false || $interfaces === array()) {
202
+			return;
203
+		}
204
+
205
+		$tokens       = $phpcsFile->getTokens();
206
+		$checkMethods = false;
207
+
208
+		if (isset($tokens[$stackPtr]['scope_closer'])) {
209
+			$checkMethods = true;
210
+			$scopeCloser  = $tokens[$stackPtr]['scope_closer'];
211
+		}
212
+
213
+		foreach ($interfaces as $interface) {
214
+			$interface   = ltrim($interface, '\\');
215
+			$interfaceLc = strtolower($interface);
216
+
217
+			if (isset($this->newInterfaces[$interfaceLc]) === true) {
218
+				$itemInfo = array(
219
+					'name'   => $interface,
220
+					'nameLc' => $interfaceLc,
221
+				);
222
+				$this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
223
+			}
224
+
225
+			if ($checkMethods === true && isset($this->unsupportedMethods[$interfaceLc]) === true) {
226
+				$nextFunc = $stackPtr;
227
+				while (($nextFunc = $phpcsFile->findNext(\T_FUNCTION, ($nextFunc + 1), $scopeCloser)) !== false) {
228
+					$funcName   = $phpcsFile->getDeclarationName($nextFunc);
229
+					$funcNameLc = strtolower($funcName);
230
+					if ($funcNameLc === '') {
231
+						continue;
232
+					}
233
+
234
+					if (isset($this->unsupportedMethods[$interfaceLc][$funcNameLc]) === true) {
235
+						$error     = 'Classes that implement interface %s do not support the method %s(). See %s';
236
+						$errorCode = $this->stringToErrorCode($interface) . 'UnsupportedMethod';
237
+						$data      = array(
238
+							$interface,
239
+							$funcName,
240
+							$this->unsupportedMethods[$interfaceLc][$funcNameLc],
241
+						);
242
+
243
+						$phpcsFile->addError($error, $nextFunc, $errorCode, $data);
244
+					}
245
+				}
246
+			}
247
+		}
248
+	}
249
+
250
+
251
+	/**
252
+	 * Processes this test for when a function token is encountered.
253
+	 *
254
+	 * - Detect new interfaces when used as a type hint.
255
+	 *
256
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
257
+	 * @param int                   $stackPtr  The position of the current token in
258
+	 *                                         the stack passed in $tokens.
259
+	 *
260
+	 * @return void
261
+	 */
262
+	private function processFunctionToken(File $phpcsFile, $stackPtr)
263
+	{
264
+		$typeHints = $this->getTypeHintsFromFunctionDeclaration($phpcsFile, $stackPtr);
265
+		if (empty($typeHints) || \is_array($typeHints) === false) {
266
+			return;
267
+		}
268
+
269
+		foreach ($typeHints as $hint) {
270
+
271
+			$typeHintLc = strtolower($hint);
272
+
273
+			if (isset($this->newInterfaces[$typeHintLc]) === true) {
274
+				$itemInfo = array(
275
+					'name'   => $hint,
276
+					'nameLc' => $typeHintLc,
277
+				);
278
+				$this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
279
+			}
280
+		}
281
+	}
282
+
283
+
284
+	/**
285
+	 * Processes this test for when a return type token is encountered.
286
+	 *
287
+	 * - Detect new interfaces when used as a return type declaration.
288
+	 *
289
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
290
+	 * @param int                   $stackPtr  The position of the current token in
291
+	 *                                         the stack passed in $tokens.
292
+	 *
293
+	 * @return void
294
+	 */
295
+	private function processReturnTypeToken(File $phpcsFile, $stackPtr)
296
+	{
297
+		$returnTypeHint   = $this->getReturnTypeHintName($phpcsFile, $stackPtr);
298
+		$returnTypeHint   = ltrim($returnTypeHint, '\\');
299
+		$returnTypeHintLc = strtolower($returnTypeHint);
300
+
301
+		if (isset($this->newInterfaces[$returnTypeHintLc]) === false) {
302
+			return;
303
+		}
304
+
305
+		// Still here ? Then this is a return type declaration using a new interface.
306
+		$itemInfo = array(
307
+			'name'   => $returnTypeHint,
308
+			'nameLc' => $returnTypeHintLc,
309
+		);
310
+		$this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
311
+	}
312
+
313
+
314
+	/**
315
+	 * Get the relevant sub-array for a specific item from a multi-dimensional array.
316
+	 *
317
+	 * @param array $itemInfo Base information about the item.
318
+	 *
319
+	 * @return array Version and other information about the item.
320
+	 */
321
+	public function getItemArray(array $itemInfo)
322
+	{
323
+		return $this->newInterfaces[$itemInfo['nameLc']];
324
+	}
325
+
326
+
327
+	/**
328
+	 * Get the error message template for this sniff.
329
+	 *
330
+	 * @return string
331
+	 */
332
+	protected function getErrorMsgTemplate()
333
+	{
334
+		return 'The built-in interface ' . parent::getErrorMsgTemplate();
335
+	}
336 336
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/Interfaces/InternalInterfacesSniff.php 1 patch
Indentation   +56 added lines, -56 removed lines patch added patch discarded remove patch
@@ -23,70 +23,70 @@
 block discarded – undo
23 23
 class InternalInterfacesSniff extends Sniff
24 24
 {
25 25
 
26
-    /**
27
-     * A list of PHP internal interfaces, not intended to be implemented by userland classes.
28
-     *
29
-     * The array lists : the error message to use.
30
-     *
31
-     * @var array(string => string)
32
-     */
33
-    protected $internalInterfaces = array(
34
-        'Traversable'       => 'shouldn\'t be implemented directly, implement the Iterator or IteratorAggregate interface instead.',
35
-        'DateTimeInterface' => 'is intended for type hints only and is not implementable.',
36
-        'Throwable'         => 'cannot be implemented directly, extend the Exception class instead.',
37
-    );
26
+	/**
27
+	 * A list of PHP internal interfaces, not intended to be implemented by userland classes.
28
+	 *
29
+	 * The array lists : the error message to use.
30
+	 *
31
+	 * @var array(string => string)
32
+	 */
33
+	protected $internalInterfaces = array(
34
+		'Traversable'       => 'shouldn\'t be implemented directly, implement the Iterator or IteratorAggregate interface instead.',
35
+		'DateTimeInterface' => 'is intended for type hints only and is not implementable.',
36
+		'Throwable'         => 'cannot be implemented directly, extend the Exception class instead.',
37
+	);
38 38
 
39 39
 
40
-    /**
41
-     * Returns an array of tokens this test wants to listen for.
42
-     *
43
-     * @return array
44
-     */
45
-    public function register()
46
-    {
47
-        // Handle case-insensitivity of interface names.
48
-        $this->internalInterfaces = $this->arrayKeysToLowercase($this->internalInterfaces);
40
+	/**
41
+	 * Returns an array of tokens this test wants to listen for.
42
+	 *
43
+	 * @return array
44
+	 */
45
+	public function register()
46
+	{
47
+		// Handle case-insensitivity of interface names.
48
+		$this->internalInterfaces = $this->arrayKeysToLowercase($this->internalInterfaces);
49 49
 
50
-        $targets = array(\T_CLASS);
50
+		$targets = array(\T_CLASS);
51 51
 
52
-        if (\defined('T_ANON_CLASS')) {
53
-            $targets[] = \T_ANON_CLASS;
54
-        }
52
+		if (\defined('T_ANON_CLASS')) {
53
+			$targets[] = \T_ANON_CLASS;
54
+		}
55 55
 
56
-        return $targets;
57
-    }
56
+		return $targets;
57
+	}
58 58
 
59 59
 
60
-    /**
61
-     * Processes this test, when one of its tokens is encountered.
62
-     *
63
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
64
-     * @param int                   $stackPtr  The position of the current token in
65
-     *                                         the stack passed in $tokens.
66
-     *
67
-     * @return void
68
-     */
69
-    public function process(File $phpcsFile, $stackPtr)
70
-    {
71
-        $interfaces = PHPCSHelper::findImplementedInterfaceNames($phpcsFile, $stackPtr);
60
+	/**
61
+	 * Processes this test, when one of its tokens is encountered.
62
+	 *
63
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
64
+	 * @param int                   $stackPtr  The position of the current token in
65
+	 *                                         the stack passed in $tokens.
66
+	 *
67
+	 * @return void
68
+	 */
69
+	public function process(File $phpcsFile, $stackPtr)
70
+	{
71
+		$interfaces = PHPCSHelper::findImplementedInterfaceNames($phpcsFile, $stackPtr);
72 72
 
73
-        if (\is_array($interfaces) === false || $interfaces === array()) {
74
-            return;
75
-        }
73
+		if (\is_array($interfaces) === false || $interfaces === array()) {
74
+			return;
75
+		}
76 76
 
77
-        foreach ($interfaces as $interface) {
78
-            $interface   = ltrim($interface, '\\');
79
-            $interfaceLc = strtolower($interface);
80
-            if (isset($this->internalInterfaces[$interfaceLc]) === true) {
81
-                $error     = 'The interface %s %s';
82
-                $errorCode = $this->stringToErrorCode($interfaceLc) . 'Found';
83
-                $data      = array(
84
-                    $interface,
85
-                    $this->internalInterfaces[$interfaceLc],
86
-                );
77
+		foreach ($interfaces as $interface) {
78
+			$interface   = ltrim($interface, '\\');
79
+			$interfaceLc = strtolower($interface);
80
+			if (isset($this->internalInterfaces[$interfaceLc]) === true) {
81
+				$error     = 'The interface %s %s';
82
+				$errorCode = $this->stringToErrorCode($interfaceLc) . 'Found';
83
+				$data      = array(
84
+					$interface,
85
+					$this->internalInterfaces[$interfaceLc],
86
+				);
87 87
 
88
-                $phpcsFile->addError($error, $stackPtr, $errorCode, $data);
89
-            }
90
-        }
91
-    }
88
+				$phpcsFile->addError($error, $stackPtr, $errorCode, $data);
89
+			}
90
+		}
91
+	}
92 92
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/Miscellaneous/ValidIntegersSniff.php 1 patch
Indentation   +195 added lines, -195 removed lines patch added patch discarded remove patch
@@ -22,199 +22,199 @@
 block discarded – undo
22 22
 class ValidIntegersSniff extends Sniff
23 23
 {
24 24
 
25
-    /**
26
-     * Whether PHPCS is run on a PHP < 5.4.
27
-     *
28
-     * @var bool
29
-     */
30
-    protected $isLowPHPVersion = false;
31
-
32
-    /**
33
-     * Returns an array of tokens this test wants to listen for.
34
-     *
35
-     * @return array
36
-     */
37
-    public function register()
38
-    {
39
-        $this->isLowPHPVersion = version_compare(\PHP_VERSION_ID, '50400', '<');
40
-
41
-        return array(
42
-            \T_LNUMBER, // Binary, octal integers.
43
-            \T_CONSTANT_ENCAPSED_STRING, // Hex numeric string.
44
-        );
45
-    }
46
-
47
-
48
-    /**
49
-     * Processes this test, when one of its tokens is encountered.
50
-     *
51
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
52
-     * @param int                   $stackPtr  The position of the current token in
53
-     *                                         the stack.
54
-     *
55
-     * @return void
56
-     */
57
-    public function process(File $phpcsFile, $stackPtr)
58
-    {
59
-        $tokens = $phpcsFile->getTokens();
60
-        $token  = $tokens[$stackPtr];
61
-
62
-        if ($this->couldBeBinaryInteger($tokens, $stackPtr) === true) {
63
-            if ($this->supportsBelow('5.3')) {
64
-                $error = 'Binary integer literals were not present in PHP version 5.3 or earlier. Found: %s';
65
-                if ($this->isLowPHPVersion === false) {
66
-                    $data = array($token['content']);
67
-                } else {
68
-                    $data = array($this->getBinaryInteger($phpcsFile, $tokens, $stackPtr));
69
-                }
70
-                $phpcsFile->addError($error, $stackPtr, 'BinaryIntegerFound', $data);
71
-            }
72
-
73
-            if ($this->isInvalidBinaryInteger($tokens, $stackPtr) === true) {
74
-                $error = 'Invalid binary integer detected. Found: %s';
75
-                $data  = array($this->getBinaryInteger($phpcsFile, $tokens, $stackPtr));
76
-                $phpcsFile->addWarning($error, $stackPtr, 'InvalidBinaryIntegerFound', $data);
77
-            }
78
-            return;
79
-        }
80
-
81
-        $isError = $this->supportsAbove('7.0');
82
-        $data    = array( $token['content'] );
83
-
84
-        if ($this->isInvalidOctalInteger($tokens, $stackPtr) === true) {
85
-            $this->addMessage(
86
-                $phpcsFile,
87
-                'Invalid octal integer detected. Prior to PHP 7 this would lead to a truncated number. From PHP 7 onwards this causes a parse error. Found: %s',
88
-                $stackPtr,
89
-                $isError,
90
-                'InvalidOctalIntegerFound',
91
-                $data
92
-            );
93
-            return;
94
-        }
95
-
96
-        if ($this->isHexidecimalNumericString($tokens, $stackPtr) === true) {
97
-            $this->addMessage(
98
-                $phpcsFile,
99
-                'The behaviour of hexadecimal numeric strings was inconsistent prior to PHP 7 and support has been removed in PHP 7. Found: %s',
100
-                $stackPtr,
101
-                $isError,
102
-                'HexNumericStringFound',
103
-                $data
104
-            );
105
-            return;
106
-        }
107
-    }
108
-
109
-
110
-    /**
111
-     * Could the current token an potentially be a binary integer ?
112
-     *
113
-     * @param array $tokens   Token stack.
114
-     * @param int   $stackPtr The current position in the token stack.
115
-     *
116
-     * @return bool
117
-     */
118
-    private function couldBeBinaryInteger($tokens, $stackPtr)
119
-    {
120
-        $token = $tokens[$stackPtr];
121
-
122
-        if ($token['code'] !== \T_LNUMBER) {
123
-            return false;
124
-        }
125
-
126
-        if ($this->isLowPHPVersion === false) {
127
-            return (preg_match('`^0b[0-1]+$`D', $token['content']) === 1);
128
-        }
129
-        // Pre-5.4, binary strings are tokenized as T_LNUMBER (0) + T_STRING ("b01010101").
130
-        // At this point, we don't yet care whether it's a valid binary int, that's a separate check.
131
-        else {
132
-            return($token['content'] === '0' && $tokens[$stackPtr + 1]['code'] === \T_STRING && preg_match('`^b[0-9]+$`D', $tokens[$stackPtr + 1]['content']) === 1);
133
-        }
134
-    }
135
-
136
-    /**
137
-     * Is the current token an invalid binary integer ?
138
-     *
139
-     * @param array $tokens   Token stack.
140
-     * @param int   $stackPtr The current position in the token stack.
141
-     *
142
-     * @return bool
143
-     */
144
-    private function isInvalidBinaryInteger($tokens, $stackPtr)
145
-    {
146
-        if ($this->couldBeBinaryInteger($tokens, $stackPtr) === false) {
147
-            return false;
148
-        }
149
-
150
-        if ($this->isLowPHPVersion === false) {
151
-            // If it's an invalid binary int, the token will be split into two T_LNUMBER tokens.
152
-            return ($tokens[$stackPtr + 1]['code'] === \T_LNUMBER);
153
-        } else {
154
-            return (preg_match('`^b[0-1]+$`D', $tokens[$stackPtr + 1]['content']) === 0);
155
-        }
156
-    }
157
-
158
-    /**
159
-     * Retrieve the content of the tokens which together look like a binary integer.
160
-     *
161
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
162
-     * @param array                 $tokens    Token stack.
163
-     * @param int                   $stackPtr  The position of the current token in
164
-     *                                         the stack.
165
-     *
166
-     * @return string
167
-     */
168
-    private function getBinaryInteger(File $phpcsFile, $tokens, $stackPtr)
169
-    {
170
-        $length = 2; // PHP < 5.4 T_LNUMBER + T_STRING.
171
-
172
-        if ($this->isLowPHPVersion === false) {
173
-            $i = $stackPtr;
174
-            while ($tokens[$i]['code'] === \T_LNUMBER) {
175
-                $i++;
176
-            }
177
-            $length = ($i - $stackPtr);
178
-        }
179
-
180
-        return $phpcsFile->getTokensAsString($stackPtr, $length);
181
-    }
182
-
183
-    /**
184
-     * Is the current token an invalid octal integer ?
185
-     *
186
-     * @param array $tokens   Token stack.
187
-     * @param int   $stackPtr The current position in the token stack.
188
-     *
189
-     * @return bool
190
-     */
191
-    private function isInvalidOctalInteger($tokens, $stackPtr)
192
-    {
193
-        $token = $tokens[$stackPtr];
194
-
195
-        if ($token['code'] === \T_LNUMBER && preg_match('`^0[0-7]*[8-9]+[0-9]*$`D', $token['content']) === 1) {
196
-            return true;
197
-        }
198
-
199
-        return false;
200
-    }
201
-
202
-    /**
203
-     * Is the current token a hexidecimal numeric string ?
204
-     *
205
-     * @param array $tokens   Token stack.
206
-     * @param int   $stackPtr The current position in the token stack.
207
-     *
208
-     * @return bool
209
-     */
210
-    private function isHexidecimalNumericString($tokens, $stackPtr)
211
-    {
212
-        $token = $tokens[$stackPtr];
213
-
214
-        if ($token['code'] === \T_CONSTANT_ENCAPSED_STRING && preg_match('`^0x[a-f0-9]+$`iD', $this->stripQuotes($token['content'])) === 1) {
215
-            return true;
216
-        }
217
-
218
-        return false;
219
-    }
25
+	/**
26
+	 * Whether PHPCS is run on a PHP < 5.4.
27
+	 *
28
+	 * @var bool
29
+	 */
30
+	protected $isLowPHPVersion = false;
31
+
32
+	/**
33
+	 * Returns an array of tokens this test wants to listen for.
34
+	 *
35
+	 * @return array
36
+	 */
37
+	public function register()
38
+	{
39
+		$this->isLowPHPVersion = version_compare(\PHP_VERSION_ID, '50400', '<');
40
+
41
+		return array(
42
+			\T_LNUMBER, // Binary, octal integers.
43
+			\T_CONSTANT_ENCAPSED_STRING, // Hex numeric string.
44
+		);
45
+	}
46
+
47
+
48
+	/**
49
+	 * Processes this test, when one of its tokens is encountered.
50
+	 *
51
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
52
+	 * @param int                   $stackPtr  The position of the current token in
53
+	 *                                         the stack.
54
+	 *
55
+	 * @return void
56
+	 */
57
+	public function process(File $phpcsFile, $stackPtr)
58
+	{
59
+		$tokens = $phpcsFile->getTokens();
60
+		$token  = $tokens[$stackPtr];
61
+
62
+		if ($this->couldBeBinaryInteger($tokens, $stackPtr) === true) {
63
+			if ($this->supportsBelow('5.3')) {
64
+				$error = 'Binary integer literals were not present in PHP version 5.3 or earlier. Found: %s';
65
+				if ($this->isLowPHPVersion === false) {
66
+					$data = array($token['content']);
67
+				} else {
68
+					$data = array($this->getBinaryInteger($phpcsFile, $tokens, $stackPtr));
69
+				}
70
+				$phpcsFile->addError($error, $stackPtr, 'BinaryIntegerFound', $data);
71
+			}
72
+
73
+			if ($this->isInvalidBinaryInteger($tokens, $stackPtr) === true) {
74
+				$error = 'Invalid binary integer detected. Found: %s';
75
+				$data  = array($this->getBinaryInteger($phpcsFile, $tokens, $stackPtr));
76
+				$phpcsFile->addWarning($error, $stackPtr, 'InvalidBinaryIntegerFound', $data);
77
+			}
78
+			return;
79
+		}
80
+
81
+		$isError = $this->supportsAbove('7.0');
82
+		$data    = array( $token['content'] );
83
+
84
+		if ($this->isInvalidOctalInteger($tokens, $stackPtr) === true) {
85
+			$this->addMessage(
86
+				$phpcsFile,
87
+				'Invalid octal integer detected. Prior to PHP 7 this would lead to a truncated number. From PHP 7 onwards this causes a parse error. Found: %s',
88
+				$stackPtr,
89
+				$isError,
90
+				'InvalidOctalIntegerFound',
91
+				$data
92
+			);
93
+			return;
94
+		}
95
+
96
+		if ($this->isHexidecimalNumericString($tokens, $stackPtr) === true) {
97
+			$this->addMessage(
98
+				$phpcsFile,
99
+				'The behaviour of hexadecimal numeric strings was inconsistent prior to PHP 7 and support has been removed in PHP 7. Found: %s',
100
+				$stackPtr,
101
+				$isError,
102
+				'HexNumericStringFound',
103
+				$data
104
+			);
105
+			return;
106
+		}
107
+	}
108
+
109
+
110
+	/**
111
+	 * Could the current token an potentially be a binary integer ?
112
+	 *
113
+	 * @param array $tokens   Token stack.
114
+	 * @param int   $stackPtr The current position in the token stack.
115
+	 *
116
+	 * @return bool
117
+	 */
118
+	private function couldBeBinaryInteger($tokens, $stackPtr)
119
+	{
120
+		$token = $tokens[$stackPtr];
121
+
122
+		if ($token['code'] !== \T_LNUMBER) {
123
+			return false;
124
+		}
125
+
126
+		if ($this->isLowPHPVersion === false) {
127
+			return (preg_match('`^0b[0-1]+$`D', $token['content']) === 1);
128
+		}
129
+		// Pre-5.4, binary strings are tokenized as T_LNUMBER (0) + T_STRING ("b01010101").
130
+		// At this point, we don't yet care whether it's a valid binary int, that's a separate check.
131
+		else {
132
+			return($token['content'] === '0' && $tokens[$stackPtr + 1]['code'] === \T_STRING && preg_match('`^b[0-9]+$`D', $tokens[$stackPtr + 1]['content']) === 1);
133
+		}
134
+	}
135
+
136
+	/**
137
+	 * Is the current token an invalid binary integer ?
138
+	 *
139
+	 * @param array $tokens   Token stack.
140
+	 * @param int   $stackPtr The current position in the token stack.
141
+	 *
142
+	 * @return bool
143
+	 */
144
+	private function isInvalidBinaryInteger($tokens, $stackPtr)
145
+	{
146
+		if ($this->couldBeBinaryInteger($tokens, $stackPtr) === false) {
147
+			return false;
148
+		}
149
+
150
+		if ($this->isLowPHPVersion === false) {
151
+			// If it's an invalid binary int, the token will be split into two T_LNUMBER tokens.
152
+			return ($tokens[$stackPtr + 1]['code'] === \T_LNUMBER);
153
+		} else {
154
+			return (preg_match('`^b[0-1]+$`D', $tokens[$stackPtr + 1]['content']) === 0);
155
+		}
156
+	}
157
+
158
+	/**
159
+	 * Retrieve the content of the tokens which together look like a binary integer.
160
+	 *
161
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
162
+	 * @param array                 $tokens    Token stack.
163
+	 * @param int                   $stackPtr  The position of the current token in
164
+	 *                                         the stack.
165
+	 *
166
+	 * @return string
167
+	 */
168
+	private function getBinaryInteger(File $phpcsFile, $tokens, $stackPtr)
169
+	{
170
+		$length = 2; // PHP < 5.4 T_LNUMBER + T_STRING.
171
+
172
+		if ($this->isLowPHPVersion === false) {
173
+			$i = $stackPtr;
174
+			while ($tokens[$i]['code'] === \T_LNUMBER) {
175
+				$i++;
176
+			}
177
+			$length = ($i - $stackPtr);
178
+		}
179
+
180
+		return $phpcsFile->getTokensAsString($stackPtr, $length);
181
+	}
182
+
183
+	/**
184
+	 * Is the current token an invalid octal integer ?
185
+	 *
186
+	 * @param array $tokens   Token stack.
187
+	 * @param int   $stackPtr The current position in the token stack.
188
+	 *
189
+	 * @return bool
190
+	 */
191
+	private function isInvalidOctalInteger($tokens, $stackPtr)
192
+	{
193
+		$token = $tokens[$stackPtr];
194
+
195
+		if ($token['code'] === \T_LNUMBER && preg_match('`^0[0-7]*[8-9]+[0-9]*$`D', $token['content']) === 1) {
196
+			return true;
197
+		}
198
+
199
+		return false;
200
+	}
201
+
202
+	/**
203
+	 * Is the current token a hexidecimal numeric string ?
204
+	 *
205
+	 * @param array $tokens   Token stack.
206
+	 * @param int   $stackPtr The current position in the token stack.
207
+	 *
208
+	 * @return bool
209
+	 */
210
+	private function isHexidecimalNumericString($tokens, $stackPtr)
211
+	{
212
+		$token = $tokens[$stackPtr];
213
+
214
+		if ($token['code'] === \T_CONSTANT_ENCAPSED_STRING && preg_match('`^0x[a-f0-9]+$`iD', $this->stripQuotes($token['content'])) === 1) {
215
+			return true;
216
+		}
217
+
218
+		return false;
219
+	}
220 220
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/Miscellaneous/RemovedAlternativePHPTagsSniff.php 1 patch
Indentation   +132 added lines, -132 removed lines patch added patch discarded remove patch
@@ -31,136 +31,136 @@
 block discarded – undo
31 31
 class RemovedAlternativePHPTagsSniff extends Sniff
32 32
 {
33 33
 
34
-    /**
35
-     * Whether ASP tags are enabled or not.
36
-     *
37
-     * @var bool
38
-     */
39
-    private $aspTags = false;
40
-
41
-    /**
42
-     * Returns an array of tokens this test wants to listen for.
43
-     *
44
-     * @return array
45
-     */
46
-    public function register()
47
-    {
48
-        if (version_compare(\PHP_VERSION_ID, '70000', '<') === true) {
49
-            // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.asp_tagsRemoved
50
-            $this->aspTags = (bool) ini_get('asp_tags');
51
-        }
52
-
53
-        return array(
54
-            \T_OPEN_TAG,
55
-            \T_OPEN_TAG_WITH_ECHO,
56
-            \T_INLINE_HTML,
57
-        );
58
-    }
59
-
60
-
61
-    /**
62
-     * Processes this test, when one of its tokens is encountered.
63
-     *
64
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
65
-     * @param int                   $stackPtr  The position of the current token
66
-     *                                         in the stack passed in $tokens.
67
-     *
68
-     * @return void
69
-     */
70
-    public function process(File $phpcsFile, $stackPtr)
71
-    {
72
-        if ($this->supportsAbove('7.0') === false) {
73
-            return;
74
-        }
75
-
76
-        $tokens  = $phpcsFile->getTokens();
77
-        $openTag = $tokens[$stackPtr];
78
-        $content = trim($openTag['content']);
79
-
80
-        if ($content === '' || $content === '<?php') {
81
-            return;
82
-        }
83
-
84
-        if ($openTag['code'] === \T_OPEN_TAG || $openTag['code'] === \T_OPEN_TAG_WITH_ECHO) {
85
-
86
-            if ($content === '<%' || $content === '<%=') {
87
-                $data      = array(
88
-                    'ASP',
89
-                    $content,
90
-                );
91
-                $errorCode = 'ASPOpenTagFound';
92
-
93
-            } elseif (strpos($content, '<script ') !== false) {
94
-                $data      = array(
95
-                    'Script',
96
-                    $content,
97
-                );
98
-                $errorCode = 'ScriptOpenTagFound';
99
-            } else {
100
-                return;
101
-            }
102
-        }
103
-        // Account for incorrect script open tags.
104
-        // The "(?:<s)?" in the regex is to work-around a bug in the tokenizer in PHP 5.2.
105
-        elseif ($openTag['code'] === \T_INLINE_HTML
106
-            && preg_match('`((?:<s)?cript (?:[^>]+)?language=[\'"]?php[\'"]?(?:[^>]+)?>)`i', $content, $match) === 1
107
-        ) {
108
-            $found     = $match[1];
109
-            $data      = array(
110
-                'Script',
111
-                $found,
112
-            );
113
-            $errorCode = 'ScriptOpenTagFound';
114
-        }
115
-
116
-        if (isset($errorCode, $data)) {
117
-            $phpcsFile->addError(
118
-                '%s style opening tags have been removed in PHP 7.0. Found "%s"',
119
-                $stackPtr,
120
-                $errorCode,
121
-                $data
122
-            );
123
-            return;
124
-        }
125
-
126
-        // If we're still here, we can't be sure if what we find was really intended as ASP open tags.
127
-        if ($openTag['code'] === \T_INLINE_HTML && $this->aspTags === false) {
128
-            if (strpos($content, '<%') !== false) {
129
-                $error   = 'Possible use of ASP style opening tags detected. ASP style opening tags have been removed in PHP 7.0. Found: %s';
130
-                $snippet = $this->getSnippet($content, '<%');
131
-                $data    = array('<%' . $snippet);
132
-
133
-                $phpcsFile->addWarning($error, $stackPtr, 'MaybeASPOpenTagFound', $data);
134
-            }
135
-        }
136
-    }
137
-
138
-
139
-    /**
140
-     * Get a snippet from a HTML token.
141
-     *
142
-     * @param string $content The content of the HTML token.
143
-     * @param string $startAt Partial string to use as a starting point for the snippet.
144
-     * @param int    $length  The target length of the snippet to get. Defaults to 25.
145
-     *
146
-     * @return string
147
-     */
148
-    protected function getSnippet($content, $startAt = '', $length = 25)
149
-    {
150
-        $startPos = 0;
151
-
152
-        if ($startAt !== '') {
153
-            $startPos = strpos($content, $startAt);
154
-            if ($startPos !== false) {
155
-                $startPos += \strlen($startAt);
156
-            }
157
-        }
158
-
159
-        $snippet = substr($content, $startPos, $length);
160
-        if ((\strlen($content) - $startPos) > $length) {
161
-            $snippet .= '...';
162
-        }
163
-
164
-        return $snippet;
165
-    }
34
+	/**
35
+	 * Whether ASP tags are enabled or not.
36
+	 *
37
+	 * @var bool
38
+	 */
39
+	private $aspTags = false;
40
+
41
+	/**
42
+	 * Returns an array of tokens this test wants to listen for.
43
+	 *
44
+	 * @return array
45
+	 */
46
+	public function register()
47
+	{
48
+		if (version_compare(\PHP_VERSION_ID, '70000', '<') === true) {
49
+			// phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.asp_tagsRemoved
50
+			$this->aspTags = (bool) ini_get('asp_tags');
51
+		}
52
+
53
+		return array(
54
+			\T_OPEN_TAG,
55
+			\T_OPEN_TAG_WITH_ECHO,
56
+			\T_INLINE_HTML,
57
+		);
58
+	}
59
+
60
+
61
+	/**
62
+	 * Processes this test, when one of its tokens is encountered.
63
+	 *
64
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
65
+	 * @param int                   $stackPtr  The position of the current token
66
+	 *                                         in the stack passed in $tokens.
67
+	 *
68
+	 * @return void
69
+	 */
70
+	public function process(File $phpcsFile, $stackPtr)
71
+	{
72
+		if ($this->supportsAbove('7.0') === false) {
73
+			return;
74
+		}
75
+
76
+		$tokens  = $phpcsFile->getTokens();
77
+		$openTag = $tokens[$stackPtr];
78
+		$content = trim($openTag['content']);
79
+
80
+		if ($content === '' || $content === '<?php') {
81
+			return;
82
+		}
83
+
84
+		if ($openTag['code'] === \T_OPEN_TAG || $openTag['code'] === \T_OPEN_TAG_WITH_ECHO) {
85
+
86
+			if ($content === '<%' || $content === '<%=') {
87
+				$data      = array(
88
+					'ASP',
89
+					$content,
90
+				);
91
+				$errorCode = 'ASPOpenTagFound';
92
+
93
+			} elseif (strpos($content, '<script ') !== false) {
94
+				$data      = array(
95
+					'Script',
96
+					$content,
97
+				);
98
+				$errorCode = 'ScriptOpenTagFound';
99
+			} else {
100
+				return;
101
+			}
102
+		}
103
+		// Account for incorrect script open tags.
104
+		// The "(?:<s)?" in the regex is to work-around a bug in the tokenizer in PHP 5.2.
105
+		elseif ($openTag['code'] === \T_INLINE_HTML
106
+			&& preg_match('`((?:<s)?cript (?:[^>]+)?language=[\'"]?php[\'"]?(?:[^>]+)?>)`i', $content, $match) === 1
107
+		) {
108
+			$found     = $match[1];
109
+			$data      = array(
110
+				'Script',
111
+				$found,
112
+			);
113
+			$errorCode = 'ScriptOpenTagFound';
114
+		}
115
+
116
+		if (isset($errorCode, $data)) {
117
+			$phpcsFile->addError(
118
+				'%s style opening tags have been removed in PHP 7.0. Found "%s"',
119
+				$stackPtr,
120
+				$errorCode,
121
+				$data
122
+			);
123
+			return;
124
+		}
125
+
126
+		// If we're still here, we can't be sure if what we find was really intended as ASP open tags.
127
+		if ($openTag['code'] === \T_INLINE_HTML && $this->aspTags === false) {
128
+			if (strpos($content, '<%') !== false) {
129
+				$error   = 'Possible use of ASP style opening tags detected. ASP style opening tags have been removed in PHP 7.0. Found: %s';
130
+				$snippet = $this->getSnippet($content, '<%');
131
+				$data    = array('<%' . $snippet);
132
+
133
+				$phpcsFile->addWarning($error, $stackPtr, 'MaybeASPOpenTagFound', $data);
134
+			}
135
+		}
136
+	}
137
+
138
+
139
+	/**
140
+	 * Get a snippet from a HTML token.
141
+	 *
142
+	 * @param string $content The content of the HTML token.
143
+	 * @param string $startAt Partial string to use as a starting point for the snippet.
144
+	 * @param int    $length  The target length of the snippet to get. Defaults to 25.
145
+	 *
146
+	 * @return string
147
+	 */
148
+	protected function getSnippet($content, $startAt = '', $length = 25)
149
+	{
150
+		$startPos = 0;
151
+
152
+		if ($startAt !== '') {
153
+			$startPos = strpos($content, $startAt);
154
+			if ($startPos !== false) {
155
+				$startPos += \strlen($startAt);
156
+			}
157
+		}
158
+
159
+		$snippet = substr($content, $startPos, $length);
160
+		if ((\strlen($content) - $startPos) > $length) {
161
+			$snippet .= '...';
162
+		}
163
+
164
+		return $snippet;
165
+	}
166 166
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/Generators/NewGeneratorReturnSniff.php 1 patch
Indentation   +110 added lines, -110 removed lines patch added patch discarded remove patch
@@ -28,29 +28,29 @@  discard block
 block discarded – undo
28 28
  */
29 29
 class NewGeneratorReturnSniff extends Sniff
30 30
 {
31
-    /**
32
-     * Scope conditions within which a yield can exist.
33
-     *
34
-     * @var array
35
-     */
36
-    private $validConditions = array(
37
-        \T_FUNCTION => \T_FUNCTION,
38
-        \T_CLOSURE  => \T_CLOSURE,
39
-    );
40
-
41
-
42
-    /**
43
-     * Returns an array of tokens this test wants to listen for.
44
-     *
45
-     * @return array
46
-     */
47
-    public function register()
48
-    {
49
-        $targets = array(
50
-            \T_YIELD,
51
-        );
52
-
53
-        /*
31
+	/**
32
+	 * Scope conditions within which a yield can exist.
33
+	 *
34
+	 * @var array
35
+	 */
36
+	private $validConditions = array(
37
+		\T_FUNCTION => \T_FUNCTION,
38
+		\T_CLOSURE  => \T_CLOSURE,
39
+	);
40
+
41
+
42
+	/**
43
+	 * Returns an array of tokens this test wants to listen for.
44
+	 *
45
+	 * @return array
46
+	 */
47
+	public function register()
48
+	{
49
+		$targets = array(
50
+			\T_YIELD,
51
+		);
52
+
53
+		/*
54 54
          * The `yield` keyword was introduced in PHP 5.5 with the token T_YIELD.
55 55
          * The `yield from` keyword was introduced in PHP 7.0 and tokenizes as
56 56
          * "T_YIELD T_WHITESPACE T_STRING".
@@ -63,91 +63,91 @@  discard block
 block discarded – undo
63 63
          * For PHP 5.5+ we need to look for T_YIELD.
64 64
          * For PHPCS 3.1.0+, we also need to look for T_YIELD_FROM.
65 65
          */
66
-        if (version_compare(\PHP_VERSION_ID, '50500', '<') === true
67
-            && version_compare(PHPCSHelper::getVersion(), '3.1.0', '<') === true
68
-        ) {
69
-            $targets[] = \T_STRING;
70
-        }
71
-
72
-        if (\defined('T_YIELD_FROM')) {
73
-            $targets[] = \T_YIELD_FROM;
74
-        }
75
-
76
-        return $targets;
77
-    }
78
-
79
-    /**
80
-     * Processes this test, when one of its tokens is encountered.
81
-     *
82
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
83
-     * @param int                   $stackPtr  The position of the current token in the
84
-     *                                         stack passed in $tokens.
85
-     *
86
-     * @return void|int Void or a stack pointer to skip forward.
87
-     */
88
-    public function process(File $phpcsFile, $stackPtr)
89
-    {
90
-        if ($this->supportsBelow('5.6') !== true) {
91
-            return;
92
-        }
93
-
94
-        $tokens = $phpcsFile->getTokens();
95
-
96
-        if ($tokens[$stackPtr]['code'] === \T_STRING
97
-            && $tokens[$stackPtr]['content'] !== 'yield'
98
-        ) {
99
-            return;
100
-        }
101
-
102
-        if (empty($tokens[$stackPtr]['conditions']) === true) {
103
-            return;
104
-        }
105
-
106
-        // Walk the condition from inner to outer to see if we can find a valid function/closure scope.
107
-        $conditions = array_reverse($tokens[$stackPtr]['conditions'], true);
108
-        foreach ($conditions as $ptr => $type) {
109
-            if (isset($this->validConditions[$type]) === true) {
110
-                $function = $ptr;
111
-                break;
112
-            }
113
-        }
114
-
115
-        if (isset($function) === false) {
116
-            // Yield outside function scope, fatal error, but not our concern.
117
-            return;
118
-        }
119
-
120
-        if (isset($tokens[$function]['scope_opener'], $tokens[$function]['scope_closer']) === false) {
121
-            // Can't reliably determine start/end of function scope.
122
-            return;
123
-        }
124
-
125
-        $targets = array(\T_RETURN, \T_CLOSURE, \T_FUNCTION, \T_CLASS);
126
-        if (\defined('T_ANON_CLASS')) {
127
-            $targets[] = \T_ANON_CLASS;
128
-        }
129
-
130
-        $current = $tokens[$function]['scope_opener'];
131
-
132
-        while (($current = $phpcsFile->findNext($targets, ($current + 1), $tokens[$function]['scope_closer'])) !== false) {
133
-            if ($tokens[$current]['code'] === \T_RETURN) {
134
-                $phpcsFile->addError(
135
-                    'Returning a final expression from a generator was not supported in PHP 5.6 or earlier',
136
-                    $current,
137
-                    'ReturnFound'
138
-                );
139
-
140
-                return $tokens[$function]['scope_closer'];
141
-            }
142
-
143
-            // Found a nested scope in which return can exist without problems.
144
-            if (isset($tokens[$current]['scope_closer'])) {
145
-                // Skip past the nested scope.
146
-                $current = $tokens[$current]['scope_closer'];
147
-            }
148
-        }
149
-
150
-        // Don't examine this function again.
151
-        return $tokens[$function]['scope_closer'];
152
-    }
66
+		if (version_compare(\PHP_VERSION_ID, '50500', '<') === true
67
+			&& version_compare(PHPCSHelper::getVersion(), '3.1.0', '<') === true
68
+		) {
69
+			$targets[] = \T_STRING;
70
+		}
71
+
72
+		if (\defined('T_YIELD_FROM')) {
73
+			$targets[] = \T_YIELD_FROM;
74
+		}
75
+
76
+		return $targets;
77
+	}
78
+
79
+	/**
80
+	 * Processes this test, when one of its tokens is encountered.
81
+	 *
82
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
83
+	 * @param int                   $stackPtr  The position of the current token in the
84
+	 *                                         stack passed in $tokens.
85
+	 *
86
+	 * @return void|int Void or a stack pointer to skip forward.
87
+	 */
88
+	public function process(File $phpcsFile, $stackPtr)
89
+	{
90
+		if ($this->supportsBelow('5.6') !== true) {
91
+			return;
92
+		}
93
+
94
+		$tokens = $phpcsFile->getTokens();
95
+
96
+		if ($tokens[$stackPtr]['code'] === \T_STRING
97
+			&& $tokens[$stackPtr]['content'] !== 'yield'
98
+		) {
99
+			return;
100
+		}
101
+
102
+		if (empty($tokens[$stackPtr]['conditions']) === true) {
103
+			return;
104
+		}
105
+
106
+		// Walk the condition from inner to outer to see if we can find a valid function/closure scope.
107
+		$conditions = array_reverse($tokens[$stackPtr]['conditions'], true);
108
+		foreach ($conditions as $ptr => $type) {
109
+			if (isset($this->validConditions[$type]) === true) {
110
+				$function = $ptr;
111
+				break;
112
+			}
113
+		}
114
+
115
+		if (isset($function) === false) {
116
+			// Yield outside function scope, fatal error, but not our concern.
117
+			return;
118
+		}
119
+
120
+		if (isset($tokens[$function]['scope_opener'], $tokens[$function]['scope_closer']) === false) {
121
+			// Can't reliably determine start/end of function scope.
122
+			return;
123
+		}
124
+
125
+		$targets = array(\T_RETURN, \T_CLOSURE, \T_FUNCTION, \T_CLASS);
126
+		if (\defined('T_ANON_CLASS')) {
127
+			$targets[] = \T_ANON_CLASS;
128
+		}
129
+
130
+		$current = $tokens[$function]['scope_opener'];
131
+
132
+		while (($current = $phpcsFile->findNext($targets, ($current + 1), $tokens[$function]['scope_closer'])) !== false) {
133
+			if ($tokens[$current]['code'] === \T_RETURN) {
134
+				$phpcsFile->addError(
135
+					'Returning a final expression from a generator was not supported in PHP 5.6 or earlier',
136
+					$current,
137
+					'ReturnFound'
138
+				);
139
+
140
+				return $tokens[$function]['scope_closer'];
141
+			}
142
+
143
+			// Found a nested scope in which return can exist without problems.
144
+			if (isset($tokens[$current]['scope_closer'])) {
145
+				// Skip past the nested scope.
146
+				$current = $tokens[$current]['scope_closer'];
147
+			}
148
+		}
149
+
150
+		// Don't examine this function again.
151
+		return $tokens[$function]['scope_closer'];
152
+	}
153 153
 }
Please login to merge, or discard this patch.
PHPCompatibility/Sniffs/MethodUse/ForbiddenToStringParametersSniff.php 1 patch
Indentation   +57 added lines, -57 removed lines patch added patch discarded remove patch
@@ -28,43 +28,43 @@  discard block
 block discarded – undo
28 28
 class ForbiddenToStringParametersSniff extends Sniff
29 29
 {
30 30
 
31
-    /**
32
-     * Returns an array of tokens this test wants to listen for.
33
-     *
34
-     * @since 9.2.0
35
-     *
36
-     * @return array
37
-     */
38
-    public function register()
39
-    {
40
-        return array(
41
-            \T_DOUBLE_COLON,
42
-            \T_OBJECT_OPERATOR,
43
-        );
44
-    }
31
+	/**
32
+	 * Returns an array of tokens this test wants to listen for.
33
+	 *
34
+	 * @since 9.2.0
35
+	 *
36
+	 * @return array
37
+	 */
38
+	public function register()
39
+	{
40
+		return array(
41
+			\T_DOUBLE_COLON,
42
+			\T_OBJECT_OPERATOR,
43
+		);
44
+	}
45 45
 
46
-    /**
47
-     * Processes this test, when one of its tokens is encountered.
48
-     *
49
-     * @since 9.2.0
50
-     *
51
-     * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
52
-     * @param int                   $stackPtr  The position of the current token
53
-     *                                         in the stack passed in $tokens.
54
-     *
55
-     * @return void
56
-     */
57
-    public function process(File $phpcsFile, $stackPtr)
58
-    {
59
-        if ($this->supportsAbove('5.3') === false) {
60
-            return;
61
-        }
46
+	/**
47
+	 * Processes this test, when one of its tokens is encountered.
48
+	 *
49
+	 * @since 9.2.0
50
+	 *
51
+	 * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
52
+	 * @param int                   $stackPtr  The position of the current token
53
+	 *                                         in the stack passed in $tokens.
54
+	 *
55
+	 * @return void
56
+	 */
57
+	public function process(File $phpcsFile, $stackPtr)
58
+	{
59
+		if ($this->supportsAbove('5.3') === false) {
60
+			return;
61
+		}
62 62
 
63
-        $tokens = $phpcsFile->getTokens();
63
+		$tokens = $phpcsFile->getTokens();
64 64
 
65
-        $nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
66
-        if ($nextNonEmpty === false || $tokens[$nextNonEmpty]['code'] !== \T_STRING) {
67
-            /*
65
+		$nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
66
+		if ($nextNonEmpty === false || $tokens[$nextNonEmpty]['code'] !== \T_STRING) {
67
+			/*
68 68
              * Not a method call.
69 69
              *
70 70
              * Note: This disregards method calls with the method name in a variable, like:
@@ -72,31 +72,31 @@  discard block
 block discarded – undo
72 72
              *   $obj->$method();
73 73
              * However, that would be very hard to examine reliably anyway.
74 74
              */
75
-            return;
76
-        }
75
+			return;
76
+		}
77 77
 
78
-        if (strtolower($tokens[$nextNonEmpty]['content']) !== '__tostring') {
79
-            // Not a call to the __clone() method.
80
-            return;
81
-        }
78
+		if (strtolower($tokens[$nextNonEmpty]['content']) !== '__tostring') {
79
+			// Not a call to the __clone() method.
80
+			return;
81
+		}
82 82
 
83
-        $openParens = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), null, true);
84
-        if ($openParens === false || $tokens[$openParens]['code'] !== \T_OPEN_PARENTHESIS) {
85
-            // Not a method call.
86
-            return;
87
-        }
83
+		$openParens = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextNonEmpty + 1), null, true);
84
+		if ($openParens === false || $tokens[$openParens]['code'] !== \T_OPEN_PARENTHESIS) {
85
+			// Not a method call.
86
+			return;
87
+		}
88 88
 
89
-        $closeParens = $phpcsFile->findNext(Tokens::$emptyTokens, ($openParens + 1), null, true);
90
-        if ($closeParens === false || $tokens[$closeParens]['code'] === \T_CLOSE_PARENTHESIS) {
91
-            // Not a method call.
92
-            return;
93
-        }
89
+		$closeParens = $phpcsFile->findNext(Tokens::$emptyTokens, ($openParens + 1), null, true);
90
+		if ($closeParens === false || $tokens[$closeParens]['code'] === \T_CLOSE_PARENTHESIS) {
91
+			// Not a method call.
92
+			return;
93
+		}
94 94
 
95
-        // If we're still here, then this is a call to the __toString() magic method passing parameters.
96
-        $phpcsFile->addError(
97
-            'The __toString() magic method will no longer accept passed arguments since PHP 5.3',
98
-            $stackPtr,
99
-            'Passed'
100
-        );
101
-    }
95
+		// If we're still here, then this is a call to the __toString() magic method passing parameters.
96
+		$phpcsFile->addError(
97
+			'The __toString() magic method will no longer accept passed arguments since PHP 5.3',
98
+			$stackPtr,
99
+			'Passed'
100
+		);
101
+	}
102 102
 }
Please login to merge, or discard this patch.