anzeige

Fragen zu php funktionen


Seite: 1 2 3 4
Autor Beitrag
Teegee
10.03.10 - 15:42:03 Uhr

Ich hab mal ne Testzone eingerichtet.

http://verdant-meadows.com/test/index/index.php

Die Ordnerstruktur sieht folgendermassen aus, wobei ich den Ordner Test als "Root" nehme.

test/ mit:
test/main.html

test/index/ mit:
index.php
main.html

test/index/pages mit:
main.html
main2.html

test/index/pages/intro mit:
startup.html

test/index/pages/pages2 mit:
main.html
main2.html

Alle Dateien haben folgenden inhalt:
In welchem Ordner sie sich befinden ab Ordner "index", also main2.html bei test/index/pages hat folgenden Inhalt:
pages/ MAIN

Datei startup.html hat "STARTUP" als Inhalt.

Wird ein Dokument aufgerufen das nicht exisiert erschein "Fehler".


Das mit Basename scheint nun perfekt zu funktionieren, denn wenn man per index.php?file=pages2/main aufruft erscheint der Text pages/ MAIN, wie wenn man nur file=main schreiben würde.

Allerdings erscheint beim Aufruf von index.php?file=intro/startup eine Fehlermeldung seitens php

wieso???

Quellcode von der index.php:
  1. <?php      
  2. $filebasename($_GET['file']);      
  3. if (empty($file)) {      
  4.     include('pages/intro/startup.html');  
  5. } else if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/test/index/pages/' $_GET['file'] . '.html'))  
  6. {    
  7.     include('pages/' $file '.html');  
  8.  } else  {          
  9.     echo('Fehler');  
  10. }  
  11. ?>  
SammysHP
10.03.10 - 16:24:30 Uhr

Immer noch der gleiche Fehler. Du solltest dich nochmal mit dem Kapitel "Variablen" in php beschäftigen

  1. <?php  
  2. $file basename($_GET['file']);  
  3. if (empty($file) && != $file) {  
  4.    include('pages/intro/startup.html');  
  5. } elseif (file_exists($_SERVER['DOCUMENT_ROOT'] . '/test/index/pages/' $file '.html')) {  
  6.    include('pages/' $file '.html');  
  7. } else {  
  8.    echo('Fehler');  
  9. }  
  10. ?>  


_________________
www.sammyshp.de
Teegee
10.03.10 - 16:35:05 Uhr

k jetzt zeigt er mir aber beim aufruf von http://verdant-meadows.com/test/index/index.php
nicht mehr STARTUP an sondern Fehler.

okey problem ist gelöst. thx
SammysHP
10.03.10 - 17:24:31 Uhr

Logisch, sie liegt ja auch im Unterverzeichnis "intro", auf das hast du keinen Zugriff mehr
Denk dran: Du kannst keine Verzeichnisse über den Parameter wechseln!

_________________
www.sammyshp.de
Teegee
10.03.10 - 17:32:53 Uhr

ja ne es ging ja um das includen, wenn nur index.php angegeben ist hätte eben startup angezeigt werden sollen, aber das hab ich jetzt gelöst durch !isset( anstatt !empty( und && 0 != $file) in Zeile 3

  1. <?php    
  2. $file basename($_GET['file']);    
  3. if(!isset($_GET['file']))  
  4. {  
  5.     include('pages/intro/startup.html');    
  6. } else if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/test/index/pages/' $file '.html')) {    
  7.     include('pages/' $file '.html');    
  8. } else  {    
  9.     echo('Fehler');    
  10. }    
  11. ?>  
SammysHP
10.03.10 - 17:49:17 Uhr

Vielleicht ist in der ersten if-Abfrage auch eine explizite Typenüberprüfung notwendig: !==

_________________
www.sammyshp.de
Teegee
10.03.10 - 17:58:39 Uhr

Typenüberprüfung??
SammysHP
10.03.10 - 18:48:34 Uhr

(empty($file) && 0 !== $file)

Ich weiß momentan nicht, was php bei empty() prüft. 0 müsste jedenfalls 0, '0', '', NULL sein.

_________________
www.sammyshp.de
Teegee
10.03.10 - 20:41:01 Uhr

okey funktioniert so immernoch, allerdings weiss ich nicht was diese Typenüberprüfung bewirkt, da der Wert in dem Fall ja eh leer ist, und wenn er nicht leer wäre würde weiter unten überprüft werden ob die Datei vorhanden ist oder nicht.

Also was macht diese nun genau??


wenn wir gleich dabei sind:
Ich kämpfe gegen den gleichen Code.

Aber diesmal will ich erreichen, dass er mir bei einer leeren Eingabe (index.php) das gleiche ausgibt wie bei index.php?file=main. Sprich dass die main.html als Standart-Datei festgelegt wird wenn file leer ist.

Ich weiss ungefähr wie ich das machen muss und hab hier auch nen Code der das erreicht,
 $file = 'pages/'.( ( ! empty( $_GET['file'] ) && strpos( $file, '..' ) === false ) ? $_GET['file'] : 'main' ).'.html';  

Aber wie ich den in
  1. <?php    
  2. $file basename($_GET['file']);    
  3. if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/test/index/pages/' $file '.html'))   
  4. {    
  5.     include('pages/' $file '.html');    
  6. } else  {    
  7.     echo('Fehler');    
  8. }    
  9. ?>  

einbaue hab ich nicht rausgefunden, mein bestes Ergebnis war dass er mir bei index.php einfach "nichts" angezeigt hat
Achtzig
11.03.10 - 09:49:47 Uhr

Also Folgendes funktioniert:

index.php

  1. <?php  
  2.   $file=$_GET['file'];  
  3.   if (strpos($file,'..')!==false) {  
  4.     echo 'Deine Adresse wurde an meinen Anwalt weitergeleitet!';  
  5.   } else {  
  6.     if (empty($file)) {  
  7.       include 'pages/main.html';  
  8.     } else {  
  9.       if (file_exists($_SERVER['DOCUMENT_ROOT'].'/test/index/pages/'.$file.'.html')) {  
  10.         include 'pages/'.$file.'.html';  
  11.       } else {  
  12.         echo 'FEHLER';  
  13.       }  
  14.     }  
  15.   }  
  16. ?>  


pages/main.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <title>MAIN</title>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6. <meta http-equiv="Content-Language" content="de" />  
  7. <meta http-equiv="expires" content="0" />  
  8. </head>  
  9. <body>  
  10. MAIN  
  11. </body>  
  12. </html>  


pages/main2.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <title>MAIN2</title>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6. <meta http-equiv="Content-Language" content="de" />  
  7. <meta http-equiv="expires" content="0" />  
  8. </head>  
  9. <body>  
  10. MAIN2  
  11. </body>  
  12. </html>  


pages/intro/startup.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <title>STARTUP</title>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6. <meta http-equiv="Content-Language" content="de" />  
  7. <meta http-equiv="expires" content="0" />  
  8. </head>  
  9. <body>  
  10. STARTUP  
  11. </body>  
  12. </html>  


Ergebnisse:

? -> MAIN
?file= -> MAIN
?file=main -> MAIN
?file=main2 -> MAIN2
?file=intro/startup -> STARTUP

?file=.. -> Deine Adresse wurde an meinen Anwalt weitergeleitet!
?file=xyz -> FEHLER
?file=intro -> FEHLER

Nachtrag: Was ich noch sagen wollte: basename kannst Du nicht benutzen, da Du auch eine Verzeichnisangabe für startup.html benötigst und basename nur die Datei zurückgibt und die Verzeichnisangabe entfernt.
Seite: 1 2 3 4

- Obige Beiträge stellen keine Äußerung oder Meinung von Pytal oder dessen Betreiber dar -