[PHP] file_exists und scandir, mal gehts mal nicht

finke

finke

Eroberer
HI, Ich habe zZ ein ein Problem mit den oben gennanten Funktionen.
Ich sehe gerade nicht durch, in welchen Verzeichnissen diese Funktionen alles suchen.
Ich habe 2 Clasen (Content und Design) jeweils in "{DOCUMENT_ROOT}/cms/inc/class/", welche über "{DOCUMENT_ROOT}/cms/index.php" geladen werden (require_once).

In beiden Dateien wird via file_exists überprüft ob gewisse Dateien existieren.
Content:
PHP:
if(!ADMIN && file_exists('inc/design/'.Design::getDesign().'/'.$template)) $template = 'inc/design/'.Design::getDesign().'/'.$template;
Design (getDesign):
PHP:
if(!file_exists('inc/design/'.$design.'.htm')){
			$files = scandir('inc/design');
Wärend ein Aufruf über die Content Klasse funktioniert (inclusive dem Aufruf con Design::getDesign()) wirft der Aufruf von getDesign() innerhalb der Klasse Design folgende Fahler:
Code:
Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(inc/design/g.htm) is not within the allowed path(s): (/users/projektog/temp:/users/projektog/www) in /users/projektog/www/cms/inc/class/class.Design.php on line 21

Warning: scandir() [function.scandir]: open_basedir restriction in effect. File(inc/design) is not within the allowed path(s): (/users/projektog/temp:/users/projektog/www) in /users/projektog/www/cms/inc/class/class.Design.php on line 22

Warning: scandir(inc/design) [function.scandir]: failed to open dir: Operation not permitted in /users/projektog/www/cms/inc/class/class.Design.php on line 22

Warning: scandir() [function.scandir]: (errno 1): Operation not permitted in /users/projektog/www/cms/inc/class/class.Design.php on line 22
Kann mir einer sagen warum der indireckte Aufruf funktioniert, der Aufruf innerhalb der Klasse allerdings nicht?
Anbei die Kompletten Classendateien.
Anhang anzeigen class.zip
 
Hi,

versuch mal mit absoluten Pfaden zu arbeiten.

Gruß
Frank
 
Das würde Prinzipiell gehen, allerdings müsste ich dann auch komplett die Smarty Klassen bearbeiten. Sobald es ein mal spinnt gehts für den Sietenaufruf gar nicht mehr. Und wenn ich überall die absoluten Pfade rein mache, werde ich halt bei jedem mal wenn ich den Server wechsle Spaß haben die ganzen Stellen zu suchen.
 
Hi,

naja du musst ja nicht die Pfade im Quellcode pflegen. Du kannst ja ne Config-Variable setzen und dann in deinen Pfaden einfach den Pfad entsprechend davor packen.

Gruß
 
Werde das denke auch so machen. Wundere mich trotzdem, das es manchmal geht, und manchmal nicht.
EDIT:
Habs mal getestet, allerdings konnte ich einen Fehler dadurch nicht beseitigen:
PHP:
Fatal error: Exception thrown without a stack frame in Unknown on line 0

Schein also irgend wo noch nen Fehler drinn zu haben. In den Klassen hat aber keiner einen gesehen oder?
Der fehler tritt allerdings erst auf, nachdem schon alles vorbei ist.
 
Zuletzt bearbeitet:
Die Ursache stand doch schon in der ersten Fehlermeldung die du gepostet hast: open_basedir restriction in effect. Das ist eine Option, die man gewöhnlich in der php.ini oder in der Webserver-Konfiguration setzt. Die soll dich davon abhalten ein Verzeichnis höher oder in andere Pfade zu gehen und beschränkt dich auf die Verzeichnisse wo dein Script liegt. Auf welche Pfad du beschränkt bist zeigt die Fehlermeldung ja alles mit an. Lösung: Entweder Script umschreiben so dass du dich entlang dieser Pfade bewegst oder falls du selber der Admin bist, die Option ausschalten.
 
Die Ursache stand doch schon in der ersten Fehlermeldung die du gepostet hast: open_basedir restriction in effect.
Wenn das wirklich das Problem wäre, würde es beim allen anderen Aufrufen auch nicht gehen.
Das Problem war der Destructor der Klasse Design. Genauer:
PHP:
$this->display('inc/design/gpp.htm', null, null, null, true);
Dies resultierte in
Code:
Fatal error: Exception thrown without a stack frame in Unknown on line 0
und das warf PHP so durcheinander, das er die Pfade nicht mehr richtig öffnen konnte.
Versteh nur nicht warum das so zu nem fehler führt. Meines erachtens ist der Destructor doch genau für solche aufräumarbeiten da oder? Hab jetzt ne methode geschrieben, welche ich manuell von ausen aufrufe bevor ich das Objekt zerstöre. Nicht ganz so wie gewünscht, geht aber auch.

Was ich auch nie verstanden habe, warum der dne Destructor imemr 2 mal aufgerufen habe (hab ich durch einfügen eines echos mitbekommen). Ich befürchte fast, das dies das eigentliche Problem ist. Kann das Problem jemand löschen? das ich das wieder automatisch machen kann?
 

Ähnliche Themen

Nginx als Reverse Proxy für Nextcloud und Emby

Rollei Mini Wifi Camcorder

dovecot und postfix Konfiguration Problem

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

CentOS 6.3 RADIUS - Keine Verbindung möglich

Zurück
Oben