Parsa kod i includes i PHP

Tråden skapades och har fått 7 svar. Det senaste inlägget skrevs .
1
  • Oregistrerad
  • 2003-08-21 17:07

Kanske är detta en newbie-fråga, men jag har sökt i timmar på devshed och phpbuilder och frågat alla jag vet. Har hittat massor och massor av svar, men inte det jag söker.

Jag vill inkludera php-dokument i andra php-dokument, med en enkel "include", och allt funkar utmärkt så länge de inkluderade dokumenten bara innehåller statisk info. När de dock har funktioner och grejer i sig så tvärvägrar de parsa om de har en relativ sökväg uppåt eller neråt i hierarkin, t.o.m. om dokumentet ligger i samma mapp!
De parsar bara om de har en absolut sökväg. Har testat alla tänkbara syntaxer och får samma resultat. Absoluta sökvägar blir ju löjligt osmidigt om man skall utveckla på sin egen burk och sen kopiera över till en server.

Skulle vara fruktansvärt tacksam om nån kunde hjälpa mig med detta. Det var längesen jag körde fast såhär illa.

-----------------------

Hittar dokumentet och visar det statiska innehållet, men parsar ingen kod:

<? include ('quotes.php') ?>
<? include ('includes/right/quotes.php') ?>
<? include ('./includes/right/quotes.php') ?>

Visar det statiska innehållet, och parsar kod som den ska:

<? include ('http://emma5.local/chrys.just.nu2003/includes...') ?>

Dokumentet jag inkluderar från är:
http://emma5.local/chrys.just.nu2003/includes...

Jag kör PHP 4.3.2 på Apache i Mac OS 10.2.6

Det kanske är mac-specifikt? Jag har inga problem med att inkludera relativa sökvägar (då är det sidor som ligger på andra webbservrar (unix och windows)).

hmm, har aldrig haft det problemet du beskriver...

men jag skulle kunna gissa på att det kanske kan fixas i php.ini.
Dock sitter jag på jobbet nu så jag kan inte komma i närheten av en och titta vad du kan ändra på...

  • Medlem
  • Tyresö
  • 2003-08-21 21:25

Sitter och läser på http://se2.php.net/manual/en/function.include.php
och kom på att det råkar inte vara så du glömt semikolon i slutet på varje include-direktiv?

Det verkar riktigt skumt måste jag säga. Semikolon ska vara valfritt om man kör den syntaxen du kör med (dvs <? ?> runt varje funktionsanrop). Kan det vara något rättighetsproblem kanske? Eller att du skickar en skum header i någon php-fil? Hur ser sidan som inkluderas ut?

Annars så kan det bli problem när man inkluderar saker i flera led (filer som inkluderar filer som i sin tur inkluderar filer). Nu verkar det ju inte som att det är det som spökar men lösningen på det problemet kanske hjälper dig också. Pröva att inkludera exakta sökvägar på följande sätt:

<?
$rootpath = dirname(__FILE__).'/';
include($rootpath.'quotes.php');
?>

Hmmm... Har ett liknande problem. Om jag anger relativa sökvägar i includefilen så kommer de inte att bli relativa från var includefilen ligger utan ifrån var den includas. Har jag för mig det var. Eller så var det tvärt om - det var ett tag sen

I vilket fall som helst - lösning någon?

  • Medlem
  • Stockholm
  • 2003-08-22 10:37
Citat:

Skrevs ursprungligen av scooterbabe
Hmmm... Har ett liknande problem. Om jag anger relativa sökvägar i includefilen så kommer de inte att bli relativa från var includefilen ligger utan ifrån var den includas. Har jag för mig det var. Eller så var det tvärt om - det var ett tag sen

Det här är ju en annan fråga, men grundregeln är att sökvägen alltid är relativt det script som först laddades. Ett inkluderat script vet så att säga inte var det själv ligger... Man kan tänka att det script man inkluderar helt enkelt klistras in i grundscriptet och körs där.

Jag är också förbryllad över grundfrågan. Det borde inte ha att göra med semikolonen eftersom det funkar med den fulla sökvägen.

Jag brukar i och för sig alltid använda fullt syntax med semikolon och allt:
<?php include('fil.php'); ?>
Scripten blir mer portabla på det sättet eftersom alla php-installationer inte stöder kortformen:
<? include('fil.php') ?>

Citat:

Skrevs ursprungligen av scooterbabe
Hmmm... Har ett liknande problem. Om jag anger relativa sökvägar i includefilen så kommer de inte att bli relativa från var includefilen ligger utan ifrån var den includas. Har jag för mig det var. Eller så var det tvärt om - det var ett tag sen

I vilket fall som helst - lösning någon?

Se min lösning den är både cross platform (utnyttjar inga mystiska miljövariabler som bara finns på en viss plattform) och gör så att de inkluderade filerna alltid kan anges relativt skriptet och inte relativt filen som inkluderade skriptet.

1
Bevaka tråden