Avatar billede Asky Forsker
29. juni 2017 - 15:39 Der er 7 kommentarer og
1 løsning

Deprekated

Jeg har i lang tid haft glæde at en kodestump, der altid viser den aktuelle dato på mine sider.
$weekday = array(
"Søndag","Mandag","Tirsdag","Onsdag",
"Torsdag","Fredag","Lørdag"
);
$months = array(
"januar","februar","marts","april","maj","juni",
"juli","august","september","oktober","november","december"
);
list($wday,$mday,$month,$year) = split("( )",date("w j n Y"));
$month -= 1;
$this_day = "$weekday[$wday], $mday. $months[$month] $year";
Da jeg i anden anledning var inde at læse i serverens log-fil, blev jeg gjort opmærksom på, at kommandoen split var "deprekated" dvs. på vej ud af kodesproget.Jeg har så søgt en erstatning. Der foreslås fx ordet explode men så skal hele koden i hvert fald skrives om. Er der nogen, der har en god ide? jeg vil meget gerne bevare denne funktion på mine sider.
Avatar billede Slater Ekspert
29. juni 2017 - 16:09 #1
Det der svarer til split() er preg_split()
Avatar billede Slater Ekspert
29. juni 2017 - 16:13 #2
- Men som jeg ser det, har du overhovedet ikke brug for regex til det der. Den skiller jo bare på mellemrum. Så explode(' ', date('w j n Y')); burde være fint.
Avatar billede olsensweb.dk Ekspert
29. juni 2017 - 16:19 #3
ref http://php.net/manual/en/function.split.php
This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.
Alternatives to this function include:
preg_split()
explode()
str_split()


du kunne lave din egen function
<?php
function split($delimiter, $str ){   
    $delimiter = str_replace("( )"," ",$delimiter);   
    echo $delimiter . " " . $str;
    return explode ($delimiter, $str);
}



$weekday = array(
"Søndag","Mandag","Tirsdag","Onsdag",
"Torsdag","Fredag","Lørdag"
);
$months = array(
"januar","februar","marts","april","maj","juni",
"juli","august","september","oktober","november","december"
);
list($wday,$mday,$month,$year) = split("( )",date("w j n Y"));
$month -= 1;
echo "$weekday[$wday], $mday. $months[$month] $year";
?>
Avatar billede Slater Ekspert
29. juni 2017 - 16:24 #4
#3: Nej, det kan han ikke med mindre han kører PHP 7, hvor funktionen ikke findes.
Du kan ikke generklære funktioner der allerede findes.

Så skal der testes for eksistens med function_exists() først. Det kan man sådan set også godt, hvis man kan leve med, at den så vil advare om deprecation.

if ( ! function_exists('split')) {
    function split($delimiter, $str){ 
        $delimiter = str_replace("( )", " ", $delimiter);
        return explode($delimiter, $str);
    }
}
Avatar billede acore Ekspert
30. juni 2017 - 08:12 #5
Du kan erstatte din kode med

setlocale(LC_TIME, "da_DK.ISO_8859-1");
$this_day = strftime("%A, %e. %B %Y");

Hvis din server allerede er sat til dansk, kan den første linie undværes. Hvis det ikke virker (og er engelsk tekst), skal "da_DK.ISO_8859-1" ændres. Kør "locale -a" på din server (hvis du kan det) for at finde ud af, hvad der skal stå - måske skal der bare stå "da_DA" - måske noget andet.
Avatar billede acore Ekspert
30. juni 2017 - 08:29 #6
...eller "da_DK.UTF8", hvis du vil bruge utf-8.

Begge virker hos mig.
Avatar billede Asky Forsker
03. juli 2017 - 14:52 #7
Koden er nu afprøvet på mit site og det virker! Jeg kører konsekvent med UTF-8
Tak for indsatsen.
Avatar billede acore Ekspert
03. juli 2017 - 15:14 #8
Det var godt :) Det KAN være tricky, at få setlocale til at virke, men det er den "rigtige" løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester