2010-05-02 35 views
24

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

Quiero incluir el segundo archivo de la primera.

El contenido del segundo archivo tiene el siguiente aspecto:

<?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 hacer esto?

+0

Acabo de buscar en Google para llegar aquí. ¿Qué pasa si el otro servidor está en la intranet del mismo servidor? Esto podría ser muy útil para la reutilización de código a nivel corporativo y el equilibrio de carga nativo de PHP. –

Respuesta

31

No, esta opción está deshabilitada/No permite 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 un addresss remoto para razones de seguridad.

Si aún desea permitir la inclusión de archivos remotos, la directiva allow_url_include se debe establecer en On en php.ini

Pero una vez más que es una mala práctica, en un punto de vista orientado a la seguridad; y, así, por lo general es desactivado (nunca he visto que permitió, en realidad)

Si quiere leer el contenido de un archivo remoto, aunque, puede utilizar la función file_get_contents lugar PERO esto se devolverá como código HTML de marcado puro, no habrá ningún código del lado del servidor.

+1

Sí, podría usar 'file_get_contents' y' file_put_contents' para almacenarlo en su servidor, y luego usar 'include' en él. Aunque es una cosa peligrosa y arriesgada hacer IMO. Pero posible Incluso puede extraer cierto código de él y escribir solo el código que necesita del archivo. – SoLoGHoST

+0

Tengo los permisos para jugar con php.ini Ya he habilitado allow_url_include. pero cuando uso el método mencionado. No consigo nada en la variable. significa que la variable es nula. No sé cómo pasarlo al main.php Estoy usando este método para evitar que las personas descifren mis scripts. , por lo que habrá una parte de la secuencia de comandos en mi servidor. Es por eso que necesito usar este método – SolidSnake

0

Cuando intenta cruzar dominios como ha sugerido, no está incluyendo realmente un archivo que está listo para hacerlo; el proceso es diferente. La máquina necesita devolver el archivo a través de http, que no es de lo que trata la declaración de inclusión.

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

Si no está bajo esta restricción, una solución podría ser utilizar PHP para copiar una copia del archivo del otro servidor y luego incluirlo una vez que esté en su dominio. Otra investigaciones de enfoque podría ser escribir un pequeño script "despliegue" que lo copia en todas partes tiene que ser cada vez que hagas cambios ...

Espero que esto ayude ...

Martin

+0

No quiero copiar el archivo en el otro lado. porque como dije antes, estoy usando este método para evitar que las personas descifren mis scripts. entonces habrá parte de la secuencia de comandos en mi servidor. Es por eso que necesito usar este método. – SolidSnake

+0

¿De qué manera tener un script en Internet ayuda a proteger sus scripts? No estoy seguro de entender su enfoque ... –

+0

Tengo 2 scripts, el primero es el script principal que venderé a mis clientes. y el segundo tiene las funciones principales del primer guión. entonces para usar el script con funciones. el usuario debe estar autenticado para obtener las funciones incluidas. significa que el script principal depende del script de funciones. si algún cracker intenta anular el script, no funcionará. en otras palabras, no será posible descifrarlo porque el archivo de inclusión se guarda en mi servidor. para que nadie pueda acceder a él a menos que sea un cliente legítimo. Espero que entiendas lo que estoy tratando de hacer aquí. – SolidSnake

0

cambiar el nombre de la primera a .txt
luego pensar dos veces, ¿está seguro de lo que necesita entre dominios incluir

+0

sí, necesito ese – SolidSnake

2

uso file_get_contents, para abrir el archivo, añadirlo al segundo archivo de este modo:

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

Esto funcionará si quiere ponerlo al final de su archivo. Luego simplemente haz una inclusión en tu archivo.

De todos modos, como he dicho, este es IMO arriesgado y peligroso, especialmente si no está seguro del contenido que tiene dentro de él.

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

+0

lo siento, eso no es lo que necesito ... – SolidSnake

+0

También puede usar 'file_put_contents' para almacenarlo en su servidor en lugar de escribirlo en un archivo. – SoLoGHoST

3

Después de leer sus comentarios, en los que indica que desea hacer esto como un medio de protección contra copia, mi respuesta es enfática, olvídalo. Esta no es la forma en que funciona la protección contra copia.

Lo único que puede hacer usando include() es buscar el código fuente de otro lado para ser interpretado en el intérprete local. Esto es puerilmente fácil de descifrar: un cliente malicioso simplemente tendría que echo() el código buscado.

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

Las opciones que tiene son:

  • Compilación/codificación/ofuscar el guión, posiblemente requiriendo un módulo PHP específica para ejecutarlo (un montón de preguntas sobre esto en SO)

  • Creación un servicio web real (por ejemplo, usando SOAP) que se ejecuta en su servidor, y realiza las operaciones solicitadas

Por lo que No obstante, personalmente no compro ni recomiendo a los clientes que compren scripts codificados y scripts que necesiten "llamar a casa" para funcionar. Creo en proteger 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 quedar atrapados son demasiado altos).

+0

Todo en vano, tengo miedo –

2

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

/path_to_error_myserver/httpdocs/clients/cliente01/wwwroot/scriptA.php /path_to_myserver_root/httpdocs/clients/client02/wwwroot/scriptA.php ETC ....

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

wwwroot es donde apunta cada dominio de cliente.

scriptA.php tiene algo de lógica de negocios a continuación incluye scriptB.php por sus funciones con la ruta completa arriba:

requieren ('/ path_to_myserver_root/privatefiles/miaplicacion/scriptB.php')

scriptB. php reside en un directorio privado protegido en el servidor, inaccesible por http, y no es accesible por los clientes.

Ahora, tenga en cuenta que mis razones para hacerlo es mantener la consistencia de la versión en varias cuentas, no retener algún código de PHP mágico de mi clientela, pero supongo que podría implementarse para ese fin.

Meh, YMMV.

Cuestiones relacionadas