2010-06-29 7 views
5

J'ai un site sur un domaine, appelons-le "mydomain.com", où les gens peuvent se connecter. Ce domaine a un sous-domaine sub.mydomain.com. Lorsque l'utilisateur télécharge un fichier sur le domaine principal, je souhaite le déplacer vers le dossier uploads sur sub.mydomain.com. Le dossier dans lequel je souhaite déplacer le fichier possède des privilèges d'écriture/lecture complets.PHP: Déplacer le fichier du domaine au sous-domaine

Mon code qui te télécharge le fichier:

$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); 
    } 

Lors de l'exécution de ce code, je reçois l'avertissement/erreur suivant:

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 

Quelqu'un peut-il me éclairer avec une solution à mon problème? Une note finale: Je sais que je pourrais faire la connexion sur le sous-domaine et télécharger le fichier directement, mais je voudrais garder la connexion sur le domaine principal à d'autres fins.

Merci d'avance.

Jurgen

+0

Une bête noire personnelle: Je déteste le terme * sous-domaine * lorsque les services d'hébergement l'utilisent comme synonyme de * site web * ou, plus précisément, * site Web de deuxième classe, nous vous permettons d'avoir nous quittons toujours le marché pour des plans coûteux *. :) –

Répondre

2

Votre service d'hébergement ne permet pas vos scripts pour faire des choses en dehors du répertoire httpdocs de chaque hôte virtuel et un répertoire partagé /tmp. Cela limite sérieusement les possibilités d'échange d'informations entre les sites.

trucs que je peux penser:

  1. stocker un fichier temporaire dans le répertoire /tmp à partir du site source et déclencher un processus dans le site cible pour récupérer le fichier. Vous pouvez utiliser les fonctions curl pour le faire.

  2. Stockez les fichiers dans une base de données commune. Le stockage n'a pas besoin d'être permanent si vous pensez que cela affectera les performances de votre site. Le site cible doit juste checke s'il a des fichiers entrants en attente.

  3. Ajoutez des fichiers à une file d'attente (éventuellement un répertoire spécial à l'intérieur de httpdocs) et écrivez un script en ligne de commande pour les pousser vers le site cible. Exécutez cette commande avec cron (disons, une fois toutes les minutes).

IMHO, n ° 2 semble faisable et fiable.

+0

peut-être qu'il n'est pas hébergé quelque part où il est impossible de changer php.ini? – hop

+0

Merci pour votre réponse, # 2 ressemble en effet à une option que je pourrais jeter un oeil. – Jurgen

0

Comme l'indique le message d'erreur, l'accès aux fichiers est limité à certains répertoires avec la directive open_basedir dans php.ini.

Si vous avez accès à la configuration du serveur, vous pouvez le modifier. Pourquoi ne pas créer un lien symbolique pour votre sous-domaine, puis atteindre les images via sub.domain.com url?

+0

Eh, ouais, une possibilité évidente que j'avais totalement oubliée :) –

+0

On ne sait pas ce que vous voulez que je change dans open_basedir. Pourriez-vous donner quelques explications supplémentaires? Par exemple quand j'ai '/ var/www/vhosts/mydomain.com/httpdocs' comme répertoire principal et'/var/www/vhosts/mondomaine.com/subdomains/sub/httpdocs' comme sous-domaine? – Jurgen

+0

@Jurgen: Je ne veux pas que vous changiez quoi que ce soit, puisque je m'en fous. d'autant plus que vous ne semblez pas y mettre d'effort, sans même essayer de donner un peu plus d'informations utiles. – hop