web-dev-qa-db-fra.com

PHP: impossible d'ouvrir le flux avec move_uploaded_file (): aucun fichier ou répertoire de ce type

J'essaie de faire en sorte que PHP déplace un fichier téléchargé du répertoire tmp vers un emplacement permanent sur mon serveur Web. Cela semble assez simple, mais je reçois cette erreur:

Unable to move 'C:\UniServer\tmp\php3F62.tmp' to 'static/images/slides/1/1.jpg'

Assez simple, non? Il ne peut pas trouver le dossier de destination.

Ma question est la suivante: Comment référencer le répertoire cible souhaité?  

La référence est-elle relative à la position du script sur le serveur? Ou est-ce relatif à l'URL? Ou le PHP DOCUMENT_ROOT? Ou le système de fichiers de l'OS? Ou autre chose?

Je ne trouve pas de réponse dans la documentation de PHP ni dans aucune des questions similaires ici sur SO ..

Quelqu'un peut-il aider? Merci.

14
Chuck Le Butt

Un moyen simple de garder trace du chemin consiste simplement à définir le chemin absolu dans votre index.php

define ('SITE_ROOT', realpath(dirname(__FILE__)));

Ensuite, utilisez-le comme ceci:

move_uploaded_file($_FILES['file']['tmp_name'], SITE_ROOT.'/static/images/slides/1/1.jpg');
30
Lawrence Cherone

J'ai eu le même problème avec mon téléchargement. Voir mon exemple et peut-être que cela peut vous aider.

Le fichier que j'ai créé s'appelle "upload".

$uploads_dir = 'uploads/';
$name = $_FILES['userfile']['name'];
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{       
    //in case you want to move  the file in uploads directory
     move_uploaded_file($_FILES['userfile']['tmp_name'], $uploads_dir.$name);
     echo 'moved file to destination directory';
     exit;
}
3
Elina
$destination = dirname(dirname(dirname(dirname(__FILE__))))."/runtime/tmp/";
chown($destination, 0755);
move_uploaded_file($info['tmp_name'], $destination.$info['name']);

Ceci est ma solution, je viens d'utiliser mkdir pour créer un répertoire pour mettre ma photo que je veux déplacer .

0
Wayne Lee

C'est à partir de la position du script sur le serveur! Et de plus, vous devez avoir des autorisations d'écriture dans ce dossier:

'static/images/slides/1/1.jpg'

Au lieu de cela, il vaut mieux utiliser un chemin absolu de cette façon:

'C:\UniServer\***\static\images\slides\1\1.jpg

Utilisez un chemin absolu.