require_once(inc/config.inc.php): failed to open stream

Status
Niet open voor verdere reacties.

Atwist

Terugkerende gebruiker
Lid geworden
24 jan 2006
Berichten
1.055
Besturingssysteem
Wndows 10
Office versie
2016
Hallo,

Ben druk bezig om een website te bouwen in PHP en loop nu tegen een fout aan waar ik geen verklaring voor heb.
Zodra in bijvoorbeeld mijn admin.php in de map admin zet en de site opstart krijg ik deze fout
Code:
 require_once(inc/config.inc.php): failed to open stream
Gebruik hiervoor de opdracht header("location: admin/admin.php");

de complete fout melding
Code:
Warning: require_once(inc/config.inc.php): failed to open stream: No such file or directory in C:\wamp64\www\hmh\inc\admin.php on line 3

 Fatal error: require_once(): Failed opening required 'inc/config.inc.php' (include_path='.;C:\php\pear') in C:\wamp64\www\hmh\inc\admin.php on line 3

Als ik gewoon header("location: admin.php"); gebruik en de admin.php in de root zet werk de site wel.

Weet iemand hier een oorzaak van en hoe kan ik het oplossen.
 
Laatst bewerkt:
Gebruik eens /inc/config.inc.php

- Je bent bekend met de verschillen tussen require(_once) en location headers?
 
Laatst bewerkt:
Hallo PHP4U

Met een / ervoor gaat het ook niet goed.

require(_once) of location headers nee niet echt goed ik probeer het nu op te zoeken.
 
Bij een header(location) gaat het script daarna direct naar de opgegeven pagina en wordt vaak gebruikt als er geen foutmelding zijn geweest in een formulier om de bedankt pagina te tonen.

Een require() laad het desbetreffende php bestand en voert deze code uit alsof deze code gewoon om de huidige pagina staat en gaat na de require gewoon verder op deze pagina.

Ik vermoed dat je in jouw geval een require() nodig hebt om de config.php te laden waar waarschijnlijk de inloggegevens van de database o.i.d. in staan.

De melding die jij krijgt betekent dat het script het bestand config.inc.php niet kan vinden in de map "inc" gezien vanaf de admin.php.

Ik weet niet precies hoe jouw bestandsstructuur eruit ziet maar aangezien dat admin.php ook in een inc map zit vermoed ik dat er require_once(config.inc.php): zou moeten staan, vanuit gaande dat config.inc.php en adin.php in dezelfde map staan.
 
