php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.01.2009, 16:06  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 5
Nordhesse28 befindet sich auf einem aufstrebenden Ast
Standard Mein PHP Switch spinnt völlig

Ich suche einen php switch der erstens funktioniert und zweitens sicher ist. Kann mir hier jemand helfen?

Ich habe einen gehabt der auf meinem Webspace funktionierte aber nach dem Umzug auf den Server will er nicht so richtig.

Zum Theme ich habe in meinem Ordner wo die Webseite liegt folgende Struktur:

+ Bilder
+ Grafiken
+ Downloads
- index.php
- seite.php
- partner.php

In der index.php ist der switch der bei aufruf von:
PHP-Code:
index.php?action=partner 
die seite partner.php includen soll. Das hat ja auf dem Webspace auch funktioniert.

Auf dem Server habe ich jetzt das Problem das da was nicht stimmt oder nicht funktioniert. Ich mußte die Struktur wie folgt ändern:

+ Bilder
+ Grafiken
+ Downloads
+ sites
- index.php
- seite.php
- partner.php

In den Ordner sites muss die partner.php rein dann funktioniert der switch. Also habe ich die partner.php einmal im hauptverzeichniss und ein weiteres mal im Ordner sites.

Aber doppelt ist ja doof eigendlich also lösche ich die partner.php aus dem hauptverzeichnis raus. Und siehe da es geht auf einmal nicht mehr.
Mir kommt es echt komisch vor das wenn ich partner.php in beiden verzeichnissen habe geht es aber sobald ich es aus einem anderen rausnehme geht es schon nicht mehr.

Die variable
PHP-Code:
$path="sites/"
war auf dem Webspace so
PHP-Code:
$path="./"
Nur so funktioniert die eben wie gesagt nicht mehr.

Kann mir jemand sagen woran das liegt? Ich suche doch nur ein switch der sicher ist, wo ich nicht jeden dateinamen einzeln definieren b.z.w. angeben muss. Hat da jemand eine Lösung wie ich das Problem in den Griff bekomme oder eventuell eine bessere Möglichkeit?

Hier mein Code:

PHP-Code:
<?php 

$path
="sites/"

$dir=opendir ($path); 

$file_array = array(); 



