Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Wangarad 18. 10. 2019, 10:00:45
-
Zdravim.
Snazim sa na local hoste nahodit jeden php script. Pouzivam Vertrigo ako wamp. Bohuzial som sa trosku zasekol.
Takto vyzera index
<?php
require_once(__DIR__ . '/connection/init.php');
if(!isset($_SESSION['login']['id'])) {
if($pageFromUrl != 'login') {
header('Location: /login');
exit();
}
}
$_SESSION['login'] = (!isset($_SESSION['login']) ? array() : $_SESSION['login']);
if($pageFromUrl == 'logoff') {
session_destroy();
@session_start();
header("Location: /login");
exit();
}
if($pageFromUrl == 'login') {
include(__DIR__ . '/includes/pages/login.php');
exit();
}
Viem ze connection init zbehne.
hodi ma to sem
http://127.0.0.1/login aj ked som sa nikdy neprihlasil ale ok.
A ked dam http://127.0.0.1/includes/pages/login.php
Notice: Undefined variable: global in C:\Program Files\VertrigoServ\www\includes\pages\login.php on line 10
Na riadku 10 je <?= $global['siteName'] ?>
Vedel by niekto poradit co som teoreticky zabudol nastavit v php?
-
Proměnná $global neexistuje. Když ten chybující řádek vyhodíš, tak by měl problém pominout.
-
No ale ona existuje.
v config.php mam$global['siteName'] = 'XXX';
$global['siteURL'] = 'http://127.0.0.1/';
Na tej stranke dalej je to pouzite. Viem ze to na produkcnom servery funguje takze je to nieake to nastavenie len netusim ktore. Pristup k tomu budem mat az v Pondelok ale chcel som si to na localhoste riesit cez vikend.
-
No ale ona existuje.
v config.php mam$global['siteName'] = 'XXX';
$global['siteURL'] = 'http://127.0.0.1/';
Ten config.php načítáš kde?
-
tak si vypni vypisování notice, jako to máš na produkci :-)))
-
tak si vypni vypisování notice, jako to máš na produkci :-)))
Jen to ne!
-
humor, proto ten smajlík..
Pro mrzouty: Na produkci to nefunguje úplně stejně, jen se notice nevypisují
-
Duvod je IMHO jednoduchy. Cely ten system funguje tak, ze se snazi vkladat stranky do sebe. Cili nacte konfiguraci a pak vlozi PHP skript. Nicmene, pokud se ty na ten PHP skript odkazes rovnou, neprobehne to vkladani.
Takze teoreticky by ti melo stacit si v te strance vlozeni kodu z toho config.php souboru. Nicmene se mi to zda nekoncepcni.
Pro lepsi ladeni by pomohlo, pokud by jsi postnul treba alespon adresarovou strukturu, index.php a ten vkladany login.php, ci jak se to jmenuje
-
Takýchto problémov by si sa zbavil, keby si začal používať objekty (napr objekt Config ktorý by si pýtal objekt Store atď) a potom všetky nahádzať do IoC kontainera.
Objekty by si svoje závislosti pýtali cez konštruktor. A na závislosti, ktoré môžu byť spoločné pre vačšinu objektov by som použil nejakú mágiu napr. AOP.
Inak treba používať názvy identifikátorov z ktorých vieš o čo ide takže namiesto $globals by bolo lepšie použiť trebárs $appConfig okrem toho PHP má na inicializáciu polí literál od verzie 7 sa to zapisuje takto:
<?php
$appConfig = [
'siteName' => 'Nazov stránky',
'siteURL' => 'http://127.0.0.1/'
];
a v starších verziách takto:
<?php
$appConfig = array(
'siteName' => 'Nazov stránky',
'siteURL' => 'http://127.0.0.1/'
);
takže nemusíš programovať štýlom [ctrl]+[c] a [ctrl]+[v]
-
to je zvěrstvo.
-
....
okrem toho PHP má na inicializáciu polí literál od verzie 7 sa to zapisuje takto:
<?php
$appConfig = [
'siteName' => 'Nazov stránky',
'siteURL' => 'http://127.0.0.1/'
];
a v starších verziách takto:
<?php
$appConfig = array(
'siteName' => 'Nazov stránky',
'siteURL' => 'http://127.0.0.1/'
);
Tohle rozhodně není důvod jít všechna pole přepisovat do "short syntax", "starší" zápis není deprecated a spíše záleží na preferenci člověka, případě pokud pracuje v týmu tak na případném dohodnutém standardu, kde třeba může být vyžadována "starší" syntaxe + short syntaxe se dala používat už někde od verze 5.x,...
K tomu identifikátoru bych ještě dodal že, toto jméno také nění vhodné díky jisté podobnosti s rezervovaným jménem GLOBALS
-
Takze historia je asi taka ze som to zdedil po niekom. Moja uloha je pomenit niektore flowy a chcel som si to spravit doma.
Celkovo je to pisane akoby to pisalo 5 ludi a kazdy inu cast a inak ale to je o inom.
Zacina to na indexe.
?php
require_once(__DIR__ . '/connection/init.php');
if(!isset($_SESSION['login']['id'])) {
if($pageFromUrl != 'login') {
header('Location: /login');
exit();
}
}
$_SESSION['login'] = (!isset($_SESSION['login']) ? array() : $_SESSION['login']);
if($pageFromUrl == 'logoff') {
session_destroy();
@session_start();
header("Location: /login");
exit();
}
if($pageFromUrl == 'login') {
include(__DIR__ . '/includes/pages/login.php');
exit();
}
require_once(__DIR__ . '/includes/partials/head.php');
if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/controllers/' . $pageFromUrl . '.php')) {
include('controllers/' . $pageFromUrl . '.php');
}
?>
A tu to aj presmeruje a potom skape. Resp. presmetuje na 127.0.0.1/login co neexistuje a ked dam natvrdo tu adresu includes/pages/login.php dostanem Notice: Undefined variable: global in
init.php
<?php
if(!isset($_SESSION)) @session_start();
setlocale(LC_ALL, 'en_EN');
header('Content-Type: text/html; charset=UTF-8');
require(__DIR__ . '/config.php');
require(__DIR__ . '/Database.php');
require(__DIR__ . '/CustomException.php');
try {
$dbh = new PDO('mysql:host=' . $global['db_host'] . ';dbname=' . $global['db_db'], $global['db_user'], $global['db_pass'], array(PDO::ATTR_PERSISTENT => false));
$db = new Database($dbh);
} catch (PDOException $e) {
die('Unable to connect to the database at the given moment. Please try again later or contact a system administrator.');
//die('Connection failed: ' . $e->getMessage());
}
function d($var, $exit = true) {
echo '<pre>';
var_dump($var);
echo '</pre>';
if ($exit === true) {
exit();
}
}
to zbehne tiez lebo DB pripoji.
Strukturalne to vyzera takto
folder connection
folder controllers
folder includes
folder public
file favicon
file index.php
Stale mam pocit ze som zabudol zapnut nieaky modul.
-
Teraz som zbadal ze uz index nabieha zle.
require_once(__DIR__ . '/includes/partials/head.php');
Kde
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title><?= $global['siteName'] ?></title>
<link rel="shortcut icon" href="/favicon.ico" />
takze to bude definitivne nieco co som zabudol zapnut.
-
To by moh způsobit vypnutý mod_rewrite nebo chybějící .htaccess. Viděl jsi i skryté soubory, když jsi to stahoval?
-
@Wangarad
Zkus načíst /connection/config.php v index.php ... Funguje?