Heb behoorlijk wat gelezen, kom alleen niets tegen om het onderstaande op te lossen
Code:
//Überprüfung des Passworts
	if ($user !== false && password_verify($passwort, $user['passwort'])) {
		$_SESSION['userid'] = $user['id'];

		//Möchte der Nutzer angemeldet beleiben?
		if(isset($_POST['Angemeldet_bleiben'])) {
			$identifier = random_string();
			$securitytoken = random_string();
				
			$insert = $pdo->prepare("INSERT INTO securitytokens (user_id, identifier, securitytoken) VALUES (:user_id, :identifier, :securitytoken)");
			$insert->execute(array('user_id' => $user['id'], 'identifier' => $identifier, 'securitytoken' => sha1($securitytoken)));
			setcookie("identifier",$identifier,time()+(3600*24*365)); //Valid for 1 year
			setcookie("securitytoken",$securitytoken,time()+(3600*24*365)); //Valid for 1 year
		}

		header("location: /inc/admin.php");
		exit();

	} else {
		$error_msg =  "E-Mail oder Passwort war ungültig<br><br>";

Naar mijn mening moet hier een header("location: ") staan om door te gaan naar de pagina na een geldige inlog.
Heb ook $modul = inc/admin.php; geprobeerd dit kwam ik ook als oplossing tegen maar dat brengt ook niets.

en dit is volgens mij altijd goed
Code:
error_reporting(E_ALL);
session_start();
require_once("inc/config.inc.php");
require_once("inc/functions.inc.php");

Dus nu snap ik er niets meer van.
 
Met require kom ik al veel verder.
Code:
	$insert = $pdo->prepare("INSERT INTO securitytokens (user_id, identifier, securitytoken) VALUES (:user_id, :identifier, :securitytoken)");
			$insert->execute(array('user_id' => $user['id'], 'identifier' => $identifier, 'securitytoken' => sha1($securitytoken)));
			setcookie("identifier",$identifier,time()+(3600*24*365)); //Valid for 1 year
			setcookie("securitytoken",$securitytoken,time()+(3600*24*365)); //Valid for 1 year
		}
		require("inc/admin.php");
		//header("location: inc/admin.php");
		exit;
	} else {
		$error_msg =  "E-Mail oder Passwort war ungültig<br><br>";

Ik kom nu op de pagina nog wel met fout meldingen.
Code:
( ! ) Notice: session_start(): A session had already been started - ignoring in C:\wamp64\www\hmh\inc\admin.php on line 2
Call Stack
#	Time	Memory	Function	Location
1	0.0000	409368	{main}( )	...\login.php:0
2	0.2028	481824	require( 'C:\wamp64\www\hmh\inc\admin.php' )	...\login.php:29
3	0.2028	481824	session_start ( )	...\admin.php:2
 
Das mooi maar wat ik nog niet helemaal begrijpt is wat er op de pagina inc/admin.php moet gebeuren ....... is het een script wat uitgevoerd moet worden of moet de bezoeker na correcte inlog deze pagina bezoeken?
 
Maak anders even een flowchart hoe je script loopt.
 
@ariecade
Nee daar staat nu nog mijn admin pagina om te testen.
Ik wil graag de beheerders pagina's in een map hebben staan zodat deze straks zijn beveiligd met een .htaccess
lijkt mij namelijk niet verstandig om deze in de root te laten staan.

Snap nu alleen nog niet wat de laatste fout meldingen betekenen.
 
Je voert je session_start() dubbel uit. Blijkbaar in je geincludeerde admin.php terwijl die eerst in het andere bestand dit ook al oproept;

Als je je hele admin-paneel goed dichttimmert dan is een .htaccess overbodig. Je moet ervoor zorgen dat al bestand wat je kan includeren wordt beveiligd met een define.


admin/index.php
PHP:
<?php
define("INCLUDED",true);
// hier de rest uit
?>

geincludeerd_bestand_in_admin.php
PHP:
<?php
if(!INCLUDED) {
die("Not allowed! Bye bye!");
}

// rest van je script.
?>

Alle bestanden worden dan alleen geopend als ze via admin/index.php worden ingeladen.
 
Laatst bewerkt:
PHP4U

inderdaad werd de session_start(); vaker uitgevoerd dit is nu allemaal gewijzigt.

En als ik het goed begrijp dan moet de admin/index.php er zo uitzien.
Code:
<?php
define("INCLUDED",true);
// hier de rest uit

include("inc/config.inc.php");
include("inc/functions.inc.php");
include("admin/admin.php");
include("admin/ma_omline.php");
//Enz.
?>
Maar moet dan nog wel de admin/admin.php van hieruit starten ???????

en dit zou voor de admin/admin.php eruit moeten zien
Code:
<?php 

if(!INCLUDED) {
die("Not allowed! Bye bye!");
}
?>

      <div class="jumbotron">
      <div class="container">
        <center><h1>Admin Bereich</h1></center>
        
        <p><a class="btn btn-primary btn-lg" href="admin/register.php" role="button">Neue Mitarbeiter registrieren</a></p>
        <p><a class="btn btn-primary btn-lg" href="admin/settings.php" role="button">Einstellungen ändern</a></p>
        <p><a class="btn btn-primary btn-lg" href="client/neue-kunde.php" role="button">Kunden Verwaltung</a></p>
        <p><a class="btn btn-primary btn-lg" href="admin/ma-online.php" role="button">Mitarbeiters Online</a></p>
      </div>
    </div>

 <?php 
include("templates/footer.inc.php")
?>

Ik hoop dat ik het goed heb begrepen:eek::eek:
 
Nee het gaat niet goed regel 5...8 gaan allemaal de stres in.
 

Bijlagen

  • index-fout.png
    index-fout.png
    21,8 KB · Weergaven: 52
Omdat PHP die niet kan vinden in de map waar je index.php in staat, en omdat die niet bestaat.
Laat eens een schematisch overzicht zien van je bestandsstructuur. Zonder dat wordt het lastig om iets geheel zinnigs te zeggen.
 
Ik hoop dat je hier iets aan hebt probeerde een completen boom te maken maar dat wil niet in WIN7


admin/
index.php
admin.php
neukunde.php
settings.php
ma_online.php
register.php

client/
kundendaten.php

css/
spreekt voorzich

fonts/
spreekt voorzich

inc/
config.inc.php
functions.inc.php
password.inc.php

js/
spreekt voorzich

templates/
error.inc.php
footer.inc.php
header.inc.php

verder zie afbeelding
 

Bijlagen

  • mappenstructuur.png
    mappenstructuur.png
    6,1 KB · Weergaven: 30
Die includes staan een map hoger, dus moet je een / ervoor gebruiken. Dan zoekt hij ze in de hoogste map op waar hij kan komen: Je publieke directory.

Als je geen / voorafgaand gebruikt, dan zoekt hij ze op in de map waarin je momenteel werkt (/admin) en daar staan die bestanden niet in.
 
Laatst bewerkt:
Ontwikkelen op Windows \…\ en publiceren op Linux /…/
Je kan padnamen netjes houden door vooraf een variabele te maken die je overal gebruikt.
Code:
// absolute path (document_root) heeft in windows al een /
$abs_path = $_SERVER['DOCUMENT_ROOT'];
echo $abs_path . '/inc/admin.php';
//require($abs_path . '/inc/admin.php');

// relatief path tov huidige script, windows \ omzetten in /
$rel_path = str_replace('\\', '/', __DIR__);
echo $rel_path . '/inc/admin.php';
//require($rel_path . '/inc/admin.php');
Platform onafhankelijk :D
 
Hmm, doet de DIRECTORY_SEPARATOR als constante niet hetzelfde?
 
De constante DIRECTORY_SEPARATOR geeft de (back)slash van het platform waarop je werkt. Op windows krijg je een \ en op linux een /
Het is handig om altijd voor de / te kiezen, ook op windows. Daarmee voorkom je dingen als hieronder
Code:
$photos = __DIR__ . '/images/blog/thumb';
$array  = explode(DIRECTORY_SEPARATOR, $photos);
print_r($array);

// hieronder het resultaat op windows (heel anders dan op Linux)
Array (
  [0] => D:
  [1] => xampp
  [2] => htdocs
  [3] => images/blog/thumb
)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan