Newsgroup: it.comp.www.php
Titolo: problema require_once

Ciao,
all'interno della mia pagina php richiamo uno script php esterno (ma
residente in un'altra directory dello stesso server) tramite la funzione
require_once.
require_once("path_del_file/nome_script.php");
Quando vado a richiamare la pagina dal browser però ottengo questo errore:
require_once("path_del_file/nome_script.php"): failed to open stream: No
such file or directory
Ma in realtà il file c'è, difatti se faccio un refresh lo carica!
Però se chiudo e riapro il browser, ecco che di nuovo ottengo l'errore
di cui sopra!
Perché al primo caricamento della pagina ho questo comportamento?
Testato localmente tutto fila liscio.
m.
-- 
"La legge, in Italia, è come l'onore delle puttane"
(Curzio Malaparte)

La path del file che vai a includere deriva (viene creata/elaborata) da una sessione/cookie?

 La path del file che vai a includere deriva (viene creata/elaborata) da una sessione/cookie?
Esatto, ed è la prima cosa che ho verificato anch'io: prima dell'include
faccio una echo della variabile $path_del_file (recuperata appunto dal
cookie) e mi viene restituita correttamente.
Ma visto che me lo hai chiesto esplicitamente immagino sia proprio lì
che devo indagare... giusto?


 che devo indagare... giusto?
No, te lo ho chiesto esplicitamente perchè l'unica cosa che può modificare il funzionamento di una pagina in quel modo è o un cookie o una sessine (a meno che tu non abbia l'hobby di farti del male con fantasiosi utilizzi di database).
Quindi ricapitolando, il tuo codice + o - è:
<?php
/* elaborazione cookie/sessione e popolamento $path_del_file */
echo $path_del_file; // E ti viene fuori giusta, anche al primo tentativo
require_once($path_del_file . '/nome_script.php');
Prova con:
<?php
/* elaborazione cookie/sessione e popolamento $path_del_file */
echo $path_del_file; // E ti viene fuori giusta, anche al primo tentativo
var_dump(realpath($path_del_file . '/nome_script.php'));
Ma sto andando a tentativi, effettivamente se l'echo ti stampa la path corretta, anche l'include dopo dovrebbe prenderla.

p.s: non è che per caso il file stesso lo crei durante lo script (magari dopo aver settato la sessione/cookie)?
errori di distrazione di questo tipo sono frequenti, e fanno perdere un sacco di tempo

 errori di distrazione di questo tipo sono frequenti, e fanno perdere un sacco di tempo
Non ho ben capito cosa intendi con questa domanda, però ho fatto altre
prove interessanti.
- Situazione iniziale:
pagina A che setta il cookie, redirect automatico a pagina B che
richiama il cookie ed include lo script esterno: "failed to open stream"
- Situazione attuale:
pagina A che setta il cookie, senza redirect ma con link cliccabile
dall'utente a pagina B: tutto ok
Però ribadisco che in entrambi i casi l'echo del cookie prima
dell'include mi restituisce il valore corretto.
Ora, la seconda situazione (che più che altro è un workaround) mi va
anche bene, però vorrei capire perché ho questo strano comportamento.


 richiama il cookie ed include lo script esterno: "failed to open stream"
il baco è il redirect che non va d'accordo con i cookie. Ti riporto
una spiegazione:
"Redirection—or any other non standard (200 OK) output page HTTP
result —does not allow additional HTTP headers to be added to the
request, which effectively means you cannot Redirect and send a cookie
on the same request. Instead you have to create an intermediate page
contains redirect link in a META tag, or a phyical HREF link the user
clicks on to go to the next page. HTML pages and browsers support the
META Refresh tag which makes this possible."
in pratica non puoi fare un redirect basato sugli header ma lasciare
che l'utente se lo faccia da solo o emularlo con un meccanismo client
side (tag META, javascript, ecc.)
bye!

 on the same request.
Questo non lo sapevo...
però se nella pagina B, subito dopo il get_cookie, faccio un echo della
variabile in questione, viene restituita correttamente, ma
misteriosamente ignorata dal successivo include.
...Problema che appunto sparisce se elimino il redirect da A a B.


 misteriosamente ignorata dal successivo include.
Sì, lo avevo notato, ma ti ho riportato comunque quel suggerimento
nella speranza potesse aiutarti ;^). Nel merito non so risponderti,
bisognerebbe debuggare il codice per capire il motivo di questo
funzionamento...
bye!