Ir al contenido



Foto

Duda con file get contents


  • Por favor identifícate para responder
5 respuestas en este tema

#1 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 19 septiembre 2018 - 04:27

Hola, tengo un php


php
  1. $con = mysqli_connect($hn,$un,$pass) or die('Could not connect');
  2. if (!$con)
  3. {
  4. die('Could not connect: ' . mysqli_error());
  5. }
  6. mysqli_set_charset($con,'utf8');
  7. mysqli_select_db($con, $db);
  8.  
  9.  
  10. /* Process results */
  11. $json = array();
  12. do {
  13.  
  14.  
  15. $dato1='mar';
  16. $dato2='agua';
  17. $dato3='eco';
  18. $fecha="2018-09-19 00:00:00";
  19.  
  20. $json[] = array('dato1'=> $dato1, 'dato2'=> $dato2, 'dato3'=> $dato3, 'fecha'=> $fecha);
  21.  
  22.  
  23. } while ( mysqli_next_result($con));
  24.  
  25.  
  26. print(json_encode($json));

listo el lanza el resultado, 1 sola linea. En otro lado, llamemoslo index.php, recibo esos datos


php
  1. $url ="datos.php";
  2.  
  3. if(isset($url)){
  4. $data = file_get_contents($url);
  5. $characters = json_decode(trim($data));
  6.  
  7.  
  8. foreach ($characters as $character) {
  9.  
  10. $variable1=$character->dato1;
  11. $variable2=$character->dato2;

La situación es que ese datos.php cuando lo hago desde sql server (con su estructura) funciona correctamente, pero cuando lo paso a mysql me lanza. Rescatar que el datos.php viene de otro servidor que no necesariamente es mio.


php
  1. Warning: file_get_contents(datos.php);

Solo me ocurre cuando lo pongo en mysql porque cuando esta en sql sirve correctamente y queria ver si alguien tiene o tuvo un caso similar y como lo solucionó, Gracias


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 19 septiembre 2018 - 04:52

El servidor a donde se hace la petición debe permitir conecciones/peticiones externas asignandole el encabezado allow-access-control-origin.

 

Ahora una pregunta, ¿tratas de obtener un JSON?, si es así, ¿por qué utilizas file_get_content?, lo que estás haciendo es obtener todo el contenido del archivo datos.php en una cadena de texto.

 

Saludos.


  • 0

#3 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 19 septiembre 2018 - 04:56

Ahora, yo puedo entrar http://servidor/datos.php y ver lo que hay, es decir ver los datos, pero no logro pues traerlos, eso que dices  del allow access control origin independientemente  debe ser puesto en el servidor ?

 

Realmente con ese traigo el contenido en cadena texto y luego le hago un for para poner cada dato con su variable y utilizarlo. Lo que me intenteas decir es que consuma datos.php como si fuera un json normal?

 

Saludos


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 19 septiembre 2018 - 05:10

Cualquier aplicación del lado del servidor que sea consumido externamente debe enviar ese encabezado.

 

Lo que digo es que envíes sólo la cadena de texto con el encabezado de json, por ejemplo:


php
  1. $datos[] = array(
  2. 'nombre' => 'jose',
  3. 'apellido' => 'Ramirez'
  4. );
  5.  
  6. header('Content-Type: application/json;charset=utf-8');
  7.  
  8. echo json_encode($datos);

Y ya con eso tienes solamente una cadena de texto json sin más nada, y así puedes usar file_get_content sin problemas.

 

Saludos.


  • 0

#5 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 19 septiembre 2018 - 05:21

Cualquier aplicación del lado del servidor que sea consumido externamente debe enviar ese encabezado.

 

Lo que digo es que envíes sólo la cadena de texto con el encabezado de json, por ejemplo:


php
  1. $datos[] = array(
  2. 'nombre' => 'jose',
  3. 'apellido' => 'Ramirez'
  4. );
  5.  
  6. header('Content-Type: application/json;charset=utf-8');
  7.  
  8. echo json_encode($datos);

Y ya con eso tienes solamente una cadena de texto json sin más nada, y así puedes usar file_get_content sin problemas.

 

Saludos.

Ok entiendo, lo que no me queda claro es que cuando utilizo la estructura de sql server en datos.php si me funciona correctamente y cuando la cambio a mysql nada, de hecho hice el cambio que me recomendaste y  se mantiene igual


php
  1. Warning: file_get_contents(http://servidor/datos.php):
  2. Warning: Invalid argument supplied for foreach()

lo que me genera duda es ese detalle que comenté ahi arribita


  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 19 septiembre 2018 - 05:39

Realmente existe http://servidor/datos.phpó es expresamente?, según el foreach puede ser que el arreglo esté mal formado.


  • 0