Foros del Web » Programando para Internet » PHP »

Problema al recoger las variables

Estas en el tema de Problema al recoger las variables en el foro de PHP en Foros del Web. Buenas, tengo una duda, ¿como deberia recoger correctamente las variables de otra pagina? Hace tiempo q tengo una pequeña utilidad en una web que me ...
  #1 (permalink)  
Antiguo 24/03/2006, 00:50
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
Problema al recoger las variables

Buenas,

tengo una duda, ¿como deberia recoger correctamente las variables de otra pagina?

Hace tiempo q tengo una pequeña utilidad en una web que me funciona muy bien, pero ahora en otra web quiero hacer lo mismo y me encuentro con que no funciona. Ya se que es pero me gustaria que me explicarais el porque o como solucionarlo

Bien la diferencia es que en la otra web las paginas estaban en la raiz y cargaba las variables asi
Código PHP:
<?php include ('variables/01.php'); ?>
Ahora en esta web tengo paginas dentro de carpetas con lo cual pense que lo logico seria llamarlas asi
Código PHP:
<?php include ('http://www.web.com/variables/01.php'); ?>
¿Porque asi no funciona?
¿No deberia funcionar igual que con las hojas de estilo, con ellas pongo la url entera y no hay problema, porq en este caso si?
Tampoco se si deben estar en una pagina .php o deberia ser otra extension

Las recojo con include porq no se exactamente cual es lamanera correcta y como me funcionaba no me he preocupado mas del tema


Decir que lo pongo antes del head no se si sea el lugar mas correcto, aunq diria q si estan antes de la llamada ya estaria bien ¿no?
<?php include ('http://www.web.com/variables/01.php'); ?></head>

Saludos y gracias por la ayuda

Última edición por xevisoyyo; 24/03/2006 a las 12:04
  #2 (permalink)  
Antiguo 24/03/2006, 07:12
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
Nadie sabe porq pasa esto? o como lo he de hacer, si es que es algo que me va bien pero no se porq al poner la ruta completa no funciona
  #3 (permalink)  
Antiguo 24/03/2006, 08:59
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
Por favor si alguien me puede echar un cable, veo q bastante gente lo ha leido ya y no se si es q no me explico

Me va todo perfectamente mi problema es que si quiero cargar esas variables en una pagina q este dentro de alguna carpeta no funciona

en resumen seria esto

funciona: <?php include ('variables/01.php'); ?>

no funciona: <?php include ('http://www.web.com/variables/01.php'); ?>

si me podeis echar un cable, gracias
  #4 (permalink)  
Antiguo 24/03/2006, 11:53
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
De 40 personas nadie sabe como hacer o que podria ser?

Alguna idea?
  #5 (permalink)  
Antiguo 24/03/2006, 12:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
Iniciado por xevisoyyo
De 40 personas nadie sabe como hacer o que podria ser?

Alguna idea?
Deberías en lugar de hacer tus própias interpretaciones sobre como debería funcionar algo .. recurrir a la documentación oficial de PHP. Por experiencia te puedo comentar que sacando mis conjeturas de como funcionará tal o cual cosa .. al final lo único que he conseguido es perder tiempo e irme por las ramas, lo mejor es acudir a la documentación oficial, por ahí suelen aparecer referencias (de los comentarios de los usaurios) hacia otros temas relacionados como este que te trae de cabeza que es un problema de conceptos sobre como funciona una llamada a un URL y como se trata este por un servidor HTTP. (en conjunto con el protocolo HTTP en cierta manera)

www.php.net/include

Cuando llamas a un script por una ruta absoluta, PHP toma el código de ese archivo (tu ".php" o lo que sea) .. lo incrustra desde el punto que tengas tu "include()" y pega a continuación el resto del código original . TODO ello como una entidad (como si tu hubieras "cortado y pegado" a mano ese código) se ejecuta, insisto como uno sólo.

Cuando tu llamas a un código por HTTP:// o en general por un "wrapper" .. lo que haces es pasar la ejecución de ese script por tu servidor HTTP (o el servidor que lo gestione), este lo ejecuta y el resultado cara a PHP es la "salida" que este origine .. NO el código PHP que tuviera que ejecutar junto con el del scritp "padre" que lo llama.

Los comentarios que haces sobre "lo pongo en el head" .. realmente no sé que hace tu código: genera HTML? .. genera javascript? .. No sé lo que hace .. pero creo que tienes una confusión grande sobre como funciona PHP y como debes orientar el desarrollo en PHP, no a un uso de "PHP por medio de HTML" sino a pensar que PHP -preprocesa- o genera tu página de salida (sea con HTML, con Javacript o lo que sea) he de hay muchos cuestionamientos que te haces y conjeturas que sacas (algunas no correctas).

Creo que con esto ya queda resuelta tu pregunta: NO puedes pretender acceder a una variable $php .. o a código (funciones .. etc) si incrustras tu código por una llamada en un include() o similar por un "wrapper" tipo http:// o similar .. -Sólo- bajo una ruta -absuluta- tu código será interpretado donde lo llames y tomado como un "cortar y pegar" que es en el fondo lo que hace un "include()" o similar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 24/03/2006, 13:14
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
Graacias por tu respuesta pero ya esto me lia un poco, no pretendo ser un experto ni hacer grandes cosas, pero se me ocurrio hacer algo asi y a mi me ha sido util, y no acabo de entender porq al poner la ruta entera no se puede, pero me mirare el enlace y otras cosas a ver,

