2010-06-29 11 views
5

Ho un sito su un dominio, chiamiamolo "mydomain.com", dove le persone possono accedere. Questo dominio ha un sottodominio sub.mydomain.com.PHP: Sposta il file dal dominio al sottodominio

Quando l'utente carica un file nel dominio principale, desidero spostarlo nella cartella uploads su sub.mydomain.com. La cartella in cui si desidera spostare il file ha privilegi di scrittura/lettura completi.

Il mio codice che consente di caricare file di 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); 
    } 

Quando si esegue questo codice ottengo il seguente avvertimento/errore:

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 

qualcuno mi può illuminare con una soluzione per il mio problema?

Un'ultima nota: so che potrei fare il login sul sottodominio e caricare il file direttamente, tuttavia vorrei mantenere il login sul dominio principale per altri scopi.

Grazie in anticipo.

Jurgen

+0

Un animale domestico: Odio il termine * sottodominio * quando i servizi di hosting lo usano come sinonimo di * sito web * o, più specificamente, * sito web di seconda classe che ti consente di avere così il tuo piano economico sembra ottimo mentre lasciamo il mercato per piani costosi *. :) –

risposta

2

vostro servizio di hosting non consente gli script per fare cose al di fuori del httpdocs directory di ogni host virtuale e un /tmp directory condivisa. Ciò limita seriamente le possibilità di scambio di informazioni tra siti.

Tricks mi vengono in mente:

  1. memorizzare un file temporaneo nella directory /tmp dal sito di origine e innescare un processo nel sito di destinazione per recuperare il file. Puoi usare le funzioni di arricciatura per farlo.

  2. Archiviare i file in un database comune. Non è necessario che lo spazio di archiviazione sia permanente se pensi che ciò influenzi le prestazioni del tuo sito. Il sito di destinazione deve solo controllare se ha file in attesa.

  3. Aggiungere file a una coda (forse una directory speciale all'interno di httpdocs) e scrivere uno script da riga di comando per inviarli al sito di destinazione. Esegui questo comando con cron (diciamo, una volta ogni minuto).

IMHO, # 2 sembra fattibile e affidabile.

+0

forse non è ospitato da qualche parte dove è impossibile cambiare php.ini? – hop

+0

Grazie per la risposta, il n. 2 sembra davvero un'opzione che potrei dare un'occhiata. – Jurgen

0

Come suggerisce il messaggio di errore, l'accesso ai file è limitato a determinate directory con la direttiva open_basedir in php.ini.

Se si ha accesso alla configurazione del server, è possibile cambiarlo.

+0

Eh, sì, un'ovvia possibilità che avevo completamente trascurato :) –

+0

Non è chiaro per me cosa vuoi che cambi in open_basedir. Potresti dare qualche spiegazione in più? Ad esempio, quando ho il sottodominio '/ var/www/vhosts/mydomain.com/httpdocs' come directory principale e'/var/www/vhosts/mydomain.com/sottodomini/sub/httpdocs' come sottodominio? – Jurgen

+0

@Jurgen: non voglio che cambi niente, dal momento che non me ne potrebbe importare di meno. soprattutto dal momento che non sembra che tu ti concentri da solo, nemmeno cercando di dare un po 'più di informazioni utili. – hop

0

Perché non creare un collegamento simbolico per il sottodominio, quindi raggiungere le immagini tramite l'URL sub.dominio.com?

Problemi correlati