PHP: Mehrere requires oder includes nacheinander nicht möglich?

kas

Obermaat
Thread Starter
Mitglied seit
28.06.2006
Beiträge
397
Ort
Berlin-Wedding
Ich werde bald wahnsinnig!
Schon seit Wochen ärgere ich mich mit dem Einbinden von PHP-Dateien rum. Folgendes:
index.php; Das funktioniert NICHT:
Code:
<?
require ("http://".$_SERVER['HTTP_HOST']."/variablen_global.php");
require ("http://".$_SERVER['HTTP_HOST']."/nav.php");
?>
Fehlermeldung:
Fatal error: Call to undefined function tooltip() in PFAD/DATEI.php on line 36
In der nav.php ist die Funktion drin. ABER die erste Datei wird included. Warum nicht die 2te??

Komischerweise funktioniert das hier wunderbar:
Code:
<?
require ("../variablen_global.php");
require ("../nav.php");
?>
Die Aufrufende Datei ist in einem Unterordner, die includierenden Datein im Root Verzeichnis des Servers.

Mit den Server Vars habe ich auch schon genügend experimentiert. Vermutlich liegt dort das problem. Aber warum? Ich verstehe das einfach einfach nicht.
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Die ersten requires binden eine Datei von dem http server ein. Also tut php so als wäre es als ein Browser und kriegt von dem eine antwort. dieselbe die du sehen würdest wenn du www.deinserver.de/variablen_global.php im Browser würdest. Und da wuerdest du wohl einfach nur eine leere Seite sehen. Und in dieser (leeren) Seite werden keine Funktionen definiert, also kann dein Script die Funktion tooltip() auch nicht kennen.

Wenn du die Datei nicht über einen relativen Pfad einbinden willst, dann musst du den Verzeichnispfad des Webservers verwenden. Der sieht dann zb. so aus '/srv/www/www.deineseite.de/html/'. Den findest du zb. raus wenn du $root = pathinfo(__FILE__); machst. Dann sollte es mit

Code:
<?

$root = pathinfo(__FILE__);

print_r($root):

$root = $root['dirname'];

require ($root . "/variablen_global.php");
require ($root . "/nav.php");

?>
funktionieren.

Noch besser ist es aber wenn du den Pfad selber raus findest und dann $root von hand definierst.

Ich hoffe das war jetzt nicht zu wirr.
 
Dann vertsehe ich das so, dass nur die erste eingebunden wird und die zweite nicht.

Hmm, so wie du das meinst, müsste ich die root Variable in jeder Datei definieren, wo die includes gebraucht werden. Den Pfad usw. bekomme ich ja auch per phpinfo() zu sehen. Hmm, dann müsste ich den Pfad einmal als $root in der variablen_global.php definieren und deklarieren und require die in jeder Datei. Der Zweite Aufruf wäre dann per $root für weitere includes, oder wie?

Dabei hatte ich in der variablen_global.php bereits die
$domain = "http://WWW_ADRESSE";
ODER
$domain = "http://".$_SERVER['HTTP_HOST'];

definiert. Geht beides nicht. Echo Anweisungen spucken aber das richtige aus.
 
In jeder datei includierst du einmal die variablen_global.php

Dort definierst du $root als das was du aus der phpinfo kriegst. und wenn du dann etwas requirest dann mit require_once($root . '/nav.php');.
Vergiss mal das http bei den includes, du willst ja nicht auf irgendeine website zugreifen, sondern auf dateien die direkt bei dir auf dem server liegen.
 
Danke! So funktioniert es.
Allerdings muss ich dann den Include Pfad in der php.ini anpassen. Sonst geht es nicht. Hoffentlich lässt das auch der Strato Server zu...
 
Danke! So funktioniert es.
Allerdings muss ich dann den Include Pfad in der php.ini anpassen. Sonst geht es nicht. Hoffentlich lässt das auch der Strato Server zu...

also an der php.ini haettest eigentlich nichts aendern sollen
 
Hmm, das ist komisch. Ich hatte es wegen dieser Fehlermeldung geändert:
Code:
Warning: require_once(navigation.php) [function.require-once]: failed to open stream: No such file or directory in D:\public\domian1\ordner1\datei.php on line 4

Fatal error: require_once() [function.require]: Failed opening required 'navigation.php' (include_path='.;D:\Internet\xampp\php\pear\') in D:\public\domain1\ordner1\datei.php on line 4
Definiere ich include_path = ".;D:\Internet\xampp\php\pear\;D:\public\domain1\" als zusätzlichen Include Pfad, gehts.

(Nicht wundern, Linux Server läuft noch nicht. ;) jedenfalls zu hause)

EDIT: PHP Version 5.2.1, register_globals=Off
Abgesehen davon habe ich einen anderen, kleineren Fehler jetzt drin. Es funktioniert $title in variablen_global.php für den <title>-Tag nicht mehr. Ich hatte ein Array mit Seitentieln für jeden Dateinamen erstellt. Siehe hier: http://www.forumdeluxx.de/forum/showthread.php?t=433538
 
Zuletzt bearbeitet:
poste mal den code von deinen includes
 
variablen_global.php
Code:
<?
//Globale Variablen
$title   = "Berlin-Mitte - ";	//Browsertitel als fester Wert. Siehe <TITLE>-Tag
$domain  = "http://".$_SERVER['HTTP_HOST'];
$domain1 = pathinfo(__FILE__);
$domain1 = $domain1['dirname'];
$domain_lokal = "http://domain_lokal";	
$root_lokal   = 'D:/public/domain1';
$domain_public = "http://www.domain.de";
$root_public   = '/home/strato/www/cd/domain/htdocs/wed/';
//echo $domain1."<br>";
//echo $domain2."<br>";
//print_r($domain3);
$server_ip     = $_SERVER['SERVER_ADDR'];
$server_name   = "http://".$_SERVER['SERVER_NAME'];
$server_root   = $_SERVER['DOCUMENT_ROOT'];


//-----Weitere Funktionen BEGINN-----
//
function tooltip()
{
	global $domain;
	echo "<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\" src=\"$domain/js/wz_tooltip.js\"></SCRIPT>
  <SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\" src=\"$domain/js/tip_baloon.js\"></SCRIPT>\n";
}
?>

anfang irgendeiner datei die includiert:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?
require ("http://".$_SERVER['HTTP_HOST']."/variablen_global.php");
include_once ($root_public . "navigation.php");
?>
<HTML>
  <HEAD>
	<link rel="SHORTCUT ICON" href="<?echo $domain?>/favicon.ico">
    <TITLE><? echo $title; echo $seite_aktuell["$phpself"]; ?></TITLE>
.
.
.
<?tooltip()?>
usw...
 
Zuletzt bearbeitet:
Also ich habe das Problem in den Griff bekommen. Und zwar muss bei Strato in jedem Ordner wo ein Skript ausgeführt wird, eine php.ini sein. In der php.ini definiere ich einen absoluten Include Pfad, der auf das root Verz. verweist. Sonst geht es nur per relativen Pfaden. Naja, ich wollte ja die volle flexibilität. Mit dem Umstand kann ich aber leben.

Sehr vielen Dank für deine Hilfe trotzdem.
 
variablen_global.php
Code:
<?php
$live = false;

if ($live) {

$domain = "http://www.domain.de";
$root   = '/home/strato/www/cd/domain/htdocs/wed/';
} else {

$domain = "http://domain_lokal";	
$root   = 'D:/public/domain1';
}

// rest hier

irgendeine datei
Code:
<?php
require_once ('variablen_global.php');
require_once ($root . "navigation.php");

so gehoert sich das. Die variablen_global.php muss einfach nur in dem selben verzeichnis liegen in dem auch die datei liegt. Und dann sollte alles passen, auch ohne gebastel in der php.ini

Du musst einfach nur das $live anpassen je nachdem wo du bist.

Ich hab immer sowas wie
Code:
if (file_exists('c:/test.txt')) {
// nicht live
} else {
// live
}
gemacht. dann muss du dich um garnichts mehr kuemmern
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh