Mi código funciona en localhost a través de APACHE, pero cuando alojé un sitio web con todos los mismos archivos y código, recibo este mensaje:
Error fatal: Llamada a la función no definida str_contains() en /almacenamiento/ssd3/524/16325524/public_html/static/header.php en línea 55
Código PHP donde se muestra el error:
<?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="https://stackoverflow.com/questions/66519169/.$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>';
}
}
?>
str_contiene() se introdujo en PHP 8 y no es compatible con versiones anteriores.
Para versiones inferiores de PHP, puede usar una solución alternativa con strpos():
if (strpos($haystack, $needle) !== false) {
// haystack contains needle
}
rjdown
El página de manual para str_contains dice que la función se introdujo en PHP 8. Sospecho que su host está en PHP 7 (o posiblemente inferior).
Puede definir un polyfill para versiones anteriores (adaptado de 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);
}
}
los documentos decir str_contains
fue introducido en PHP 8.0.
Probé la respuesta de rjdown y funcionó, pero agregué una forma de devolver falso en caso de que algunos de los argumentos no sean cadenas:
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;
}
}
}
Ver módulos Apache habilitados
sudo apachectl -M
Deshabilitar 7.4 módulos
sudo a2dismod php7.*
Habilitar php8
sudo a2enmod php8.1
Dorzestiru
Usa este código:
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;
}
}
}
@BeshambherChaukhwan—Aunque no veo cómo el problema original es relevante aquí, enlace a ese en lugar de a ese sitio de spam.
– Julia
7 de marzo de 2021 a las 17:16