[PHP] include_path kann nicht gesetzt werden

flaschenkind

Well-known member
ID: 118459
L
20 April 2006
4.507
337
Ich versuche mit set_include_path() den include_path zusetzen. Die Funktion gibt aber false zurück, es klappt also nicht. Dies ist auch das korrekte Verhalten, aber das sagt uns leider nicht, wieso es nicht klappt.

Jetzt ist die Frage, wieso das fehlschlägt. Ich habe gerade mit dem Server-Administrator ne Stunde lang nach dem Problem gesucht, wir sind aber nicht fündig geworden.
Es handelt sich bei dem Server um einen Confixx-Server und das Script basiert auf dem Zend Framework. Wir wollen die Scripts ungerne umschreiben (bzw. gar nicht), das würde nur extra Probleme geben bei Updates.
Wir wollen auch ungerne die Include Paths für alle Ordner in der Vhost anlegen.

Jetzt ist die Frage, welche Ursachen kann es haben, dass der include_path nicht im Script gesetzt werden darf?
Wir haben es mit dem deaktivieren des Safe-Modes versucht und zurücksetzen des includes_path in der Vhost, mit "", "." und none als Werte. Bei "" und "." war dies der neue Wert für den include_path, bei none wurde die globale Einstellung aus der php.ini übernommen.

Gibt es noch andere Möglichkeiten dafür, dass das setzen des include_path fehlschlägt? Oder gibt es Möglichkeiten festzustellen, wodran es scheitert?
 
Es gibt in der PHP.INI noch "disable_functions", weiß im Moment allerdings nicht wie sich das beim Aufruf bemerkbar macht (False oder Fehlermeldung). Soweit ich aber weiß fummelt Confixx darin herum und deaktivert PHP-Funktionen wie exec() usw...

Werkelt da nicht auch suexec rum? Vielleicht sind's ja nur irgendwelche Berechtigungen, die den Zugriff verweigern, und PHP aber nur False zurückgibt weil es misslungen ist?

Sind nur Ideen, hatte das Problem noch nicht und nutze auch Confixx nicht...

Gruß
 
Schonmal
PHP:
ini_set('include_path', 'PathValue');
probiert, ich weiß nicht wieso aber ich ziehe diese Variante der direkten Funktion immer vor und hatte noch nie Probleme.

Btw: evtl noch interessant für Dich https://forum.webhostlist.de/forum/3-x-allgemein... weiß ja nich was Du für ne PHP Version oben hast.

Mit ini_set ist es genauso. Die PHP Version ist 2.5.6, es hängt also damit zusammen, dass der Wert schon einmal irgendwo in einer VHost gesetzt ist.
Den Thread haben wir auch gefunden, aber das hat uns nicht wirklich geholfen. Das hat nicht geklappt und Confixx lief danach auch nicht mehr :ugly:
 
Die PHP Version ist 2.5.6
na dann kannste das Zf sowieso net nutzen :p :biggrin:

Ich kann dich vollkommen nachvollziehen, ich hatte mit meinem Hoster mal das gleiche Problem, bei den Recherchen bin ich auf 3 Möglichkeiten gestoßen:
  1. set_include_path war im PHP-Core kaputt, das war z.B. in 5.2.0 so
  2. der include_path wurde mit php_admin_value gesetzt, wodurch du nichts mehr ändern konntest
  3. es gab wohl einige Male Probleme mit den fertigen PHP Debian Packages, also mal schauen ob das Problem bei selbst kompilierten PHP-Versionen noch auftritt
 
na dann kannste das Zf sowieso net nutzen :p :biggrin:
Ich meinte natürlich 5.2.6 :biggrin:

Ich kann dich vollkommen nachvollziehen, ich hatte mit meinem Hoster mal das gleiche Problem, bei den Recherchen bin ich auf 3 Möglichkeiten gestoßen:
  1. set_include_path war im PHP-Core kaputt, das war z.B. in 5.2.0 so
  2. der include_path wurde mit php_admin_value gesetzt, wodurch du nichts mehr ändern konntest
  3. es gab wohl einige Male Probleme mit den fertigen PHP Debian Packages, also mal schauen ob das Problem bei selbst kompilierten PHP-Versionen noch auftritt
