resolución de nombres en flash
A ver, os explico la historia.
Tengo por un lado un fla y por el otro un php. El fla llama al php quien hace unas consultas a base de datos y le devuelve un xml.
Las pruebas las hago en local, el php se ejecuta en un servidor dentro de mi red local llamado "myserver". La máquina "myserver", además de albergar el apache, actua de router conectando la red local con intenet. Tiene por lo tanto dos interfaces, uno con ip privada y otro con ip pública.
En el fla, llamo al archivo news.php utilizando la url completa: http://myserver/mydir/news.php. Así me lo encuentra al publicar y no tengo que irme al navegador.
En news.php se hace un include del archivo db_vars.php con las claves de acceso al mysqlserver en localhost digamos nkuser para el usuario y nkpass para la contraseña.
Ahora viena la movida. Compilo e news.fla y entrego el news.swf al cliente pero se me olvida quitarle la url absoluta a myserver en la llamada a news.php. El cliente recibe news.swf, news.php y db_vars.php. Cambia en db_vars las variables de acceso al mysqlserver por las suyas y me llama y me dice que el swf le da un error conectano al mysql server en localhost con user=nkuser y password=nkpass...mis variables de acceso!!me he quedado de piedra.
Lo único que se me ocurre es que al no haber cambiado la url absoluta a myserver en news.fla, el news.php al que se está llamando desde la oficina de mi cliente es al que está en myserver. Pero para eso en algúna parte del proceso de compilación de news.fla se ha tenido que resolver el nombre de myserver a la ip correspondiente y ademas a la ip pública ya que el nombre myserver no debe poder ser resuelto desde fuera de mi red.¿alguien sabe si esto es así?
Otro tema es el puerto por el que está accediendo el swf a mi servidor, una vez conocida su ip publica. El puerto 80 de myserver lo tengo chapado para el interfaz externo, aunque por encima del 1024 los tengo abiertos. ¿alguien sabe por que puerto hace las peticiones a un servidor web el flash?
Se que es duro pero no me he sabido explicar en menos palabras :(
Por favor ayuda... no puedo dormir sin entender que es lo que ha pasado!!
Usuario desconocido
creo que te estas haciendo la picha un lio, flash no resuelve direcciones de dominio, seria la leche! flash con servidor de DNS!
mira digamos que flash actua en la capa aplicación y de ahi para abajo necesita "interpretes" .
el problema es que estas usando una ruta absoluta!!!
esto es:
lo que en tu red local es http://myserver
y ves tu servidor web de casa,es gracias a que tu router sabe que hay una maquina en la red local que se llama asi, y antes de salir fuera la busca dentro, obviamente en el cliente jamas funcionara.
es como si yo pongo http://myserver/loquesea en mi explorer, pues obviamente no me saldrá nada
(yo no tengo ninguna maquina que se llame así)
a no ser que ellos tengan una máquina que casualmente se llame asi. ( y aun asi , la aplicación solo funcionaría en red local).
tienes que usar ruta relativa. o absoluta si la máquina existe en internet y entonces los servidores DNS de internet se encargaran de llevarte a ella.
pero vamos, olvidate de toda esa movida de que flash pueda distingir entre rangos de red, tarjetas físicas, y demás.
xrv
bueno, estoy deacuerdo con lo que comenta jipi pero añadiría un detalle más. Yo a menudo me encuentro con ese pequeño fallito a la hora de modificar el dominio, y por ello simplemente incluyo un pequeño codigo que me define el host donde buscar los archivos:
if(_url.indexOf("file://")!=-1){
host="http://www.pepito.com";
}else{
host="http://myserver";
}
carga(host+"/news.php"); //función ficticia
lo que sería:
si la url del archivo no contiene file:// pues define host como la web de itnernet, por el contrarío, define host como la ruta local
Usuario desconocido
weeee, ese script es marquetería fina!!
jejej, y tu no ibas a dejar el ordenador el finde? jejej
:)
mik
No, si ya sabía yo que eso de que flash resolviera nombres era un poco raro. Pero es que entonces no se me ocurre como pasó lo que pasó. Ralladuras del cliente... si es que no se salva ni uno!
Gracias por contestar, a ambos. Gracias por el script XrV, ya no tendré que preocuparme por cambiar la ruta. Por cierto, puede ser que intercabiaramos tarjetas en el offf?, me suena eso de cdmon...
Un saludo!
meddle
si no te dio 3 tarjetas por lo menos es que nunca os llegasteis a ver :P
xrv
meddle
si no te dio 3 tarjetas por lo menos es que nunca os llegasteis a ver :P
jajaja... me llegué a sentir enfermo en ciertos momentos, todo el mundo agradeciendome que le facilitara una de esas jodidas tarjetas que andavan por todos sitios ... no hay nada como sentirse entre tu tribu.
mik, tu eres uno de los muchos inklude que iban por ahí, fijo que nos conocimos en la fiesta "chic" que nos montó la organización con sangria "GRAAAATIIIIIIIISSSSSSS" i birra para todos (i unas bravas.... yummm.... que poco se ha hablado de esas bravaaasssssshhh)
ala, de ná pol script, me ha gustado eso de maquetería fina.
saludines
Usuario desconocido
El gran Zeh publicó una función en layer51 para comprobar si la película se ejecuta en local o no, es lo mismo que ha puesto XrV pero más sencillo a la hora de llamarlo :)
<code>
_global.isLocal = function() {
return (_url.indexOf("file:") > -1);
};
ASSetPropFlags(_global, "isLocal", 1, 0);
</code>
Luego para utilizarlo:
<code>
if (isLocal())
objXML.load("http://localhost/miweb/proyectos.php");
else
objXML.load("proyectos.php");
</code>
Salu2
xrv
ummm... apenas he tocado el 2004 pero he leido por ahí que lleva una función que te permite saber si estas en local o en flash player o algo así, a ver si alguien arroja un poco de luz sobre este asuntito :).
m, el script que propones es una buena opción también :) (proto.layer51 rules que te cagues)