while (
$file=readdir($dir)) 



    if (
filetype($path.$file)!="dir"

    { 

        
$file_array[basename($file,".php")] = $file

    } 



closedir($dir); 



function 
getInclude($file_key,$files_array,$error_file="404.php") { 

   if(isset(
$files_array[$file_key])) { 

      return 
$files_array[$file_key]; 

   } 

   else { 

      return 
$error_file

   } 







if(isset(
$_GET['action'])) { 

   include (
getInclude($_GET['action'],$file_array)); 



else { 

   include(
"service.php"); 





?>
bei der verwendung von ./ stat sites/ bekomme ich vom explorrer folgendes geliefert.

Warning: filetype() [function.filetype]: open_basedir restriction in effect. File(./..) is not within the allowed path(s): (/var/www/vhosts/lausitz-designor.de/httpdocs:/tmp) in /var/www/vhosts/lausitz-designor.de/httpdocs/index.php on line 354

Geändert von Nordhesse28 (04.01.2009 um 17:04 Uhr).
Nordhesse28 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.01.2009, 17:07  
Erfahrener Benutzer
 
Benutzerbild von pfump
 
Registriert seit: 29.03.2008
Beiträge: 576
pfump kann nur auf Besserung hoffen
Standard

Wie wärs so:

PHP-Code:
switch($_GET['action']) {
    case 
"partner"    // Partnerseite
                      
include_once 'partner.php';
                      break;

    case 
"Seite"   : include_once 'seite.php';
                      break;

    default         : 
// allgemeine Fehlerseite
                      
break;
}
exit; 
pfump ist offline  
Alt 04.01.2009, 17:10  
lutoma
Gast
 
Beiträge: n/a
Standard

Oder noch einfacher:
PHP-Code:
$verboten=array("index","bla");
if(
file_exists($_GET[action].".php")){
    foreach(
$verboten AS $name){
       if(
$name==$_GET[action])
          die(
"Fehlermeldung");
    }
    include(
$_GET[action].".php");
} else {
   die(
"Fehlermeldung");

In das verboten Array einfach alle Dateinamen rein die nicht erlaubt sein sollen. Das lässt sich natürlich auch umdrehen und man macht ein "erlaubt"-Abfrage

Geändert von lutoma (04.01.2009 um 17:17 Uhr).
 
Alt 04.01.2009, 17:49  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 5
Nordhesse28 befindet sich auf einem aufstrebenden Ast
Standard

hm hört sich gut an aber ich muss alle dateinamen angeben die erlaubt sein müssen oder eben verboten. Nur ich dachte das mein switch ja ging irgendwie. nur eben öffnet er das ./ nicht

wollte eigendlich nicht alle dateien einzeln angeben, es kommt oft vor das dateien hinzukommen und so muss ich jedesmal die dateien im switch anpassen.
Nordhesse28 ist offline  
Alt 04.01.2009, 17:52  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

PHP-Code:
<?php
$foo 
'123';

function 
bar() {
  echo 
$foo// undefined variable foo
}
siehe PHP: Variable scope - Manual
David ist offline  
Alt 04.01.2009, 18:16  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 5
Nordhesse28 befindet sich auf einem aufstrebenden Ast
Standard

hm kann nicht viel mit anfangen bin neu in php und will eigendlich nur meine seite wieder zum laufen bekommen. wüßte auch anhand des codes jetzt nicht wie ich das in mein switch integrieren könnte.
Nordhesse28 ist offline  
Alt 04.01.2009, 18:38  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

War eh falsch, weil ich mir Dein Skript nicht genau angesehen habe. Vergiss es einfach
David ist offline  
Alt 04.01.2009, 18:44  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 5
Nordhesse28 befindet sich auf einem aufstrebenden Ast
Standard

achso, aber falls du weist wo bei meinem der fehler ist kanst es ja mal bescheid geben.
Nordhesse28 ist offline  
Alt 04.01.2009, 18:54  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Nordhesse28 Beitrag anzeigen
Ich suche einen php switch der erstens funktioniert und zweitens sicher ist.
Ich habe einen gehabt der auf meinem Webspace funktionierte aber nach dem Umzug auf den Server will er nicht so richtig.
Und wo ist in Deinem Code ein Switch?

Zitat:
Zitat von Nordhesse28 Beitrag anzeigen
In den Ordner sites muss die partner.php rein dann funktioniert der switch. Also habe ich die partner.php einmal im hauptverzeichniss und ein weiteres mal im Ordner sites.

Aber doppelt ist ja doof eigendlich also lösche ich die partner.php aus dem hauptverzeichnis raus. Und siehe da es geht auf einmal nicht mehr.
Mir kommt es echt komisch vor das wenn ich partner.php in beiden verzeichnissen habe geht es aber sobald ich es aus einem anderen rausnehme geht es schon nicht mehr.
Das liegt daran, dass Du Unfug mit Deinen Variablen machst. Das ist nicht konsistent, was Du da anstellst.

Zitat:
Zitat von Nordhesse28 Beitrag anzeigen
PHP-Code:
<?php 
$path
="sites/"
$dir=opendir ($path); 
$file_array = array(); 

while (
$file=readdir($dir))    // POS 1

    if (
filetype($path.$file)!="dir")  // POS 2
    

        
$file_array[basename($file,".php")] = $file;  // POS 3
    



...

if(isset(
$_GET['action'])) { 
   include (
getInclude($_GET['action'],$file_array));  // POS 4

...
?>
Ich hab mal die wichtigen Stellen mit Kommentaren markiert.
POS 1: Du suchst nach Dateien in ./sites (=Name ohne Pfad!)
POS 2: Du prüfst, ob die Datei "<Pfad>+<Name>" auch wirklich eine Datei ist.
POS 3: Du speicherst den Namen (immer noch ohne Pfad) in Deinem Array.
POS 4: Du versuchst die Datei aus ./sites in ./ zu öffnen.

Irgendwo musst Du den Pfad, der in POS 1 + 2 noch verwendet wurde, auch an den anderen Stellen verwenden. Am besten Du hängst den sofort in der Schleife, die bei POS1 beginnt vor den Dateinamen.

EDIT:
Und wenn Du schon von Sicherheit redest... Du prüfst nichtmal, ob es sich um eine php-Datei handelt. Basename schneidet zwar das .php. bei Dir ab, aber wenn keins dran ist, könnten da unerwünschte Einträge in Deinem Array landen.
Ich würde auch nicht anfangen, alles was in einem Verzeichnis gerade so rumliegt, als Include zu akzeptieren, sondern eine White-List mit erlaubten Werten für den action-Parameter anlegen.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************

Geändert von Der_Gerhard (04.01.2009 um 18:59 Uhr).
Der_Gerhard ist offline  
Alt 04.01.2009, 19:11  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Was passiert mit
PHP-Code:
<?php
if ( isset($_GET['action']) ) {
  
$path 'sites/'.$_GET['action'].'.php';
  echo 
'<pre>Debug: path='$path'__FILE__='__FILE__'</pre>';
    
  if ( 
in_array($pathglob('sites/*.php')) ) {
      require 
$path;
  }
  else {
      die(
'nicht gefunden');
  }
}
?
David ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
switch case mit Prüfung? Ponton PHP Tipps 2008 8 12.10.2008 02:49
switch case frage skaterboy PHP Tipps 2006 8 11.04.2006 14:30
Völlig niveaulos md5hash Off-Topic Diskussionen 4 27.01.2006 19:48
Performance bei großen Switch Blöcken oder PHP5 Magics HStev PHP-Fortgeschrittene 69 02.12.2005 12:29
switch mit Wertebereich?? PHP Tipps 2005-2 1 02.08.2005 13:16
2 switch abfragen in einer datei!? CHRIS PHP Tipps 2005-2 6 29.06.2005 20:17
Switch / Case + while krummzahn PHP Tipps 2005-2 16 05.06.2005 10:46
PHP Switch im iFrame PHP Tipps 2005 5 01.06.2005 14:35
unterkat bei switch erstellen, wie denn? PHP Tipps 2004-2 19 29.12.2004 15:42
[Erledigt] switch anweisung PHP-Fortgeschrittene 9 17.11.2004 16:38
Switch / Case Problem PHP Tipps 2004 9 28.10.2004 11:18
while innerhalb von switch PHP Tipps 2004 2 10.09.2004 18:19
Switch PHP-Fortgeschrittene 9 18.08.2004 12:50
PHP Switch abfrage PHP Tipps 2004 9 16.08.2004 22:03
Apache und DynDNS hinter Switch Server, Hosting und Workstations 2 21.06.2004 09:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
opendir schneidet path ab, php switch case in while, php switch($_get[action]), mein php.de, php switch($_get[\'action\']), php switch _get-action, php switch zweimal

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:04 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum