[PHP] file_exists functie blijft false op windows host

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 12:07

skate master

Autodesk Educator Expert

Topicstarter
Goedenavond.

voor een website maak ik gebruik van content uit losse html pagina's.
Deze pagina's worden via een include in de template geladen.
Voordat ik de include doe check ik even of het bestand ook daadwerkelijk bestaat via de functie file_exists()
Hier thuis @localhost werkt het perfect, en krijg ik netjes mijn error te zien als het bestand niet bestaat.
Echter bij de betaalde host krijg ik standaard de error te zien, wat betekent dat de functie file_exists() altijd false terug geeft.

Zodra ik de file_exists check weg laat en alleen de file include, dan gaat alles naar behoren en wordt de content weergegeven.

De betaalde host draait:
PHP Version 5.2.9-2
System: Windows NT PSAWINWEB05 6.0 build 6001
SERVER_SOFTWARE: Microsoft-IIS/7.0

PHP:
1
2
3
4
5
6
if(file_exists("content/".($_GET['type'] == 2 ? "extra/" : "").$_GET['pagina'].".htm")){
      include("content/".($_GET['type'] == 2 ? "extra/" : "").$_GET['pagina'].".htm");
} else {
echo "<h3>De opgevraagde pagina is niet gevonden</h3>";
echo "Helaas konden wij de opgevraagde pagina niet vinden.";
}

Eerst dacht ik dat het met een safe mode restrictie te maken had, maar volgens de phpinfo() staat safe mode voor zowel local als master value op off. Dus dat zou het naar mijn idee niet mogen zijn.

Maar.... wat is het dan wel? Wie kan mij op weg helpen, een duwtje in de juiste richting.
Ik heb inmiddels zoveel geprobeerd en gezocht dat ik het niet meer weet waar te zoeken.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
http://nl3.php.net/manual/en/function.clearstatcache.php ?

Anders bestaat het bestand echt niet.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Zoek in de manual bij file_exists() eens op "relative".

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
Misschien je slashes omdraaien? windows gebruikt \ en *nix gebruikt /

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
Wat is de waarde van $_SERVER['SCRIPT_FILENAME']? Klopt die met wat je verwacht?
En inderdaad: de slashes / backslashes checken. Je kan die vervangen door de constante DIRECTORY_SEPARATOR zodat het op alle platformen goed gaat.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Als het probleem in de slashes zou zitten zou de include niet werken. Of werkt de include niet maar worden warnings gewoon niet weergegeven?

Zet de hele bestandsnaam eens gewoon in een string en print die voor je begint met kijken of het bestand bestaat. Controleer ook even of het wel werkt als je een absoluut pad gebruikt.

[ Voor 12% gewijzigd door CodeCaster op 10-03-2010 13:31 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 08-09 14:12
stef-o schreef op woensdag 10 maart 2010 @ 11:01:
Misschien je slashes omdraaien? windows gebruikt \ en *nix gebruikt /
file_exists werkt (gelukkig!) onder Windows ook gewoon met / :)
offtopic:
Als je in Verkenner c:/windows typt pakt ie dat trouwens ook gewoon

Full-stack webdeveloper in Groningen


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 12:07

skate master

Autodesk Educator Expert

Topicstarter
CodeCaster schreef op woensdag 10 maart 2010 @ 13:29:
Als het probleem in de slashes zou zitten zou de include niet werken. Of werkt de include niet maar worden warnings gewoon niet weergegeven?

Zet de hele bestandsnaam eens gewoon in een string en print die voor je begint met kijken of het bestand bestaat. Controleer ook even of het wel werkt als je een absoluut pad gebruikt.
als ik de if - else constructie verwijder dan functioneert de include gewoon.
Het pad naar het bestand is dus wel correct, en het bestand bestaat dus ook gewoon echt.

Ik zal vanavond eens even proberen om de slashes om te draaien en om een absoluut pad te gebruiken.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Handiger lijkt het me wanneer je toch nog eens iets met de 1ste opmerking van CodeCaster doet. Als ik in de manual de boel een beetje doorlees dan lijkt het er op dat file_exist het niet (altijd) doet met relative paden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

probeer eens realpath() om het padnaam heen te zetten. Aldus PHP.Net:
Description

string realpath ( string $path )
realpath() expands all symbolic links and resolves references to '/./', '/../' and extra '/' characters in the input path and return the canonicalized absolute pathname.
realpath() zet ook meteen al je slashes de juiste kant op.

Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 12:07

skate master

Autodesk Educator Expert

Topicstarter
Het probleem met de functie file_exists is opgelost.
Door het gebruiken van $_SERVER['DOCUMENT_ROOT'] wordt het bestand wel gevonden.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Zijn dit soort grappen niet erg onveilig?

Acties:
  • 0 Henk 'm!

Verwijderd

Olaf van der Spek schreef op dinsdag 16 maart 2010 @ 21:14:
Zijn dit soort grappen niet erg onveilig?
Jawel, zeer onveilig. Je kan nu zo passwd file includen / welke file dan ook op de server. :9

[ Voor 1% gewijzigd door Verwijderd op 16-03-2010 22:04 . Reden: windows bak.. :9 ]

Pagina: 1