1. Jetzt gilt: It's not a bug, it's a feature :roll: Seit PHP 5.2.5 kann man set_include_path nicht mehr nutzen, wenns per php_admin_value gesetzt ist (Punkt 2)
3. Ich bezweifel, dass der Admin PHP selber kompiliert, da laufen noch andere Projekte auf dem Server, die dann erstmal down wären :-?
 
Ich hatte vor einiger Zeit auf einem Confixx-Server ähnliche Probleme und ebenfalls stundenlang nach der Ursache gesucht. Dann bin ich auf die "confixx_mhost.conf" gestossen, die im Konfig-Verzeichnis des Apachen liegt, meist /etc/apache2 (bei Debian).

In dieser Confixx-eigenen Datei, die den VHost für Confixx selbst konfiguriert, steht ganz oben eine Zeile, die da heisst:

Code:
php_admin_value include_path .

Da diese Zeile ausserhalb eines virtuellen Hosts definiert wird, gilt diese auch global für den ganzen Server. Ich habe dann diese Zeile gelöscht und siehe da, meine Probleme waren verschwunden. Der Safe-Mode muss aber dennoch deaktiviert werden, um den include_path per Script setzen zu können.

Evtl. hilft das in diesem Fall ja auch weiter...
Allerdings denke ich mal, dass Confixx, sobald dieses aktualisiert wird, die confixx_mhost.conf neu schreiben und diese Zeile da wieder erscheinen wird. Also müsste das dann nach jedem Confixx-Update neu überprüft werden.

EDIT:
OK, das wurde ja weiter oben schonmal erwähnt. Aber das Confixx danach nicht mehr läuft, kann ich nicht bestätigen.
 
Du solltest vllt erstmal schauen, ob die Variable wirklich vor Schreibzugriff geschützt ist.
Mit ini_get_all und der Aufschlüsselung der Rechte in den Comments, habe ich damals das nachgeprüft.
 
Du solltest vllt erstmal schauen, ob die Variable wirklich vor Schreibzugriff geschützt ist.
Mit ini_get_all und der Aufschlüsselung der Rechte in den Comments, habe ich damals das nachgeprüft.
PHP:
[include_path] => Array
        (
            [global_value] => .:/usr/share/php:/usr/share/pear
            [local_value] => [...]
            [access] => 60
        )
So siehts aus. Was sagt mir das access = 60? In den Userkommentaren im Maual zu ini_get_all() steht lediglich was von 1, 2, 4 und 7.

Nein, die Möglichkeiten gibt es leider nicht. Confixx ist, was solche Dinge angeht, sehr unflexibel, schon immer gewesen und ändern wird sich daran sicherlich nichts.
Hmm, das ist schlecht :-?
 
PHP:
[include_path] => Array
        (
            [global_value] => .:/usr/share/php:/usr/share/pear
            [local_value] => [...]
            [access] => 60
        )
So siehts aus. Was sagt mir das access = 60? In den Userkommentaren im Maual zu ini_get_all() steht lediglich was von 1, 2, 4 und 7.

6 = 4 + 2, 0 = nicht vorhanden. :) Ich nehme mal an das ist bezogen auf "per php.ini" bzw. "in der Datei direkt setzen"! Würde mal sagen das geht nich in der Datei direkt zu setzen. In meiner (lokalen) PHP Hilfedatei find ich nix zu das man das über ini_set auch setzen kann... Würd ich jetz also mal von ausgehen geht nüch...


Hmm, das ist schlecht :-?

Nartürlich kann das auch Confixx. Da gibts irgendwo ein "http_special" (sorry weiss nimmer wie das genau heisst - benutze seit Unzeiten kein Confixx mehr). Dort einfach reintun:

php_admin_value include_path "<path>"

Alternativ falls dein Confixx das nich kennt - kann sein das man das als "Hoster" deaktivieren kann - einfach eine .htaccess Datei in den entsprechenden Ordner + gleichen Inhalt wie eben beschrieben mit dem admin_value. ;)
 
Nartürlich kann das auch Confixx. Da gibts irgendwo ein "http_special" (sorry weiss nimmer wie das genau heisst - benutze seit Unzeiten kein Confixx mehr). Dort einfach reintun:

php_admin_value include_path "<path>"

Es ging dabei aber nicht darum, die VHosts der Kunden dauerhaft zu ändern, was natürlich per "HTTP Spezial" geht, sondern darum, das Überschreiben der Konfigurationsdatei "confixx_mhost.conf" zu verhindern, wenn ein Confixx-Update vorgenommen wird. In dieser Datei wird, wie bereits geschrieben, der VHost für Confixx selbst konfiguriert und da erreichst du mit "HTTP Spezial" überhaupt nichts, da dieser VHost eben nicht zu den Kunden-VHosts gehört. Wenn du eine Änderung in der "confixx_mhost.conf" vornimmst und irgendwann später ein Update von Confixx durchführst, wird diese neu generiert (im Laufe des Updates) und die Änderungen werden darin garantiert überschrieben, ohne, dass du das irgendwie verhindern könntest.

Butter und Eier sind halt doch nicht dasselbe ;)

EDIT:
Was mir gerade einfällt:
Es gibt da einen Ordner "/root/confixx/safe" in dem man diverse Dateien ablegen kann, die während einem Vorgang, wie einem Update, nicht angerührt, bzw. überschrieben werden dürfen. Dort kann man, z.B., notwendige Änderungen an der Konfig für Spamassassin vornehmen, die dann von Confixx auch prompt übernommen werden. Es ist nur eine Vermutung, ausprobiert habe ich das noch nicht aber vielleicht funktioniert das auch mit der "confixx_mhost.conf" während einem Update, wenn man eine Kopie der Datei dort ablegt. Normalerweise soll das nur vor Änderungen während der cronjobmässigen Aktualisierungen schützen aber evtl. hat SWsoft/Parallells ja mal für einen Lichtblick gesorgt und es funktioniert so.
 
Es ging dabei aber nicht darum, die VHosts der Kunden dauerhaft zu ändern, was natürlich per "HTTP Spezial" geht, sondern darum, das Überschreiben der Konfigurationsdatei "confixx_mhost.conf" zu verhindern, wenn ein Confixx-Update vorgenommen wird. In dieser Datei wird, wie bereits geschrieben, der VHost für Confixx selbst konfiguriert und da erreichst du mit "HTTP Spezial" überhaupt nichts, da dieser VHost eben nicht zu den Kunden-VHosts gehört. Wenn du eine Änderung in der "confixx_mhost.conf" vornimmst und irgendwann später ein Update von Confixx durchführst, wird diese neu generiert (im Laufe des Updates) und die Änderungen werden darin garantiert überschrieben, ohne, dass du das irgendwie verhindern könntest.

Butter und Eier sind halt doch nicht dasselbe ;)

Ah oki das war mir entgangen. Da Include_Path auf "Scriptebene" wirkt, war ich auch nicht davon ausgegangen das du es global ändern wolltest. ;) Weil eben auch geschrieben wurde es wird schon mit ini_set etc. gearbeitet - eine Methode, die man eigentlich in dem Zusammenhang nur einsetzt wenn man es über Confixx, .htacess oder andere Dinge nicht "global" regeln möchte oder kann.

EDIT:
Was mir gerade einfällt:
Es gibt da einen Ordner "/root/confixx/safe" in dem man diverse Dateien ablegen kann, die während einem Vorgang, wie einem Update, nicht angerührt, bzw. überschrieben werden dürfen. Dort kann man, z.B., notwendige Änderungen an der Konfig für Spamassassin vornehmen, die dann von Confixx auch prompt übernommen werden. Es ist nur eine Vermutung, ausprobiert habe ich das noch nicht aber vielleicht funktioniert das auch mit der "confixx_mhost.conf" während einem Update, wenn man eine Kopie der Datei dort ablegt. Normalerweise soll das nur vor Änderungen während der cronjobmässigen Aktualisierungen schützen aber evtl. hat SWsoft/Parallells ja mal für einen Lichtblick gesorgt und es funktioniert so.

Ja, funktioniert - eigentlich. kann sein es funktioniert nicht wenn Confixx diese safes mal wann generiert aber ich weiss das ich damals bei meinem VServer Probleme hatte, das einige Einträge in der aliases-Datei nicht so stimmig waren bzw. so, wie ich sie gern wollte (root ging z.B. an nobody, ich wollts aber an ein echtes Postfach weitergeleitet ham ;)). Letztendlich hab ichs im safe-Ordner geändert und es ging. Kann natürlich auch daran liegen, das die aliases i.d.R. nicht wirklich beeinflusst wird durch z.B. anlegen eines neuen Kunden, was ja bei der mhost-Datei durchaus der Fall sein könnte...
 
äääähm, das sind aber Bits die verknüpft werden, deswegen stimmt das vorne und hinten nicht :biggrin:

Ja und nein. Es sind Zustände, genau wie das auch beim chmod passiert. Man macht bei solchen Verfahren das halt so, dass man sich Zahlen aussucht, die einerseits die Zustände repräsentieren, andererseits bei einer "Addition" zweier beliebiger "Zustände-Zahlen" kein anderer Zustand herauskommen kann.

1, 2, 4 und 7. Trifft darauf zu oder? 1 + 2 = 3 -> keine Überschneidung. 1 +4 = 5 -> keine Überschneidung. 2 + 4 = 6 -> keine Überschneidung. 7 als höchste Variante (also meist das "Vollrecht") überschneidet sich in der Hinsicht natürlich auch ohne Addition nicht. ;) und 1 + 2 +4 -> das ergibt eben die 7 ergo das Vollrecht. Insofern kommt das schon vorne und hinten hin. ;)
 
Kann natürlich auch daran liegen, das die aliases i.d.R. nicht wirklich beeinflusst wird durch z.B. anlegen eines neuen Kunden, was ja bei der mhost-Datei durchaus der Fall sein könnte...

Nein, die mhost.conf wird nicht im laufenden Betrieb geändert. Diese wird bei der Installation von Confixx einmalig angelegt. Änderungen darin kann man manuell vornehmen und die bleiben auch bestehen... erstmal. Lediglich wenn man dann ein Confixx-Update einspielt, wird sie neu generiert und die Änderungen darin werden überschrieben.

Die darin enthaltene include_path-Anweisung, schreibt Confixx dann automatisch ausserhalb der VHost-Konfiguration, ist somit also global gültig. Das macht für mich soviel Sinn, wie ein Fahrrad für Fische :roll: Vor allem, nachdem sich der include_path bei aktuellen PHP-Versionen nicht mehr ändern lässt, wenn er an einer Stelle zuvor schonmal per php_admin_value definiert wurde. Confixx definiert das Ding global, was soviel heisst, dass ich den include_path für keinen Kunden mehr ändern kann, auch nicht per .htaccess oder HTTP-Spezial, da die Kunden-VHosts erst nach der mhost.conf geladen werden.

Logischer Schluss:
Entweder packe ich die Anweisung in der mhost.conf innerhalb der VHost-Anweisungen rein oder ich lösche das ganze.
 
1, 2, 4 und 7. Trifft darauf zu oder? 1 + 2 = 3 -> keine Überschneidung. 1 +4 = 5 -> keine Überschneidung. 2 + 4 = 6 -> keine Überschneidung. 7 als höchste Variante (also meist das "Vollrecht") überschneidet sich in der Hinsicht natürlich auch ohne Addition nicht. ;) und 1 + 2 +4 -> das ergibt eben die 7 ergo das Vollrecht. Insofern kommt das schon vorne und hinten hin. ;)
Und was bedeutet dann das 60? :roll: