PHP: ini_set für include_path

Huschi

Moderator
Folgender Code:
Code:
ini_set('include_path', "./program");
print ini_get('include_path');
als auch:
Code:
set_include_path("./program");
print get_include_path();
Funktionieren auf einem Server nicht. (Sprich die Ausgabe zeigt immer den alten include_path.)
Genauso ein setzten des include_path per php_value in der .htaccess ändert nichts.

Andere Optionen wie session.name, upload_max_filesize oder post_max_size funktionieren an allen Stellen.
Warum also diese (relativ wichtige) Option nicht?
Hab nirgendwo etwas darüber gefunden, wie und wo man dies sperren könnte.

PS: System: Debian 4.0, Apache2, mod_PHP 5.2.5-0.dotdeb.2

huschi.
 
Folgender Code:
Andere Optionen wie session.name, upload_max_filesize oder post_max_size funktionieren an allen Stellen.

"upload_max_filesize" und "include_path" unterscheiden sich.

upload_max_filesize = PHP_INI_PERDIR
post_max_size = PHP_INI_PERDIR
include_path = PHP_INI_ALL

Siehe PHP: php.ini directives - Manual

Ich habe noch nicht herausgefunden, was der Unterschied ist, aber googlen hat mich auf folgendes gebracht:

Kristian Köhntopp said:
Welche Konfigurationsvariablen kann ich nicht in .htaccess-Dateien verwenden?
Sicherheitsrelevante Konfigurationseinträge sind nicht über .htaccess-Dateien steuerbar, sondern nur über Einträge in <Directory> oder <Location>-Blocks in der zentralen Konfigurationsdatei. Sonst wären sie auch sinnlos, da die .htaccess-Dateien ja durch den Anwender kontrolliert werden.

Welche Werte wo definiert werden dürfen, ist im offiziellen PHP-Manual offiziellen PHP-Manual im Detail beschrieben.
(Quelle: FAQ der Newsgroups de.comp.lang.php.*)

Hast Du PHP als API installiert? Nur dann hätte nämlich meine nächste Frage nach MASTER und LOCAL Value Sinn ...

Ich hoffe, ich denke morgen dran weiter zu googlen, denn jetzt will ich erstmal ins Bett.

Gruß
Claus
 
post_max_size = PHP_INI_PERDIR
include_path = PHP_INI_ALL
Das waren ja auch nur Beispiele. Und include_path sollte überall gesetzt werden können.
Die Frage ist, warum nimmt er es nicht?

Hast Du PHP als API installiert?
Ja, mod_php von DotDeb. Also mit suhosin-Patch.

Nur dann hätte nämlich meine nächste Frage nach MASTER und LOCAL Value Sinn
Der Master- und Local-Value kommen beide aus der php.ini. Den darf ich aber nicht verändern.

@DerFalk:
Nein, es sind keine disable_functions gesetzt
 
Ich teste morgen oder übermorgen, ob der "inlcude_path" bei meinen Providern gesetzt werden kann.

Außerdem versuche ich noch herauszufinden, was der Unterschied zu "PHP_INI_PERDIR" und "PHP_INI_ALL" ist.

Gruß
Claus
 
Hallo Claus,

PHP_INI_PERDIR: Der Eintrag kann in php.ini, .htaccess oder httpd.conf gesetzt werden
PHP_INI_ALL: Der Eintrag kann überall gesetzt werden

Da der include_path eine PHP_INI_ALL-Einstellung ist, sollte es funktionieren.
Ich habe inzwischen festgestellt, daß es an der PHP-Version mit dem suhosin-Patch liegt als mod_php5 liegt. Denn mit einer älteren Version funzt es.
Beim Umschwung auf suPHP funktionierte es ebenfalls.

huschi.
 
Sorry, dass ich Dir nicht schneller helfen konnte.

Ich habe festgestellt, dass es bei "all-inkl.com" möglich ist, den INCLUDE_PATH zu setzen. Es ist kein Sicherheitsrisiko, denn beim einbinden der PASSWD kommt es trotzdem zu einer Fehlermeldung.

Code:
// PHP Code
<?php
  ini_set('include_path', '.;../test;/etc');
  require_once 'test_require.php';
  require_once '/etc/passwd';
?>

// Ausgabe

.;../test;/etc

Warning: require_once() [function.require-once]: open_basedir restriction in
effect. File(/etc/passwd) is not within the allowed path(s):
(/www/htdocs/mein_login/:/tmp:/usr/bin) in
/www/htdocs/mein_login/pfad/test/ini_set.php on line 7

(...)

Fatal error: require_once() [function.require]: Failed opening required
'/etc/passwd' (include_path='.;../test;/etc') in
/www/htdocs/(...)/ini_set.php on line 7

In "test_require.php" ist nur der PRINT-Befehl drin.

Fazit: Die OPEN_BASEDIR-Direktive greift stärker als das Setzen des INCLUDE_PATH. Gut, hätte ich mir auch ohne Test denken können :-).

Danke für Deine Aufklrärung mit PHP_INI_PERDIR und Co.

Gruß
Claus
 
Back
Top