From 2297f417ebcd259a8d292fdd050155c2061a3709 Mon Sep 17 00:00:00 2001 From: Jay Klehr Date: Tue, 11 Jan 2022 13:57:48 -0700 Subject: [PATCH 1/5] Adding back functions from php 7.4 (1.x) so lib still works in 7.4 and 8.0+ --- composer.json | 1 + deprecated/functionsList.php | 1 + deprecated/strings.php | 366 +++++++++++++++++++++++++++++++++++ 3 files changed, 368 insertions(+) create mode 100644 deprecated/strings.php diff --git a/composer.json b/composer.json index 6af9ffe2..a286681f 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,7 @@ "deprecated/libevent.php", "deprecated/mssql.php", "deprecated/stats.php", + "deprecated/strings.php", "lib/special_cases.php", "deprecated/mysqli.php", "generated/apache.php", diff --git a/deprecated/functionsList.php b/deprecated/functionsList.php index c032c589..12473b00 100644 --- a/deprecated/functionsList.php +++ b/deprecated/functionsList.php @@ -54,4 +54,5 @@ 'stats_stat_correlation', 'stats_stat_innerproduct', 'stats_variance', + 'substr', ]; diff --git a/deprecated/strings.php b/deprecated/strings.php new file mode 100644 index 00000000..16ede93d --- /dev/null +++ b/deprecated/strings.php @@ -0,0 +1,366 @@ + + * + * + * @param int $length If length is given and is positive, the string + * returned will contain at most length characters + * beginning from start (depending on the length of + * string). + * + * If length is given and is negative, then that many + * characters will be omitted from the end of string + * (after the start position has been calculated when a + * start is negative). If + * start denotes the position of this truncation or + * beyond, FALSE will be returned. + * + * If length is given and is 0, + * FALSE or NULL, an empty string will be returned. + * + * If length is omitted, the substring starting from + * start until the end of the string will be + * returned. + * @return string Returns the extracted part of string;, or + * an empty string. + * @throws StringsException + * + */ +function substr(string $string, int $start, int $length = null): string +{ + if ($length !== null) { + $result = \substr($string, $start, $length); + } else { + $result = \substr($string, $start); + } + return $result; +} From e58074edf75c5128c509a639132efffa7f796678 Mon Sep 17 00:00:00 2001 From: Jay Klehr Date: Tue, 11 Jan 2022 15:02:08 -0700 Subject: [PATCH 2/5] adding array_flip to deprecated --- composer.json | 1 + deprecated/arrays.php | 29 +++++++++++++++++++++++++++++ deprecated/functionsList.php | 1 + deprecated/strings.php | 10 ++++------ 4 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 deprecated/arrays.php diff --git a/composer.json b/composer.json index a286681f..086c94e8 100644 --- a/composer.json +++ b/composer.json @@ -12,6 +12,7 @@ }, "files": [ "deprecated/apc.php", + "deprecated/arrays.php", "deprecated/libevent.php", "deprecated/mssql.php", "deprecated/stats.php", diff --git a/deprecated/arrays.php b/deprecated/arrays.php new file mode 100644 index 00000000..dca792af --- /dev/null +++ b/deprecated/arrays.php @@ -0,0 +1,29 @@ + Date: Tue, 11 Jan 2022 15:44:36 -0700 Subject: [PATCH 3/5] a few more functions, adding deprecated annotation, renaming array file --- composer.json | 3 +- deprecated/array.php | 204 +++++++++++++++++++++++++++++++++++ deprecated/arrays.php | 29 ----- deprecated/datetime.php | 36 +++++++ deprecated/functionsList.php | 7 ++ deprecated/strings.php | 20 +++- 6 files changed, 265 insertions(+), 34 deletions(-) create mode 100644 deprecated/array.php delete mode 100644 deprecated/arrays.php create mode 100644 deprecated/datetime.php diff --git a/composer.json b/composer.json index 086c94e8..b953192c 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,8 @@ }, "files": [ "deprecated/apc.php", - "deprecated/arrays.php", + "deprecated/array.php", + "deprecated/datetime.php", "deprecated/libevent.php", "deprecated/mssql.php", "deprecated/stats.php", diff --git a/deprecated/array.php b/deprecated/array.php new file mode 100644 index 00000000..47565d0b --- /dev/null +++ b/deprecated/array.php @@ -0,0 +1,204 @@ + Date: Tue, 11 Jan 2022 16:10:47 -0700 Subject: [PATCH 4/5] adding password_hash to deprecated as well --- composer.json | 1 + deprecated/Exceptions/PasswordException.php | 15 +++ deprecated/functionsList.php | 1 + deprecated/password.php | 127 ++++++++++++++++++++ 4 files changed, 144 insertions(+) create mode 100644 deprecated/Exceptions/PasswordException.php create mode 100644 deprecated/password.php diff --git a/composer.json b/composer.json index b953192c..22444b14 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,7 @@ "deprecated/array.php", "deprecated/datetime.php", "deprecated/libevent.php", + "deprecated/password.php", "deprecated/mssql.php", "deprecated/stats.php", "deprecated/strings.php", diff --git a/deprecated/Exceptions/PasswordException.php b/deprecated/Exceptions/PasswordException.php new file mode 100644 index 00000000..9c183b8e --- /dev/null +++ b/deprecated/Exceptions/PasswordException.php @@ -0,0 +1,15 @@ + Date: Tue, 11 Jan 2022 17:19:30 -0700 Subject: [PATCH 5/5] adding vsprintf to deprecated --- deprecated/functionsList.php | 1 + deprecated/strings.php | 301 +++++++++++++++++++++++++++++++++++ 2 files changed, 302 insertions(+) diff --git a/deprecated/functionsList.php b/deprecated/functionsList.php index 07fadca1..74ce77f1 100644 --- a/deprecated/functionsList.php +++ b/deprecated/functionsList.php @@ -64,4 +64,5 @@ 'stats_variance', 'substr', 'usort', + 'vsprintf', ]; diff --git a/deprecated/strings.php b/deprecated/strings.php index 06bb8633..de0c2e60 100644 --- a/deprecated/strings.php +++ b/deprecated/strings.php @@ -374,3 +374,304 @@ function substr(string $string, int $start, int $length = null): string } return $result; } + +/** + * Operates as sprintf but accepts an array of + * arguments, rather than a variable number of arguments. + * + * @param string $format The format string is composed of zero or more directives: + * ordinary characters (excluding %) that are + * copied directly to the result and conversion + * specifications, each of which results in fetching its + * own parameter. + * + * A conversion specification follows this prototype: + * %[argnum$][flags][width][.precision]specifier. + * + * An integer followed by a dollar sign $, + * to specify which number argument to treat in the conversion. + * + * + * Flags + * + * + * + * Flag + * Description + * + * + * + * + * - + * + * Left-justify within the given field width; + * Right justification is the default + * + * + * + * + + * + * Prefix positive numbers with a plus sign + * +; Default only negative + * are prefixed with a negative sign. + * + * + * + * (space) + * + * Pads the result with spaces. + * This is the default. + * + * + * + * 0 + * + * Only left-pads numbers with zeros. + * With s specifiers this can + * also right-pad with zeros. + * + * + * + * '(char) + * + * Pads the result with the character (char). + * + * + * + * + * + * + * An integer that says how many characters (minimum) + * this conversion should result in. + * + * A period . followed by an integer + * who's meaning depends on the specifier: + * + * + * + * For e, E, + * f and F + * specifiers: this is the number of digits to be printed + * after the decimal point (by default, this is 6). + * + * + * + * + * For g and G + * specifiers: this is the maximum number of significant + * digits to be printed. + * + * + * + * + * For s specifier: it acts as a cutoff point, + * setting a maximum character limit to the string. + * + * + * + * + * + * If the period is specified without an explicit value for precision, + * 0 is assumed. + * + * + * + * + * Specifiers + * + * + * + * Specifier + * Description + * + * + * + * + * % + * + * A literal percent character. No argument is required. + * + * + * + * b + * + * The argument is treated as an integer and presented + * as a binary number. + * + * + * + * c + * + * The argument is treated as an integer and presented + * as the character with that ASCII. + * + * + * + * d + * + * The argument is treated as an integer and presented + * as a (signed) decimal number. + * + * + * + * e + * + * The argument is treated as scientific notation (e.g. 1.2e+2). + * The precision specifier stands for the number of digits after the + * decimal point since PHP 5.2.1. In earlier versions, it was taken as + * number of significant digits (one less). + * + * + * + * E + * + * Like the e specifier but uses + * uppercase letter (e.g. 1.2E+2). + * + * + * + * f + * + * The argument is treated as a float and presented + * as a floating-point number (locale aware). + * + * + * + * F + * + * The argument is treated as a float and presented + * as a floating-point number (non-locale aware). + * Available as of PHP 5.0.3. + * + * + * + * g + * + * + * General format. + * + * + * Let P equal the precision if nonzero, 6 if the precision is omitted, + * or 1 if the precision is zero. + * Then, if a conversion with style E would have an exponent of X: + * + * + * If P > X ≥ −4, the conversion is with style f and precision P − (X + 1). + * Otherwise, the conversion is with style e and precision P − 1. + * + * + * + * + * G + * + * Like the g specifier but uses + * E and f. + * + * + * + * o + * + * The argument is treated as an integer and presented + * as an octal number. + * + * + * + * s + * + * The argument is treated and presented as a string. + * + * + * + * u + * + * The argument is treated as an integer and presented + * as an unsigned decimal number. + * + * + * + * x + * + * The argument is treated as an integer and presented + * as a hexadecimal number (with lowercase letters). + * + * + * + * X + * + * The argument is treated as an integer and presented + * as a hexadecimal number (with uppercase letters). + * + * + * + * + * + * + * General format. + * + * Let P equal the precision if nonzero, 6 if the precision is omitted, + * or 1 if the precision is zero. + * Then, if a conversion with style E would have an exponent of X: + * + * If P > X ≥ −4, the conversion is with style f and precision P − (X + 1). + * Otherwise, the conversion is with style e and precision P − 1. + * + * The c type specifier ignores padding and width + * + * Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results + * + * Variables will be co-erced to a suitable type for the specifier: + * + * Type Handling + * + * + * + * Type + * Specifiers + * + * + * + * + * string + * s + * + * + * integer + * + * d, + * u, + * c, + * o, + * x, + * X, + * b + * + * + * + * double + * + * g, + * G, + * e, + * E, + * f, + * F + * + * + * + * + * + * @param array $args + * @return string Return array values as a formatted string according to + * format. + * @throws StringsException + * @deprecated The Safe version of this function is no longer needed in PHP 8.0+ + */ +function vsprintf(string $format, array $args): string +{ + error_clear_last(); + $result = \vsprintf($format, $args); + if ($result === false) { + throw StringsException::createFromPhpError(); + } + return $result; +}