Cita:
Cuando llamas a un script por una ruta absoluta, PHP toma el código de ese archivo (tu ".php" o lo que sea) .. lo incrustra desde el punto que tengas tu "include()" y pega a continuación el resto del código original . TODO ello como una entidad (como si tu hubieras "cortado y pegado" a mano ese código) se ejecuta, insisto como uno sólo.
si es como si estuviera ahi porq cuando es ruta completa ¿no?
es q no acabo de entender porq cualquier include con la ruta exacta vabien y este en concreto es como si no estuviera

enlaces.php (la primera la dejo en blanco por comodidad)
Código PHP:
<?php
$web
[]='';
$web[]='<div class="link"><a href="http://www.web1.com" target="_blank">Web 1</a></div>';
$web[]='<div class="link"><a href="http://www.web2.com" target="_blank">Web 2</a></div>';
$web[]='<div class="link"><a href="http://www.web3.com" target="_blank">Web 3</a></div>'?>
en teoria si en otra pagina hago un include es como si pusiera ese codigo
entonces
Código PHP:
<?php include ('enlaces.php'); ?>
y luego dodne quiera de la pagina tantas veces como quiera y el numero que quiera de ahi la idea, sino haria un include con 5 enlaces y ya, pero segun la pagina me interesa q hayan 5, 4 , 3, o 20, de ahi cargarlos dtodos y mostrar los q me interesan segun la pagina o el lugar, lo hago asi:

Código PHP:
<?php  for($i=1;$i<=16;$i++) echo $web[$i]; ?>
q quiero solo 5 pues
Código PHP:
<?php  for($i=1;$i<=5;$i++) echo $web[$i]; ?>
q quiero los 4 ultimos pues
Código PHP:
<?php  for($i=12;$i<=16;$i++) echo $web[$i]; ?>
Saludos y gracias

Última edición por xevisoyyo; 24/03/2006 a las 13:43
  #7 (permalink)  
Antiguo 24/03/2006, 13:50
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
a ver si me entero, he de entender que al llamar al include y ser de una pagina externa este no me muestra las variables sino el resultado de ellas y por eso al llamarlas no existen las variables isno su resultado ¿no? porq php es de lado servidor y a mi me llegaria el resultado

y porq cuando no es la ruta entera si me llegan las variables?

bueno si es es q es eso



bueno la solucoin la tengo, crear dos enlaces.php uno en la raiz del sitio y otro igual en la carpeta que me interesa, tmp seria mucho trabajo, guardar dos veces y subir dos veces


se podrian cargar las variables sin que sea a traves del navegador? tipo como lo hice con un include

Última edición por xevisoyyo; 24/03/2006 a las 13:55
  #8 (permalink)  
Antiguo 24/03/2006, 14:35
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
Bueno pues ya lo he solucionado a mi manera, en la otra web me ha ido bien durante mucho tiempo asi q a prueba de errores, lo unico q he hecho ha sido cambiar la pagina enlaces.php y ponerla dentro de la carpeta asi no he de colocar toda la ruta, y no he de ponerla dos veces ya que las paginas q estan fuera de la carpeta estan en la raiz, asi q tmp necesitan la ruta completa

igual agradecere comentarios, sobretodo de Cluster a ver si me entendio y seguro se le ocurre algo u opina, saludos

va de coña


por cierto el codigo final es algo tan simple como esto

paginas q estan dentro de la carpeta
Código PHP:
<?php include ('carpeta02/enlaces.php'); for($i=1;$i<=5;$i++) echo $web[$i]; ?>
paginas q estan en la raiz edel sitio
Código PHP:
<?php include ('carpeta01/carpeta02/enlaces.php'); for($i=1;$i<=5;$i++) echo $web[$i]; ?>
  #9 (permalink)  
Antiguo 24/03/2006, 14:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Mira .. no se trata de ser un "experto" .. esto con el tiempo ya te darás cuenta de como funciona PHP .. eso sí, en algún momento como este -es necesario- que sepas esa "teoría" para comprender por qué te funciona de una forma y por qué de otra no te funciona. Esto es lo mínimo de "teoría" que intento "traspasarte" para que lo entiendas. Por que las cosas no funciona de una manera o de otra por qué sí .. suelen tener "explicación".

No se trata de sitio externo a llamar (http:// ...) o interno pero con llamada por http:// .. sino que al hacer eso obtienes sólo lo que la interpretación de ese script PHP , de esa página como sea resulte .. LO MISMO que si tu llamas por el URL a tu código (a ese script) y vas a ver el "código fuente" de la página en tu navegador . .eso es lo que al hacer un include() por http:// es lo que vas a obtener NADA MAS!.

Imagina que pudiera hacer eso sin más .. NO ESTARIA A SALVO ningun script del lado del servidor en ningún servidor .. simplemente por el URL lo llamaría y me podría "traer" su código!!!!.


Cita:
se podrian cargar las variables sin que sea a traves del navegador? tipo como lo hice con un include
Si, .. insisto que así tendrías que llamar a tu archivo por su ruta absoluta que tenga en el servidor.

Si en tu servidor tienes el archivo FISICAMENTE en:
c:\nose\blabla\sitio.tal\archivos\nose.php

así será la ruta ..

Lo mismo si es un sistema LInux .. será algo tipo:
/var/nose/sitio.tal/public_html/archivos/nose.php

o como corresponda.

La ruta -absoluta- en ese servidor de tu servidor "virtual" la puedes obener con:

$_SERVER['DOCUMENT_ROOT'] .. por lo menos eso te dará la ruta desde el raiz de tu -servidor- (sistema de archivos) hasta el "ducument root" de tu sitio (justo donde "caes" en un servidor si entras por FTP por ejemplo a ver tus archivos al servidor .. o donde configurastes tu servidor HTTP para publicar tus páginas ..).

Cita:
bueno la solucoin la tengo, crear dos enlaces.php uno en la raiz del sitio y otro igual en la carpeta que me interesa, tmp seria mucho trabajo, guardar dos veces y subir dos veces
No, esa no es la solución .. debes usar rutas absolutas Y LISTO! .. siempre y cuando el archivo que quieres incluir esté en el mismo servidor y no en otro.

Lo único que te puede complicar como a todo el mundo es estar andando poniendo rutas relativas si llamas a ese código desde varios puntos de tu estructura de archivos, para eso ya te indiqué que debes usar la ruta absoluta completa al archivo en ese servidor .. y para "colmo" tienes una variable que te dá dicho dato por si algún dias decides cambiar tu aplicación de servidor: no tendrías que ajustar -nada- ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 24/03/2006, 14:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Suponiendo:

/ raiz de tu sitio (que NO ES IGUAL a la ruta absoluta de ese archivo en ese servidor, según su extructura de archivos a tu "raiz de tu sitio" (técnicamente: "document root")
enlaces.php

cualquier_script.php
Código PHP:
<?
include ($_SERVER['DOCUMENT_ROOT']."/enlaces.php");
?>
así de simple para toda llamada desde donde quieras .. cualquier directorio y rama donde esté ...

De hecho . .mira que te devuelve:

Código PHP:
<?
echo $_SERVER['DOCUMENT_ROOT'];
y observa.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 24/03/2006, 14:50
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
Cita:
No se trata de sitio externo a llamar (http:// ...) o interno pero con llamada por http:// .. sino que al hacer eso obtienes sólo lo que la interpretación de ese script PHP , de esa página como sea resulte .. LO MISMO que si tu llamas por el URL a tu código (a ese script) y vas a ver el "código fuente" de la página en tu navegador . .eso es lo que al hacer un include() por http:// es lo que vas a obtener NADA MAS!.
Si de acuerdo eso lo entendi de hecho lo sabia pero no me explico muy bien, melio con tanta palabra, asi si te he entendido bien poniendo la ruta absoluta tal cual pongo en mi ftp deberia ir bien

aunq ya me funciona y no creo q tenga q llamar a las variables desde ningun otro lado, pero nunca se sabe, asi q voy a ver lo que me dices

muchas gracias
  #12 (permalink)  
Antiguo 24/03/2006, 15:05
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
Muchas gracias Cluster

he probado y va perfecto, aunq ya me iba bien, pero tienes razon la idea es usar rutas absolutas

muchas gracias pues


y gracias por tu paciencia




FIN
  #13 (permalink)  
Antiguo 24/03/2006, 15:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
Si de acuerdo eso lo entendi de hecho lo sabia pero no me explico muy bien, melio con tanta palabra, asi si te he entendido bien poniendo la ruta absoluta tal cual pongo en mi ftp deberia ir bien
Creo que aquí te volvistes a confundir con la explicación (seguro que ya lo tienes claro .. no obstante lo recalco por si a caso).

Recuerda que al "entrar por FTP" tu a un servidor cualquiera .. se te presenta un "raiz" tuyo .. pero Físicamente en el servidor .. tus archivos o por el directorio desde donde tu puedes moverte -hacia abajo- en la estructura de directorios de ese servidor .. seguro que NO estás en el "raiz" de ese servidor sino en un directorio X que NO será el "raiz" físico de ese servidor (hablemos de estructura de directorios o sistema de archivos .. ).

Por eso la función "$_SERVER['DOCUMENT_ROOT']" te dá ese dato que aparentemente tu en condiciones normales no "sabias" ni que físicamente estas en un directorio de un sistema de archivos más grande o ramificado.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 24/03/2006, 15:24
Avatar de xevisoyyo  
Fecha de Ingreso: mayo-2005
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 1
Si te entiendo, mi web no esta en la raiz de mi servidor sino en un directorio al cual yo llamaba raiz

la ruta la conocia pero como dices es mejor poner la funcion "$_SERVER['DOCUMENT_ROOT']" por si hay un cambio de servidor

gracias por tus aclaraciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:01.