Newsgroup: it.comp.www.php
Titolo: restituzione valore da include

salve,
ho un programma pr1.php così:
<?php
$xy=include("pr2.php");
echo "il valore di ss è:".$xy;
?>
e pr2.php è così:
<?php
$ss=5;
return $ss;
?>
in questa configurazione i due programmi, sullo stesso host, funzionano
e l'output è 5.
Se trasferisco solo il pr2.php su un altro dominio le cose non
funzionano più...
Il pr1.php diviene così:
<?php
$xy=include("
http://www.altrodominio.ext/pr2.php
");
echo "il valore di ss è:".$xy;
?>
il pr2.php rimane identico, semplicemente lo metto sul dominio
www.dominio.ext.
L'output stavolta è 1 (perchè comunque l'inclusione è avvenuta).
In sostanza il return mi funziona solo per include fatti nell'ambito
dello stesso dominio, non per le inclusioni remote.
Sapete dove sto sbagliando?
grazie, andrea

 Sapete dove sto sbagliando?
da nessuna parte. ti bastava leggere la documentazione per sapere che:
"È possibile eseguire un'istruzione return()  in un file incluso per
terminare l'esecuzione di quel file e restituirlo allo script che l'ha
chiamato. È anche possibile restituire valori dai file inclusi. Potete
prendere il valore di una chiamata di inclusione come fareste con una
normale funzione. Tuttavia questo non è possibile quando si include
file remoti, a meno che l'output del file remoto non contenga tag di
inizio e fine codice validi in PHP (come i file locali). Si possono
dichiarare variabili all'interno di questi tag e queste saranno
inserite nel punto in cui il file è stato incluso."

Non ne sono sicuro ma prova per prima cosa a togliere:
return $ss;
inoltre quando includi la paginascrivi solo:
include("pr2.php");
e l'echo fallo cosi:
echo "il valore di ss č:".$ss;
Saluti
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 $xy=include("
http://www.altrodominio.ext/pr2.php
");
If "URL fopen wrappers" are enabled in PHP (which they are in the 
default configuration), you can specify the file to be included using a 
URL (via HTTP or other supported wrapper - see Appendix M for a list of 
protocols) instead of a local pathname. If the target server interprets 
the target file as PHP code, variables may be passed to the included 
file using a URL request string as used with HTTP GET. This is not 
strictly speaking the same thing as including the file and having it 
inherit the parent file's variable scope; the script is actually being 
run on the remote server and the result is then being included into the 
local script.
Warning
Windows versions of PHP prior to PHP 4.3.0 do not support accessing 
remote files via this function, even if allow_url_fopen is enabled.
	Francesco

Avevo letto questa parte di cocumentazione, solo che non capisco
questo:
...a meno che l'output del file remoto non contenga tag di  inizio e
fine codice validi in PHP...
Potresti farmi un esempio?
grazie
T_PAAMAYIM_NEKUDOTAYM ha scritto:


 > Il pr1.php diviene così:


 Se hai qualche idea postamela, grazie
La mia nota non era indirizzata a risolvere il tuo problema, solo a far 
notare che non sempre č possibile includere file remoti.
	Francesco

 
Mai fidarsi delle traduzioni! La versione in en è più chiara:
When a file is included, parsing drops out of PHP mode and into HTML 
mode at the beginning of the target file, and resumes again at the end. 
For this reason, any code inside the target file which should be 
executed as PHP code must be enclosed within valid PHP start and end tags.
Ovvero il codice php da eseguite *deve* essere racchiuso tra i tag del php.
	Francesco

Francesco F ha scritto:

cosa c'entra?
il problema e' un altro:
un file incluso da filesystem non viene parsato prima di essere
incluso, un file incluso tramite url viene prima parsato dal server su
cui risiede e poi dall'include locale. quindi i due file, pur essendo
idenitici nel sorgente, non "inviano" all'include lo stesso output da
parsare.
questo sorgente, se parsato dal server remoto prima di essere incluso
non da' nessun output:
<?php
$ss=5;
return $ss;
?>
per cui all'include arriva da parsare una stringa vuota, non il
sorgente che andrea si aspetterebbe (e in questo caso il valore
restituito e' 1 ad indicare l'assenza di un return e il successo
dell'inclusione).
per avere lo stesso risultato con un file incluso da remoto, il file
stesso parsato dal server remoto dovrebbe dare come output del codice
php che l'include in locale parserebbe a sua volta. non e' quindi
possibile usare lo stesso file in un include spostandolo da filesystem
a remoto (a meno che il file non venga parsato dal server remoto).
l'equivalente del codice precedente per il funzionamento in inclusione
da server remoto e' il seguente:
<?php
echo '<?php $ss = 5; return $ss;?>'
?>
si puo' nel caso usare un ulteriore script di intermediazione che
prenda il sorgente dello script da includere da mandare in output (di
modo da non dover cambiare il file che si vuole includere), ovviamente
accedere a questo script intermedio permette di vedere i sorgenti di
qualsiasi file senza prendere le giuste contromisure di sicurezza

Ottimo, hai centrato in pieno il problema e l'hai risolto!
Ti ringrazio
Andrea
T_PAAMAYIM_NEKUDOTAYM ha scritto:
