Server Side Includes (SSI) i .php-filer?

Tråden skapades och har fått 16 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2003-05-16 08:26

Har börjat leka lite med php och märkte precis att mitt webbhotel är inställt på att inte kolla efter SSI-taggar i filer med ändelsen .php.

Är det så det brukar vara inställt på kommersiella webbhotell? Känns lite begränsande att man inte kan använda SSI i php-sidor.

Eller skall man använda ngn annan php-tag istället?

Det är alltså standardelement som navigering etc jag vill ha med via SSI, skulle vara bra om man kunde köra samma kod på alla sidor.

  • Medlem
  • Stockholm
  • 2003-05-16 08:52

include() - inkluderar ett script.

require() - inkluderar ett script och läser in det även om funktionen ligger i en falsk if-sats (fast utan att exekvera scriptet).
Stoppar aktuellt script ifall det inkluderade scriptet inte hittas, till skillnad från include() som bara ger en varning.

inlude_once(), require_once() - motsvarande funktionerna ovan, fast görs bara en gång (om de till exempel ligger i en loop).

Tänk på att även inkluderad php-kod måste omslutas av <?php ?>.

Använd include():

<?php
include 'fil_att_inkludera.php';
?>

Kolla mer på
http://www.php.net/manual/en/function.include.php

//Mikael

  • Medlem
  • International user
  • 2003-05-16 09:35

ok, tack! Får köra med det.

(Härleder ur era svar att SSI normalt inte funkar i php-filer)

//mattan

Jag tror nog att du kan inkludera filer m h a SSI också i PHP-filer (fast jag har aldrig testat).

Eftersom båda funktioner är serverparsningar men anropas på olika sätt så borde det gå. För Apache borde man kunna lägga till filändelsen .php i avsnittet för SSI:er. På så sätt parsas både .shtml och .php.

Men jag förstår inte varför du skulle vilja ha både och. Det handlar ju bara om att ersätta

med
<?php include ´navigering.inc´; ?>

(Så länge inte filen navigering.inc innehåller ytterligare SSI-funktioner.)

//Mikael

En fördel du får genom att köra include/require (minns inte vilken - kolla manual) är att om du placerar includen i en if-sats som inte exekveras inkluderas inte koden. Det gör den med SSI, vilket borde göra include/require dels snabbare, dels kan du skriva fel och komma undan med det så länge inte koden läses in.

  • Medlem
  • International user
  • 2003-05-16 10:34
Citat:

Skrevs ursprungligen av Mikael Svensson
Jag tror nog att du kan inkludera filer m h a SSI också i PHP-filer (fast jag har aldrig testat).

...

Men jag förstår inte varför du skulle vilja ha både och.

Jo, jag vet att de går, jag bara undrade om det normalt är inställt att köras på .shtml sidor på webbhotell och liknande, annars är det ju lite onödigt att be dem sätta på det.

Anledningen är att jag har SSI på sidorna nu och helst ville slippa att göra om det, dels enklare att ha samma på alla sidor oavsett om de är php eller shtml.

Nu kör jag nog om allt till .php och include rakt av.

Tack för hjälpen!

Följdfråga: Har mitt DW blivit knäppt som gör om alla länkar till absoluta istället för relativa vid uppdateringar när jag flyttar filer i Site-fönstret?

  • Medlem
  • TÄBY
  • 2003-05-16 12:53

Har du testat med "chmod 0755 filen.php" ?
Blev för lat att testa det men har det på att apache kollar alla filer med x(execute) flagga samt dom som heter shtml som standard.

  • Medlem
  • Stockholm
  • 2003-05-17 00:02
Citat:

Skrevs ursprungligen av HL
include() - inkluderar ett script.

require() - inkluderar ett script och läser in det även om funktionen ligger i en falsk if-sats (fast utan att exekvera scriptet).

Jag trodde skillnaden mellan require() och include() var att man med require() kräver att filen skall hittas och inkluderas, annars avbryta sidan. Med include() så försöker man bara importera filen, hittar man den inte så fortsätter sidan exekvera.

Är jag helt ute och cyklar?

  • Medlem
  • Stockholm
  • 2003-05-17 08:10

Helt rätt, och jag skrev precis det på raden under den sista i ditt citat.

En misslyckad include ger en varning medan en misslyckad require ger ett 'fatal error' som stoppar scriptet.

Det där med if-satser (som även scooterbabe är inne på) gäller också.

  • Medlem
  • Stockholm
  • 2003-05-17 09:56

Oj
hahah

Avslöjad, 7h sömn på 48h.

Ursäkta påhoppet

Citat:

Skrevs ursprungligen av HL
Det där med if-satser (som även scooterbabe är inne på) gäller också.

Precis... för att ge ett exempel:

if($include == 'fil1') {
   require('fil1.php');
} else {
   require('fil2.php');
}

I exemplet här ovanför inkluderas båda filerna oavsett utgången av if-satsen. I stället kan man då använda include():

if($include == 'fil1') {
   include('fil1.php');
} else {
   include('fil2.php');
}

I det här fallet kommer bara en av filerna att inkluderas, vilket kan vara bra om man vill optimera lite. Men - rätta mig om jag har fel - jag har också för mig att include() är mer beräkningsintensiv än require(), så om det stämmer bör det vara bäst om man använder require() överallt där man vet att filen alltid kommer att inkluderas.

Ett tips om man har en massa include()- och require()-anrop till filer som i sig deklarerar klasser och funktioner kan vara att använda sig av include_once() resp. require_once(), eftersom php-tolken då inte försöker inkludera filer som redan inkluderats tidigare. Men det allra bästa är ju såklart om man håller sig borta från spaghettikod så att såna grejer aldrig händer...

  • Medlem
  • Stockholm
  • 2003-05-19 12:41
Citat:

Skrevs ursprungligen av ivar
Avslöjad, 7h sömn på 48h.

Lite överdrivet kanske. Men OK, jag ska skärpa mig.

  • Medlem
  • Stockholm
  • 2003-05-19 12:43
Citat:

Skrevs ursprungligen av Samuel K
/.../ Men det allra bästa är ju såklart om man håller sig borta från spaghettikod så att såna grejer aldrig händer...

Aj!

  • Medlem
  • Stockholm
  • 2003-05-19 16:08
Citat:

Skrevs ursprungligen av HL
Lite överdrivet kanske. Men OK, jag ska skärpa mig.

Jag som hade sovit lite alltså!
Det var inte menat som ännu ett påhopp

SSI går inte att köra i PHP, det var i alla fall vad jag kom fram till en gång i tiden när jag skulle få det att fungera. Men eftersom PHP är som det är så går allting att fixa i PHP istället, så man behöver inte SSI-stödet.

  • Medlem
  • Stockholm
  • 2003-05-20 12:31
Citat:

Skrevs ursprungligen av ivar
Jag som hade sovit lite alltså!
Det var inte menat som ännu ett påhopp

OK, jag börjar fatta... Trodde att jag var avslöjad i och med att jag satt och skrev ett meddelande kl 8 på morgonen när varje vettig människa sover eller åtminstone inte sitter och surfar... Men, som sagt, jag ska skärpa mig.

1
Bevaka tråden