2010-06-29 26 views
5

Tengo un sitio en un dominio, llamémoslo "mydomain.com", donde la gente puede iniciar sesión. Este dominio tiene un subdominio sub.mydomain.com.PHP: Mover archivo del dominio al subdominio

Cuando el usuario carga un archivo en el dominio principal, quiero moverlo a la carpeta uploads en sub.mydomain.com. La carpeta a la que quiero mover el archivo tiene privilegios de escritura/lectura completos.

Mi código que carga el archivo del te:

$filename = 'background_' . $_SESSION['username'] . '.jpg'; 
if (is_uploaded_file($_FILES['background']['tmp_name'])) 
    { 
     move_uploaded_file($_FILES['background']['tmp_name'], 
     "/var/www/vhosts/mydomain.com/subdomains/sub/httpdocs/uploads/" . $filename); 
    } 

Cuando se ejecuta este código me sale el siguiente error/advertencia:

Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/var/www/vhosts/mydomain.com/subdomains/sub/httpdocs/uploads/background_User.jpg) is not within the allowed path(s): (/var/www/vhosts/mydomain.com/httpdocs:/tmp) in /var/www/vhosts/dezeactie.nl/httpdocs/opmaak.php on line 152 

Puede alguien me ilumine con una solución para mi problema?

Una última nota: Sé que podría iniciar sesión en el subdominio y subir el archivo allí directamente, sin embargo, me gustaría mantener el inicio de sesión en el dominio principal para otros fines.

Gracias de antemano.

Jurgen

+0

Una queja personal: Odio el término * subdominio * cuando los servicios de alojamiento lo utilizan como sinónimo de * sitio web * o, más específicamente, * sitio web de segunda clase que le permitimos tener para que su plan barato se vea bien mientras aún dejamos el mercado por costosos planes *. :) –

Respuesta

2

su servicio de hosting no permite que las secuencias de comandos para hacer cosas fuera del directorio httpdocs de cada máquina virtual y una /tmp directorio compartido. Eso restringe seriamente las posibilidades de intercambio de información entre los sitios.

trucos que se me ocurren:

  1. almacenar un archivo temporal en el directorio /tmp del sitio de origen y desencadenar un proceso en el sitio de destino a buscar el archivo. Puede usar las funciones curl para hacerlo.

  2. Almacenar archivos en una base de datos común. El almacenamiento no necesita ser permanente si cree que eso afectará el rendimiento de su sitio. El sitio de destino solo necesita comprobar si tiene archivos entrantes pendientes.

  3. Agregue archivos a una cola (tal vez un directorio especial dentro de httpdocs) y escriba un script de línea de comandos para enviarlos al sitio de destino. Ejecute este comando con cron (digamos, una vez cada minuto).

En mi humilde opinión, # 2 parece factible y confiable.

+0

tal vez no está alojado en algún lugar donde es imposible cambiar php.ini? – hop

+0

Gracias por su respuesta, # 2 de hecho parece una opción que podría echar un vistazo. – Jurgen

0

Como sugiere el mensaje de error, el acceso a archivos está limitado a ciertos directorios con la directiva open_basedir en php.ini.

Si tiene acceso a la configuración del servidor, puede cambiar eso.

+0

Eh, sí, una posibilidad obvia que había pasado por alto totalmente :) –

+0

No tengo claro qué quiere que cambie en open_basedir. ¿Podría dar algunas explicaciones adicionales? Por ejemplo, cuando tengo '/ var/www/vhosts/midominio.com/httpdocs' como el directorio principal y'/var/www/vhosts/midominio.com/subdominios/sub/httpdocs' como el subdominio? – Jurgen

+0

@Jurgen: no quiero que cambies nada, ya que no me importa nada. especialmente porque parece que no le pones ningún esfuerzo, ni siquiera intentas dar información un poco más útil. – hop

0

¿Por qué no crear un enlace simbólico para su subdominio y luego llegar a las imágenes a través de sub.domain.com url?

Cuestiones relacionadas