Avatar billede max1999 Juniormester
08. april 2022 - 08:42 Der er 15 kommentarer

php 8 fejler på array ved ukendt pointer

Hej jeg skal til at flytte en masse kode gammel server til ny.
Gammel Serverer = php7/ php5
Ny Server = php8

Men er stødt i et uoverskueligt problem.
Hvis man ikke i et array hvor nøglen ikke eksistere så generere det en error!
fx:
$ABC = $_GET["ABC"];

Hvis ABC ikke eksisterer i $_GET så får man en error!

Kan man sætte php op til at ignorerer disse fejl i php.ini?
Avatar billede bvirk Guru
08. april 2022 - 08:59 #1
Ikke lige hvad du spørger om, men måske kan det gøres php 8 kompatibelt vha.

https://www.tutorialspoint.com/php7/php7_coalescing_operator.htm
Avatar billede max1999 Juniormester
08. april 2022 - 09:08 #2
Jeg vil rigtig gerne undgå at jeg skal ind i alt kode og tilrette omkring $_GET, $_POST mm.
Avatar billede bvirk Guru
08. april 2022 - 09:25 #3
Forståeligt nok - jeg er også betænkelig søg og erstat på mange filer.
Avatar billede arne_v Ekspert
08. april 2022 - 14:45 #4
Der bør testes med isset.

Ja - det kan være en del arbejde. Men det er arbejde som burde have været lavet.
Avatar billede max1999 Juniormester
08. april 2022 - 16:28 #5
Hvilken forskel gør det, er det sikkerhed eller ydelse?
Avatar billede arne_v Ekspert
08. april 2022 - 16:48 #6
Sikkerheds problem eller funktionelt problem eller bare svær at følge kode.

$ABC = $_GET["ABC"];

forventer at URL alti dindeholder ABC.

Det er åbenlyst ikke tilfældet.

Så:

if(isset($_GET['ABC']) {
    $ABC = $_GET['ABC'];
    // brug $ABC
} else {
  // ABC var der ikke så gør noget som ikke kræver $ABC
}
Avatar billede erikjacobsen Ekspert
08. april 2022 - 20:37 #7
Kan måske gøres lidt simplere:

$ABC = "";
if(isset($_GET['ABC'])) {  $ABC = $_GET['ABC']; }

Så er $ABC enten den tomme streng, eller hvad der nu kom ind med $_GET.
Avatar billede arne_v Ekspert
08. april 2022 - 20:48 #8
Hvis man vil have kort kode og ens logik så kan det gøres endnu kortere.

$ABC = isset($_GET['ABC']) ? $_GET['ABC'] : '';

Men måske skal der gøres noget helt andet hvis ABC mangler.
Avatar billede acore Ekspert
09. april 2022 - 03:03 #9
Jeg kan ikke helt gennemskue hvorfor du får fejl med php8, men ikke med 5 eller 7. Synes ikke jeg kan finde belæg for det. Måske kan andre? Eller måske har det ikke noget med php version at gøre, men er forårsaget af andre settings?

Men:

Du kan prøve at undertrykke fejlen ved at ændre

$_GET

til

@$_GET

Det er en relativ enkel og sikker search/replace.

Skal huske at sige, at jeg ikke har testet det.
Avatar billede arne_v Ekspert
09. april 2022 - 03:12 #10
Pincipielt mener jeg at den slags skal  løses ved at fixe det egentlige problem ikke ved at fjernes beskeden om problemet.

For 45 år eller deromkring blev redaktøren af FDM's medlemsblad spurgt om hvad det dummeste spørgsmål de havde modtaget i brevkassen var. Hans svar: ham der spurgte om hvor han kunne købe en længere oliepind, fordi den han havde kunne ikke længere nå ned til olien.
Avatar billede acore Ekspert
09. april 2022 - 08:36 #11
Jeg er for så vidt helt enig. Men jeg prøver altid  svare på det, der bliver spurgt om,  og ikke alt muligt andet.

Og  hvis nu koden fungerer med php5/7,? Vi kender jo ikke konteksten.
Avatar billede max1999 Juniormester
09. april 2022 - 08:49 #12
<?php
$ABC = $_GET["ABC"];
?>
Virker i PHP5 og PHP7 men ikke PHP8

Jeg syntes jo en af de ting der er smart ved php er at man ikke skulle definere ens variabler før brug.

Hvorfor er det kun på arrays man ikke må, jeg kan jo godt lave en:
if($ABC == 12)
uden at definere $ABC først.....
Avatar billede acore Ekspert
09. april 2022 - 11:24 #13
Hvilke fejl får du?
Avatar billede arne_v Ekspert
09. april 2022 - 20:06 #14
PHP's håndtering af invalide array index burder ikke være ændret mellem 7 og 8. Men din 7 og 8 må have forskellige php.ini og de kan have forskelle setting for fejl visning.
Avatar billede arne_v Ekspert
09. april 2022 - 20:09 #15
Man skal ikke erklære variable i PHP.

Men brug af variable som ikke har fået tildelt en værdi er noget andet.

if($ABC == 12)

som først reference til $ABC er også en logisk fejl.

Det bør være:

$ABC = 0; // eller anden værdi
...
if($ABC == 12)
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