Problema con file_get_contents failed to open stream: No such file or directory

En ocasiones necesitamos llamar a una url externa a modo de webservice para obtener unos datos y en funcion de ellos realizar unas acciones u otras.

Si no andamos muy avispados puede que al llamar a dicha funcion, ésta nos arroje el siguiente error:

failed to open stream: No such file or directory

Esto tiene facil solucion,  puede ser por dos motivos fundamentalmente:

Caso 1.

El más normal es que tengamos en el php.ini del servidor la directiva allow_url_fopen  a Off. Por lo que deberemos acceder vía por ssh a nuestro servidor y editar el archivo  etc/php.ini, buscar la directiva allow_url_fopen y ponerla a On.

Una vez hecho esto ya no debería dar problemas.

Caso 2.

No nos hemos dado ni cuenta que debermos de poner el http:// a la url a la que estamos llamando, por lo que si tenemos puesto esto:

y si tenemos puesto esto:

Caso 3.

Tenemos la “Aplicación A” alojada en el dominio  “midominio.net” y la “Aplicacion B” alojada en el subdominio “subdominio.midominio.net”.

Si intentamos utilizar en la “Aplicación A” file_get_contents para llamar a una url de la “Aplicacion B”:

NO FUNCIONARÁ.

y tampoco al contrario si intentamos utilizar en la “Aplicación B” file_get_contents para llamar a una url de la “Aplicacion A”:

NO FUNCIONARÁ.

Nota: el caso 3 tampoco funciona con Curl

Caso 4.

Tenemos la “Aplicación A” alojada en el dominio  “midominio-A.net” y la “Aplicacion B” alojada en el dominio “midominio-B.net” y ambos dominios están en el mismo servidor.

Si intentamos utilizar en la “Aplicación A” file_get_contents para llamar a una url de la “Aplicacion B”:

Y al contrario también si intentamos utilizar en la “Aplicación B” file_get_contents para llamar a una url de la “Aplicacion A”:

Mi consejo es revisar los casos 1,2 y 3 porque puede ser que te estén pasando los tres y te vuelvas loco, ya que si coges la url a pelo que hay dentro de la llamada a file_get_contents y la pegas en el navegador y la ejecutas la llamada no te dará error, funcionará perfectamente y te devolverá lo que deba, peero luego en el código en la llamada a la función no y esto te puede llevar horas y horas y horas como me ha llevado a mí.;-)