In includeter Datei Dateinamen der includenden Datei holen

Moin.

Wie bekomme ích mit PHP den Dateinamen raus?
Das Problem ist, das eine includete Datei den Namen der Datei herausfinden muss, von der der Include aus gegangen ist.

also, zur verdeutlichung:

Dateiname: test.php

<?php
include "inc.php";
?>

Dateiname: inc.php

<?php

function dateinamen_finden(){

// code

return $dateiname; // müsste in diesem beispiel 'test.php' sein
}

das ist deshalb wichtig, da der code mehrfach ausgeführt (in mehreren datein) wird, und in der includeten datei der dateiname weiterverarbeitet wird.

mit einer Variable?

test.php:

$parent_file = "test.php";
include("inc.php");

inc.php:

//hier kann man dann einfach mit $parent_file oder so weiter arbeiten
echo $partent_file;

eine andere Methode fällt mir spontan nicht ein.

balmungs idee ist gut und sauber

basename($_server[‘PHP_SELF’],".php");

geht glaub ich auch…, allerdings wieß ich nicht wie man das dann so einbauen soll wie du es gerne hättest…

bin nen php “anfänger” :confused:

genauer gesagt geht es um log informationen, um benutzerstatistiken erheben zu können. daher wäre es schön, nur diese datei einzubinden, und der rest geht von selbst.

im Bezug auf diese Geschichte habe ich ein anderes Problem.
get_browser arbeitet nicht wie erwünscht.

siehe hier:

jw-lighting.bplaced.net/new_site … ss.inc.php

Code:

<?php
class logZugriff{
//initialisieren
protected $filename = NULL;
protected $referer = NULL;
protected $host = NULL;
protected $os = NULL;
protected $ip = NULL;
protected $browser = NULL;
private $client_info = NULL;
public $timestamp = NULL;

function __construct($filename, $referer=false){
if ($filename)
$this->filename = $filename;
else
$this->filename = "undefined filename";

if($referer)
$this->referer = $referer;
else if ($_SERVER['HTTP_REFERER'])
$this->referer = $_SERVER['HTTP_REFERER'];
else
$this->referer = "undefined referer";

$this->timestamp = time();
}

function holeClientInformationen($ausgeben=false,$ausgabe_html=false){
$this->ip = $_SERVER['REMOTE_ADDR'];
$this->host = $_SERVER['REMOTE_HOST'];
$this->client_info = get_browser(null, true);
$this->browser = $this->client_info['browser'] . " V" . $this->client_info['version'] . " ;CSS: " . $this->client_info['css'] . " ;JS: " . $this->client_info['javascript'] . " ;Kekse: " . $this->client_info['cookies'];
$this->os = $client_info['platform'];
if($ausgeben){
echo "IP: " . $this->ip;
echo $ausgabe_html ? "<br />\n" : "\n";
echo "Browser: " . $this->client_info['parent'];
echo $ausgabe_html ? "<br />\n" : "\n";
echo "Betriebssystem: " . $this->client_info['platform'];
echo $ausgabe_html ? "<br />\n" : "\n";
}
}

function setzeSessionLogInfo($sid, $sessParams=null){
$this->sessionID = $sid;
if($sessParams)
$this->sessionParams = serialize($sessPrams);
}

function schreibeLog($datenbank=true,$file=false){

}

function gebeLogDatenAus(){
echo "<strong>ALLGEMEINE INFORMATIONEN:</strong>\n<br />\n";
echo "Dateiname: " . $this->filename . "<br />\n";
echo "Referer: " . $this->referer . "<br />\n";
echo "Datum: " . date("d.m.Y H:i",$this->timestamp) . " Uhr<br />\n";
echo "<br />\n<strong>CLIENT INFORMATIONEN:</strong>\n<br />\n";
$this->holeClientInformationen(true,true);
}

function __destruct(){
echo "<br />\n";
echo $_SERVER['HTTP_USER_AGENT'] . "<br />\n";
nl2br(var_dump($this->client_info));
}

}

$logger = new logZugriff(__FILE__, false, $_SERVER['HTTP_REFERER']);
$logger->holeClientInformationen(false);
$logger->gebeLogDatenAus();
echo "<br /><a href=\"log.class.inc.php\">referer</a>";
?>

$_SERVER[“SCRIPT_NAME”]

hilft vllt. bin mir nicht sicher, aber ich glaube das müsste die datei enthalten, die auf dem Server als “root” oberste Datei ausgeführt wird…

bsp:

index.php
=> include(“hidden/1.php”);

hidden/1.php
=> include(“test.php”);

test.php (bzw. hidden/test.php)
=> echo $_SERVER[“SCRIPT_NAME”];

sollte dann index.php ausgeben…

mfg Joey

es gibt eine Superglobale FILE, die automatisch die aktuelle Datei einthält…man könnte das dann zB so lösen:

index.php

define("ROOT_PATH", basedir(__FILE__));
include ROOT_PATH."/includes/katze.php";

und in der includes/katze.php

if(!defined("ROOT_PATH"))
   die("Hacking attempt!");

include ROOT_PATH."/includes/hund.php";

Sicher und verständlich :wink:

Ich hatte schon mit File arveiten wollen, aber das ist ja der Pfad, nicht, wie der Name vermuten lassen könnte der Dateiname.

