php require vs require_once

kongen

kongemedlem
Når man skal hente/putte ting i en database, skal man bruke php "require" eller "require_once"?
 

adeneo

Medlem
Øh, "require" inkluderer en annen fil i den gjeldende filen?

Dersom det er en risiko for at du kan komme til å inkludere samme filen to eller flere ganger, så bør du bruke require_once / include_once, da sjekkes det at filen ikke allerede er inkludert slik at man unngår de problemene som kan oppstå når man kjører samme fil flere ganger, for eksempel ved instantiering av klasser og slikt.

Dersom det ikke er noen slik risiko, bør du droppe "_once", og bruke bare require / include, da det er raskere ettersom PHP ikke trenger å sjekke hele strukturen for å se at den samme filen ikke er inkludert tidligere.

"include" og "require" er helt like unntatt dersom de feiler. "include" feiler med en vanlig advarsel, som ikke synes dersom error reporting er slått av, og skriptet kjører ferdig.

"require" derimot, "krever" at filen kan inkluderes, og feiler med en såkalt "fatal error", slik at skriptet stopper opp.
 
Sist redigert:

kongen

kongemedlem
Jeg har db info i en egen fil som skal ligge utenfor public_html som må inkluderes i scriptet. Da tar jeg require_once så er jeg sikker på at det ikke blir noe tull.

Hva ville du foretrukket av disse måtene å sette db-verdier?

PHP:
<?php
define (DB_USER, "user");
define (DB_PASSWORD, "password");
define (DB_DATABASE, "db");
define (DB_HOST, "host");
?>

eller

<?php
$DB_USER, "user";
$DB_PASSWORD, "password";
$DB_DATABASE, "db";
$DB_HOST, "host";
?>
 

adeneo

Medlem
Det kommer an på hva du skal bruke det til?

Jeg regner med det skulle være = tegn på den andre kodebiten der, slik at spørsmålet blir om du bør bruke konstanter eller variabler.

En konstant er global, slik at den er tilgjengelig overalt, og den er "konstant", den kan altså ikke endres senere, den beholder verdien sin samme f hva du gjør med den.
Det er ofte greit å bruke konstanter for konfigurasjon som man ønsker å gjøre helt klart at ikke skal endres, og som kan være grei å ha tilgjengelig overalt.

Variabler derimot kan endres når som helst, og er scopet, selv om det egentlig ikke er noe stort problem i PHP ettersom det er dårlig med scope, og man kan uansett eksplisitt henvise til globale variabler med "global".

Det som nok er viktigere her enn hvorvidt du bruker konstanter eller variabler, er at du plasserer den filen med loginn informasjonen for databasen minst ett hakk over den mappen som er "webroot", slik at konfigurasjonsfilen ikke er direkte tilgjengelig fra en nettleser.
 

kongen

kongemedlem
Ja, det skal være = det gikk litt kjapt der.

Men hvis db-serveren er nede så blir ingenting lagret i db, så jeg lurer på om det kan være lurt å legge data i en temp fil hvis db-serveren er nede, og så bruke cron til å dytte data i db når den er oppe igjen. Disse temp-filene bør vel også ligge utenfor webroot eller er det nok å bare sperre for lesetilgang for andre en server?
 

adeneo

Medlem
Det er ikke vanlig å lage slike "fallbacks"!
De fleste sider, selv sider som Dagbladet eller Finn.no, og enhver Wordpress side, krasjer fullstendig dersom databasen er nede, og har normalt bare en enkel side som viser en melding om at databasen er nede, og at ingenting virker, "vennligst prøv igjen senere" osv.

Så er det opp til brukeren å dytte inn dataene på nytt. Det er så komplekst å cache dataene dersom man ikke har en database tilgjengelig at det er normalt ikke noe som gjøres, man passer i stedet på at databasen alltid er tilgjengelig.

teknisk-feil.jpg
 

kongen

kongemedlem
Når jeg først pusler med koding så vil jeg lage noe som er tilnærmet feilfritt :)

Kanskje det er enklere at scriptet kaller opp en annen db hvis den første ikke er tilgjengelig, og dytter data dit som en mellomstasjon, før det blir sendt til hoved-db?
 
Når jeg først pusler med koding så vil jeg lage noe som er tilnærmet feilfritt :)

Kanskje det er enklere at scriptet kaller opp en annen db hvis den første ikke er tilgjengelig, og dytter data dit som en mellomstasjon, før det blir sendt til hoved-db?

Jeg har ikke kjempe erfaring med koding og databaser men jeg ville heller speilet databasen og hatt en backup-server en annen plass. Jeg ser for meg at det fort kan bli kluss om scriptet ditt skal skrive til 2 databaser pluss at du har ett annet script som flytter informasjon mellom databasene.

Men det skal vel være en viktig nettside før dette blir aktuelt.
 
Topp