xref: /dokuwiki/inc/compatibility.php (revision 9b03c563b02ce43cf06e31b037b4c6e31ca19835)
1<?php
2
3/**
4 * compatibility functions
5 *
6 * This file contains a few functions that might be missing from the PHP build
7 */
8
9if (!function_exists('ctype_space')) {
10    /**
11     * Check for whitespace character(s)
12     *
13     * @param string $text
14     * @return bool
15     * @see ctype_space
16     */
17    function ctype_space($text)
18    {
19        if (!is_string($text)) return false; #FIXME original treats between -128 and 255 inclusive as ASCII chars
20        if (trim($text) === '') return true;
21        return false;
22    }
23}
24
25if (!function_exists('ctype_digit')) {
26    /**
27     * Check for numeric character(s)
28     *
29     * @param string $text
30     * @return bool
31     * @see ctype_digit
32     */
33    function ctype_digit($text)
34    {
35        if (!is_string($text)) return false; #FIXME original treats between -128 and 255 inclusive as ASCII chars
36        if (preg_match('/^\d+$/', $text)) return true;
37        return false;
38    }
39}
40
41if (!function_exists('gzopen') && function_exists('gzopen64')) {
42    /**
43     * work around for PHP compiled against certain zlib versions #865
44     *
45     * @link http://stackoverflow.com/questions/23417519/php-zlib-gzopen-not-exists
46     *
47     * @param string $filename
48     * @param string $mode
49     * @param int $use_include_path
50     * @return mixed
51     */
52    function gzopen($filename, $mode, $use_include_path = 0)
53    {
54        return gzopen64($filename, $mode, $use_include_path);
55    }
56}
57
58if (!function_exists('gzseek') && function_exists('gzseek64')) {
59    /**
60     * work around for PHP compiled against certain zlib versions #865
61     *
62     * @link http://stackoverflow.com/questions/23417519/php-zlib-gzopen-not-exists
63     *
64     * @param resource $zp
65     * @param int $offset
66     * @param int $whence
67     * @return int
68     */
69    function gzseek($zp, $offset, $whence = SEEK_SET)
70    {
71        return gzseek64($zp, $offset, $whence);
72    }
73}
74
75if (!function_exists('gztell') && function_exists('gztell64')) {
76    /**
77     * work around for PHP compiled against certain zlib versions #865
78     *
79     * @link   http://stackoverflow.com/questions/23417519/php-zlib-gzopen-not-exists
80     *
81     * @param resource $zp
82     * @return int
83     */
84    function gztell($zp)
85    {
86        return gztell64($zp);
87    }
88}
89
90/**
91 * polyfill for PHP < 8
92 * @see https://www.php.net/manual/en/function.str-starts-with
93 */
94if (!function_exists('str_starts_with')) {
95    function str_starts_with(string $haystack, string $needle)
96    {
97        return empty($needle) || strpos($haystack, $needle) === 0;
98    }
99}
100
101/**
102 * polyfill for PHP < 8
103 * @see https://www.php.net/manual/en/function.str-contains
104 */
105if (!function_exists('str_contains')) {
106    function str_contains(string $haystack, string $needle)
107    {
108        return empty($needle) || strpos($haystack, $needle) !== false;
109    }
110}
111
112/**
113 * polyfill for PHP < 8
114 * @see https://www.php.net/manual/en/function.str-ends-with
115 */
116if (!function_exists('str_ends_with')) {
117    function str_ends_with(string $haystack, string $needle)
118    {
119        return empty($needle) || substr($haystack, -strlen($needle)) === $needle;
120    }
121}
122