[GDRCD5.1] Incompressibile errore require
[GDRCD5.1] Incompressibile errore require postato il 13/03/2014 21:37:17 nel forum programmazione, open source e hosting
Salve a tutti!
Per il mio gdr mi appoggio ad GDRCD 5.1, pesantemente modificato da me per rispondere alle esigenze della land. Ora, come ogni volta che un po' di tempo libero, mi diverto ad aprire l'errors_log del mio sito e correggere tutti i piccoli bug, sia nativi di GDRCD 5.1 che magari aggiunti dal mio lavoro (Succede). Ora mi sono trovato a scontrarmi con un bug che presumo sia nativo, ovvero, un errore generato da require in testa al file ref_header.inc.php, la porzione di codice interessata è la seguente:
require 'includes/constant_values.inc.php';
require 'config.inc.php';
require 'vocabulary/'.$PARAMETERS['languages']['set'].'.vocabulary.php';
require 'includes/functions.inc.php';
Questo file si trova nella root principale del gioco. Quando viene richiamato da un file contenuto in main_root/pages/ il sito funziona PERFETTAMENTE senza dare errori, ma nell'errors_logs scopro che ha fallito l'inclusione (o la requisizione :P) dei file contenuti nella cartella main_root/includes/, restituendo il seguente errore:
[Thu Mar 13 21:26:57 2014] [error] [client 151.52.242.4] File does not exist: /var/www/vhosts/morgensterngdr.net/httpdocs/pages/includes, referer: http://www.morgensterngdr.net/pages/messaggi.inc.php?ref=30
[Thu Mar 13 21:26:57 2014] [error] [client 151.52.242.4] File does not exist: /var/www/vhosts/morgensterngdr.net/httpdocs/pages/includes, referer: http://www.morgensterngdr.net/pages/spot.inc.php?ref=300
[Thu Mar 13 21:26:57 2014] [error] [client 151.52.242.4] File does not exist: /var/www/vhosts/morgensterngdr.net/httpdocs/pages/includes, referer: http://www.morgensterngdr.net/pages/spot.inc.php?ref=300
[Thu Mar 13 21:26:57 2014] [error] [client 151.52.242.4] File does not exist: /var/www/vhosts/morgensterngdr.net/httpdocs/pages/includes, referer: http://www.morgensterngdr.net/pages/presenti.inc.php?ref=60
In tutti i "iframe" in cui richiamo tale file. È come se cercasse di richiamare il file dalla cartella main_root/pages/includes/ (che non esiste), invece che richiamarlo, come dovrebbe, da main_root/includes/.
Ho provato una soluzione un po' stupida che non ha dato risultati, ovvero, modificare il codice incriminato, di ref_header.inc.php, come segue:
define('PATH', __DIR__);
//Includio i parametri, la configurazione, la lingua e le funzioni
require PATH.'/includes/constant_values.inc.php';
require PATH.'/config.inc.php';
require PATH.'/vocabulary/'.$PARAMETERS['languages']['set'].'.vocabulary.php';
require PATH.'/includes/functions.inc.php';
Ma non ho ottenuto risultati.
Qualcuno ha qualche consiglio? La cosa assurda, è che funziona tutto ed anche attivando il "print" a schermo degli errori, tale errore non viene visualizzato ed è recuperabile solo dall'errors_logs.
Mi rimetto al vostro aiuto!
Grazie dell'attenzione.
Pagine → 1 2
13/03/2014 22:00:02
Solitamente quei file vengono richiamati dall'header.php o dal ref_header.php che sono appunto nella root e non sotto pages.
Credo che tu abbia aggiunto quei requires sotto una delle pagine php in pages. E infatti provano a richiamare il contenuto di una cartella /pages/includes che non esiste.
13/03/2014 22:05:34 e modificato da overlord il 13/03/2014 22:19:15
No no, nelle pagine contenute in pages faccio un require di ref_header.inc.php. Non faccio nessun require direttamente dalla pages, se non quello, appunto, a ref_header.inc.php o header.inc.php .
Tanto per farvi capire, questi sono gli unici include/require che faccio nelle pagine "incriminate":
<?php include('../ref_header.inc.php'); /*Header comune*/ ?>
<?php include('../footer.inc.php'); /*Footer comune*/?>
Fine, come vedi, non richiamo le pagine contenute in main_root/includes/ direttamente da quelle contenute in main_root/pages/.
13/03/2014 23:30:31
ho controllato per curiosità anche io nel mio error.log del webserver in locale trovo anche io un errore simile:
[Fri Jul 12 23:25:21 2013] [error] [client 127.0.0.1] File does not exist: P:/siti/gdrcd5.2/pages/includes, referer: http://localhost/siti/gdrcd5.2/pages/messaggi.inc.php?ref=30
Non vorrei dire la cavolata delle 23 ma:
<?php include('../ref_header.inc.php'); /*Header comune*/ ?>
<?php include('../footer.inc.php'); /*Footer comune*/?>
nel path dell'include metti un ../ perchè suppongo che tu abbia le pagine in cui metti in quell'include non nella root ma tipo nella directory pages.
Ora se non ricordo male nel momento in cui tu fai quell'include anche il ref_header vengono considerati come se si trovassero non nella root ma nella directory pages. infatti l'errore che ti da è:
[Thu Mar 13 21:26:57 2014] [error] [client 151.52.242.4] File does not exist: /var/www/vhosts/morgensterngdr.net/httpdocs/pages/includes
dicendoti che non trova la directory includes come sottodirectory della pages.
Il tutto dovrebbe essere derivato da questo:
Files are included based on the file path given or, if none is given, the include_path specified. If the file isn't found in the include_path, include will finally check in the calling script's own directory and the current working directory before failing. The include construct will emit a warning if it cannot find a file; this is different behavior from require, which will emit a fatal error.
fonte: http://www.php.net/manual/en/function.include.php
e che quindi la pagina dove ci sono i 4 require, prima cerchi i 4 file nella cartella pages/includes non li trovi, generi l'errore in error.log per avvisare che non li trova, passi a cervarli automaticamente nella includes della root e trovandoli li faccia funzionare la pagina.
Se ho sparato qualche cavolata qualcuno mi corregga.
14/03/2014 17:52:46
dyrr ha scritto:
Ora se non ricordo male nel momento in cui tu fai quell'include anche il ref_header vengono considerati come se si trovassero non nella root ma nella directory pages. infatti l'errore che ti da è:
Credo che si tratti proprio di questo tipo di errore.
La soluzione che avrei applicato io è esattamente quella provata da overlord (cioè usare le costanti __DIR__ e __FILE__ che sono sempre relative al file corrente nonostante le inclusioni) per trasformare i percorsi dei require() in percorsi assoluti (così che non ci siano più dubbi su che file debbano essere inclusi.
Sicuro che non abbia funzionato? Dovrebbe...
14/03/2014 18:33:24
dyrr ha scritto: fonte: http://www.php.net/manual/en/function.include.php
e che quindi la pagina dove ci sono i 4 require, prima cerchi i 4 file nella cartella pages/includes non li trovi, generi l'errore in error.log per avvisare che non li trova, passi a cervarli automaticamente nella includes della root e trovandoli li faccia funzionare la pagina.
Ti ringrazio di aver risolto il mio amletico dubbio, almeno ora so il perché.
Per quanto detto da Leo, sì sì, sicurissimo, ho provato ed ho guardato l'errors_logs con questa faccia qui 😏 trovando ancora quell'errore.
14/03/2014 19:59:55
Prova a farti stampare a video il percorso finale del file, una volta che gli hai concatenato PATH, così vediamo
14/03/2014 20:09:08
se il server lo supporta hai gia provato ad eventualmenteper quei 4 include ad usare un percorso assoluto sfruttando $_SERVER['DOCUMENT_ROOT'] a cui poi agganciare il path?
del tipo:
include($_SERVER['DOCUMENT_ROOT']."/includes");
14/03/2014 21:11:25
Ammetto di non sapere se supporta quella funziona, se lo fa, provo appena ho 10 minuti.
Per quanto riguarda la proposta di Leo, idem come sopra, appena ho 10 minuti liberi provo e vi faccio sapere.
03/05/2014 14:50:34
Arrivo tardi, lo so, ma vedendo che questo errore è nativo del gdrcd ho pensato di cercare nel forum se qualcuno ha cercato di sistemarlo e proporre la mia soluzione per i posteri.
Innanzitutto l'errore non è generato dal ref_header ma dal footer.
Il footer viene incluso sia in main.php che in pages/messaggi.inc.php e pages/presenti.inc.php, che sono pagine che si aprono in un iframe.
Leggo che è stata proposta la soluzione di inserire il riferimento assoluto.
Io ho optato per creare un nuovo footer, identico a quello vecchio, ma con i riferimenti corretti ai file js, che poi includo in messaggi.inc.php e in presenti.inc.php.
03/05/2014 17:15:15
Innanzitutto l'errore non è generato dal ref_header ma dal footer.
Il footer viene incluso sia in main.php che in pages/messaggi.inc.php e pages/presenti.inc.php, che sono pagine che si aprono in un iframe.
il footer dentro le pagine pages/messaggi.inc.php e pages/presenti.inc.php viene richiamato correttamente ovvero:
<?php include('../footer.inc.php'); /*Footer comune*/?>
che in pratica dice all'include di salire di un livello rispetto alla directory attuale ovvero dalla /pages alla root e di includer eil foote rincluso nella root.
Il footer non contiene altre include o require, quindi non può generare queell'errore che invece è generato quando il ref header, considerato dentro /pages quando viene incluso cerca di fare:
require 'includes/constant_values.inc.php';
require 'config.inc.php';
require 'vocabulary/'.$PARAMETERS['languages']['set'].'.vocabulary.php';
require 'includes/functions.inc.php';
php come detto prima non trovando quei file richiesti li cerca nella root.
Per il problema dei file js che anche quelli vengono cercati nella sottodirectory di pages, basta modificare da cosi:
<script type="text/javascript" src="includes/popupchoise.js"></script>
a
<script type="text/javascript" src="/includes/popupchoise.js"></script>
per tutti i js, in questo modo i js funzioneranno indipendentemente dalla posizione della pagina che li richiama del sito senza fare due footer.
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
World of the Sea Battle ↗
RAID Shadow Legends ↗
Crossout ↗
Raja Dunia ↗
AlterEgo ↗
Seconda Era ↗
Fallen Gods ↗
Enlisted ↗
Tibia ↗
The Coven ↗
Cafuné ↗