调用未定义的函数str_contains()php

lh80um4z  于 2023-01-29  发布在  PHP
关注(0)|答案(6)|浏览(213)

我的代码通过APACHE在localhost上工作,但是当我托管一个包含所有相同文件和代码的网站时,我收到以下消息:致命错误:调用第55行****************/存储/ssd 3/524/16325524/public_html/static/header.php*中未定义的函数str_contains
显示错误的PHP代码:

<?php
                            $menu = getAllData('meni');
                            global $korisnik;
                            for ($i = 0; $i < count($menu); $i++){
                                if(isset($_SESSION['korisnik'])){
                                    if(str_contains($menu[$i]->naziv, 'login') || str_contains($menu[$i]->naziv, 'reg')){
                                        continue;
                                    }
                                    echo  '<li><a href='.$menu[$i]->putanja.'>'.$menu[$i]->naziv.'</a></li>';
                                }
                                else {
                                    if (str_contains($menu[$i]->naziv, 'profile') || str_contains($menu[$i]->naziv, 'out')) {
                                        continue;
                                    }
                                    echo '<li><a href=' . $menu[$i]->putanja . '>' . $menu[$i]->naziv . '</a></li>';
                                }
                            }
                            ?>
1bqhqjot

1bqhqjot1#

str_contains()是在PHP 8中引入的,在较低版本中不受支持。
对于较低的PHP版本,您可以使用strpos()的变通方法:

if (strpos($haystack, $needle) !== false) {
  // haystack contains needle
}
qjp7pelc

qjp7pelc2#

manual page for str_contains说该函数是在PHP8中引入的。我怀疑您的主机是在PHP7(或可能更低)上。
可以为早期版本定义多边形填充(改编自https://github.com/symfony/polyfill-php80

if (!function_exists('str_contains')) {
    function str_contains(string $haystack, string $needle): bool
    {
        return '' === $needle || false !== strpos($haystack, $needle);
    }
}
wgmfuz8q

wgmfuz8q3#

文档中说str_contains是在PHP 8.0中引入的。

2vuwiymt

2vuwiymt4#

我测试了rjdown答案,它工作正常,但我添加了一种方法,在某些参数不是字符串的情况下返回false:

if (!function_exists('str_contains')) {
    function str_contains($haystack, $needle): bool {
        if ( is_string($haystack) && is_string($needle) ) {
            return '' === $needle || false !== strpos($haystack, $needle);
        } else {
            return false;
        }
    }
}
unhi4e5o

unhi4e5o5#

请参阅已启用的Apache模块

sudo apachectl -M

禁用7.4模块

sudo a2dismod php7.*

启用php8

sudo a2enmod php8.1
fnvucqvd

fnvucqvd6#

使用此代码:

if (!function_exists('str_contains')) {
    function str_contains($haystack, $needle): bool {
        if ( is_string($haystack) && is_string($needle) ) {
            return '' === $needle || false !== strpos($haystack, $needle);
        } else {
            return false;
        }
    }
}

相关问题