incluir archivo php desde otro servidor con php


Tengo dos archivos PHP ubicados en diferentes servidores, uno en http://www.mysite.com/main.php, el otro en http://www.sample.com/includeThis.php.

Quiero incluir el segundo archivo del primero.

El contenido del segundo archivo se ve así:

<?php
$foo = "this is data from file one";

Y el primer archivo:

<?php
include "http://www.sample.com/includeThis.php";
echo $foo;

¿Hay alguna manera de que pueda hacer esto?

Author: NikiC, 2010-05-02

6 answers

No, esta configuración está deshabilitada/no permitida por defecto en la mayoría de los servidores web (php.ini) por lo que no puede utilizar el include para incluir los archivos de direcciones remotas por razones de seguridad.

Si todavía desea permitir la inclusión de archivos remotos, la directiva allow_url_include debe ser establecido a On en php.ini

Pero de nuevo es una mala práctica, desde un punto de vista orientado a la seguridad ; y, por lo tanto, generalmente está deshabilitado (nunca lo he visto habilitado, actualmente)

Si desea leer el contenido de un archivo remoto a través de, puede utilizar el file_get_contents function instead BUT this will be returned as pure HTML markup code, there won't be any server-side code.

 32
Author: Sarfraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-02 07:51:46

Después de leer sus comentarios - en los que afirma que desea hacer esto como medio de protección anticopia - mi respuesta es enfática, olvídelo. Así no es como funciona la protección anticopia.

Lo único que puede hacer usando include() es obtener código fuente de otro lugar para ser interpretado en el intérprete local. Esto es infantilmente fácil de descifrar: Un cliente malicioso solo tendría que echo() el código obtenido.

Ejecutando el script remoto de forma remota (en su servidor) no le ayudará, porque el estado de ese script (variables, funciones...) no estará presente en el script desde el que lo llames.

Las opciones que tiene son:

  • Compilar / codificar / ofuscar el script, posiblemente requiriendo un módulo PHP específico para ejecutarlo (muchas preguntas sobre esto en SO)

  • Crear un servicio web real (por ejemplo, usando SOAP) que se ejecute en su servidor, y realice lo solicitado operaciones

Por lo que vale, sin embargo, personalmente no compro, ni recomiendo a los clientes que compren, scripts codificados y scripts que necesitan "llamar a casa" para funcionar. Creo en la protección de sus productos a través de un acuerdo de licencia estricto (que asustará a los clientes comerciales para que compren su producto, porque los riesgos de ser atrapados robando son demasiado caros.)

 3
Author: Pekka 웃,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-08 13:26:20

Me pregunto si el OP alguna vez encontró una solución para sí mismo. Por lo que sé, la única manera de trabajar esto sería tener todas sus cuentas de cliente en el mismo servidor que los scripts que desea incluir - He hecho algo similar:

/path_to_myserver_root/httpdocs/clients/client01/wwwroot/scriptA.php / path_to_myserver_root/httpdocs/clients/client02/wwwroot / scriptA.php SUCESIVAMENTE....

ENTONCES: / path_to_myserver_root/privatefiles/myapp / scriptB.php

Wwwroot es donde cada puntos de dominio del cliente.

ScriptA.php tiene cierta lógica de negocios y luego incluye scriptB.php para sus funciones con la ruta completa arriba:

Require('/path_to_myserver_root/privatefiles/myapp/scriptB.php')

ScriptB.php reside en un dir privado protegido en el servidor, inaccesible por http, y no atravesable por los clientes.

Ahora bien, mis razones para hacer esto es para mantener la consistencia de la versión a través de varias cuentas, no para retener algunos propietarios código php mágico de mi clientela, pero supongo que podría implementarse para ese propósito.

Meh, YMMV.

 2
Author: antmeeks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-24 03:57:27

Use file_get_contents, para abrir el archivo, añádalo al segundo archivo de la siguiente manera:

$secondFile = file_get_contents('http://www.sample.com/includeThis.php');
file_put_contents('your_file', $secondFile, FILE_APPEND);

Esto funcionará si desea ponerlo al final de su archivo. Que solo hacer una inclusión en su archivo.

De todos modos, como he dicho, esto es arriesgado y peligroso IMO, especialmente si usted no está seguro sobre el contenido que tiene dentro de ella.

Además, su_archivo tendrá que ser una ruta real del servidor, no una URL.

 1
Author: SoLoGHoST,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-02 07:57:06

Cuando usted está tratando de ir a través de dominios como usted ha sugerido, en realidad no está incluyendo un archivo que está sentado allí listo para hacer - el proceso es diferente. La máquina necesita recuperar el archivo a través de http, que no es de lo que se trata la instrucción include.

Además, si está en alojamiento compartido, PHP a menudo se configura para evitar que salga de su propio dominio.

Si no está bajo esta restricción, una solución podría ser usar PHP para copiar una copia de el archivo del otro servidor, y luego incluirlo una vez que se sat en su dominio. Otra distribución podría ser escribir un pequeño script de "implementación" que lo copie donde sea que necesite estar cada vez que realice cambios...

Espero que esto ayude...

Martin

 0
Author: Martin Milan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-02 07:49:27

Cambie el nombre del primero a .txt
entonces piénselo dos veces, ¿está seguro de que necesita cross-domain include

 0
Author: Your Common Sense,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-02 07:50:53