PHP nechce nastavit Globals

PHP nechce nastavit Globals
« kdy: 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

Kód: [Vybrat]
<?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?


Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:PHP nechce nastavit Globals
« Odpověď #1 kdy: 18. 10. 2019, 11:52:06 »
Proměnná $global neexistuje. Když ten chybující řádek vyhodíš, tak by měl problém pominout.

Re:PHP nechce nastavit Globals
« Odpověď #2 kdy: 18. 10. 2019, 13:22:30 »
No ale ona existuje.
v config.php mam
Kód: [Vybrat]
$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.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:PHP nechce nastavit Globals
« Odpověď #3 kdy: 18. 10. 2019, 13:26:42 »
No ale ona existuje.
v config.php mam
Kód: [Vybrat]
$global['siteName'] = 'XXX';
$global['siteURL'] = 'http://127.0.0.1/';

Ten config.php načítáš kde?

Re:PHP nechce nastavit Globals
« Odpověď #4 kdy: 18. 10. 2019, 13:37:49 »
tak si vypni vypisování notice, jako to máš na produkci :-)))


Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:PHP nechce nastavit Globals
« Odpověď #5 kdy: 18. 10. 2019, 14:01:06 »
tak si vypni vypisování notice, jako to máš na produkci :-)))

Jen to ne!

Re:PHP nechce nastavit Globals
« Odpověď #6 kdy: 18. 10. 2019, 14:25:38 »
humor, proto ten smajlík..
Pro mrzouty: Na produkci to nefunguje úplně stejně, jen se notice nevypisují

Re:PHP nechce nastavit Globals
« Odpověď #7 kdy: 18. 10. 2019, 14:54:28 »
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

Re:PHP nechce nastavit Globals
« Odpověď #8 kdy: 18. 10. 2019, 16:41:21 »
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:

Kód: [Vybrat]
<?php

$appConfig 
= [
    
'siteName' => 'Nazov stránky',
    
'siteURL' => 'http://127.0.0.1/'
];

a v starších verziách takto:

Kód: [Vybrat]
<?php

$appConfig 
= array(
    
'siteName' => 'Nazov stránky',
    
'siteURL' => 'http://127.0.0.1/'
);

takže nemusíš programovať štýlom [ctrl]+[c] a [ctrl]+[v]
« Poslední změna: 18. 10. 2019, 16:47:22 od fortran1986 »

Re:PHP nechce nastavit Globals
« Odpověď #9 kdy: 18. 10. 2019, 17:18:46 »
to je zvěrstvo.
Děkuji za možnost editace příspěvku.

ETNyx

Re:PHP nechce nastavit Globals
« Odpověď #10 kdy: 18. 10. 2019, 17:45:47 »
....
okrem toho PHP má na inicializáciu polí literál od verzie 7 sa to zapisuje takto:

Kód: [Vybrat]
<?php

$appConfig 
= [
    
'siteName' => 'Nazov stránky',
    
'siteURL' => 'http://127.0.0.1/'
];

a v starších verziách takto:

Kód: [Vybrat]
<?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

Re:PHP nechce nastavit Globals
« Odpověď #11 kdy: 18. 10. 2019, 19:56:08 »
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.

Kód: [Vybrat]
?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
Kód: [Vybrat]
Notice: Undefined variable: global ininit.php
Kód: [Vybrat]
<?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
Kód: [Vybrat]
folder connection
folder controllers
folder includes
folder public
file favicon
file index.php

Stale mam pocit ze som zabudol zapnut nieaky modul.
« Poslední změna: 18. 10. 2019, 19:59:24 od Wangarad »

Re:PHP nechce nastavit Globals
« Odpověď #12 kdy: 18. 10. 2019, 20:12:16 »
Teraz som zbadal ze uz index nabieha zle.
Kód: [Vybrat]
require_once(__DIR__ . '/includes/partials/head.php');
Kde
Kód: [Vybrat]
<!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.

Re:PHP nechce nastavit Globals
« Odpověď #13 kdy: 19. 10. 2019, 08:41:12 »
To by moh způsobit vypnutý mod_rewrite nebo chybějící .htaccess. Viděl jsi i skryté soubory, když jsi to stahoval?

Re:PHP nechce nastavit Globals
« Odpověď #14 kdy: 19. 10. 2019, 10:48:15 »
@Wangarad

Zkus načíst /connection/config.php v index.php ... Funguje?