$_SERVER[‘SCRIPT_NAME’] werde ich mal probieren. es geht ja um den dateinamen.
wie bekomme ich den das unterverzeichniss? auch mit basedir()? udn wenn es mehrere verzeichnisse sind (z.b. …/web/tutorials/index.php). eine index.php gibt es meist öfter, wie kann ich jetzt die unterverzeichnisse raus bekommen?

also z.b. einen pfad wie oben, allerdings nicht von der aktuellen datei, sondern über $_SERVER[‘SCRIPT_NAME’], um den pfad einer includenden datei herauszufinden.

und was ist das problem bei get_browser()? fehlen da einstellungen in der php.ini?

EDIT:
Folgendes aus dem php-manual:

Hinweis: Damit es richtig funktioniert, muss die browscap-Einstellung Ihrer php.ini auf die richtige browscap.ini-Datei Ihres Systems zeigen.
browscap.ini ist nicht Bestandteil von PHP, aber eine aktuelle php_browscap.ini bekommen Sie hier.
Da die browscap.ini Informationen zu vielen Browsern enthält, obliegt es dem Skript-Schreiber, diese Datei auf dem Laufenden zu halten. Das Format dieser Datei sollte selbsterklärend sein.

Wo genau liegt denn jetzt das Problem, aus einem Pfad inklusive Dateinamen das gewuenschte zu extrahieren?
Neben dirname(), basename(), pathinfo() & Co. gibt’s ja auch noch Stringfunktionen …

Und zur get_browser-Sache: Die browsercap-Direktive ist nur PHP_INI_SYSTEM setzbar, d.h. in der php.ini oder httpd.conf - da muesstest du dich also an Miro wenden und fragen, ob er das hier auf bplaced einrichtet.

gut, meinst du ich soll ihm mal ne pn schreiben? oder ist das ehr was fürs Fragen und Probleme Board?
Das sollte ja kein Problem darstellen, ist ja keine Sicherheitslücke oder so.
Und die Funktion ist echt praktisch:

de.php.net/manual/de/function.get-browser.php

Also ich wuerd’ im Support-Forum anfragen.

Ich weiss aber nicht, wie’s mit der Performance aussieht, ob das “viel” braucht - die browsercap.ini von der genannten Adresse ist ja schon mal 300KB gross, wenn die jedes Mal nach dem UserAgent durchsucht werden soll …

Na ja, fuer Statistik-Fetischisten vielleicht …

Wenn man damit aber so’n Mist umsetzt, wie im dynamische Forensignatur-Thread :unamused: - ich finde kaum was ueberfluessiger, als wenn mir jemand auf einer Webseite anzeigt, welchen Browser und welches OS ich benutze - als ob ich das nicht selber wuesste …

und hinzu kommt ja auch noch, dass man den User-Agent relativ leicht manipulieren kann. Von daher ist es für “Browserweichen” auch nicht unbedingt brauchbar.

Nein, ist ja nicht für eine Signatur :wink:

wie gesagt ist das eine Log-Klasse, und so kann ich mir ein besseres Bild darüber machen, welchen Browser meine Besucher benutzen, um die Seite drauf abzustimmen (der IE6 bspw. unterstüzt :hover nur beim element a, aber meine ausklappende navigation beruht darauf.)

Nun, dafür reicht es doch, einfach den user-agent in die log-Datei
schreiben zu lassen.
Mit einem Blick in die log-Datei sieht man dann, daß es immer
noch ein paar Leute gibt, die den MSIE nutzen - selbst auf
Seiten, die Themen behandeln, die mit dem MSIE gar nicht
umsetzbar sind und damit weiß man dann doch genug - ist dann
doch nicht mehr sooo relevant, ob das nun 5, 10 oder 20%
sind und ob da nun ein Drittel von wiederum sowieso gefälscht
ist und vielleicht ein Opera oder Konqueror (was dann auch
wieder erklären täte, wieso die Leute die Seite angucken, die
ein Thema behandelt, welches mit dem MSIE gar nicht umsetzbar
ist ;o)

Das Problem mit dieser tollen langen Datei ist wohl, daß man die
immer aktualisieren muß, sonst bekommst du den Goggle-Chrome
entweder als Dummfug angezeigt, als Safari oder als Konqueror -
kann man sich dann aussuchen, je nachdem, wie alt die Datei
ist ;o) Und so wird die Datei dann auch mit jedem neuen browser
und jeder neuen Version ein Stück länger, wenn sie aktualisiert
wird. Wobei auch damit nicht geklärt ist, ob der angezeigte MSIE
nicht vielleicht doch ein Opera, Konqueror oder Geckos ist.
Oder wenn man den user-agent buchstäblich nimmt, ob nicht
vielleicht doch alle MSIEs eigentlich Netscape4-browser aus dem
letzten Jahrtausend sind ;o)

stimmt allerdings. Schliesslich können wir mit unserem Kopf auch denken und schlussfolgern, und nicht nur Code schreiben :ps:

Dann ist mir schon geholfen, danke!

Den Browscap-Parser gibts als php-Varianten. Entweder die native Funktion mit etwa 20 Zeilen, oder eine Klasse, die cacht und sortiert und sonst noch alles mögliche :ps: