web-dev-qa-db-fra.com

move_uploaded_file () n'a pas pu ouvrir le flux: aucun fichier ni répertoire de ce type

J'ai effectué vos vérifications standard (le répertoire existe-t-il, les autorisations sont-elles suffisamment laxistes) et je suis presque certain d'avoir couvert vos astuces humaines stupides classiques. Voici le code qui échoue:

move_uploaded_file($_FILES['image1']['tmp_name'], "/public_html/flashsale/assets/img/products/T".$_FILES['image1']['name']);

Le répertoire est là - j'ai copié le chemin de FileZilla. J'ai même défini les autorisations sur 777 , à la fois dans FileZilla et dans le gestionnaire de fichiers du panneau de configuration HostGator. Ce code génère deux avertissements:

Message: move_uploaded_file (/public_html/flashsale/assets/img/products/Tsirloin.jpg) [function.move-Upload-file]: échec de l'ouverture du flux: Aucun fichier de ce type ou annuaire

Message: move_uploaded_file () [fonction.move-upload-file]: impossible à déplacez '/ tmp/phpI5GZ3S' vers '/public_html/flashsale/assets/img/products/Tsirloin.jpg'

Dans cet ordre. Donc, le fichier est en cours de téléchargement, le répertoire existe et est réglé sur 777, quoi d'autre pourrais-je manquer?

10
Fibericon

vous n'avez pas besoin de mettre le répertoire complet dans le fichier. essayez de supprimer /public_html/flashsale/ de votre lien et voyez si cela fonctionnera .. De plus, le fichier n'a pas besoin de l'autorisation 777, je télécharge moi-même des fichiers dans des dossiers dotés de 755 autorisations.

de plus, vous pouvez utiliser getcwd(); dans le répertoire que vous visez. la fonction vous donnera le répertoire que vous devez utiliser pour déplacer votre fichier. la source

15
shnisaka

Le problème

$dirpath = dirname(getcwd())

C’est ce que j’avais utilisé au départ pour obtenir le chemin du répertoire vers mon dossier/public_html/upload. $ dirpath contiendra

/public_html/upload

La solution (sur serveur)

$dirpath = realpath(dirname(getcwd()))

Étant donné que je suis sur un environnement d’hébergement partagé, la meilleure façon de faire fonctionner move_uploaded_file consiste à l’utiliser comme destination:

/home/cpanelusername/public_html/upload
6
UWU_SANDUN

Assurez-vous que le chemin que vous traversez. public_html n'est pas obligatoire

$image=basename($_FILES['file']['name']);
$image=str_replace(' ','|',$image);

$tmppath="images/".$image;

        if(move_uploaded_file($_FILES['file']['tmp_name'],$tmppath))
        {
         echo "success";
        }
        else
        {
         echo "fail";
        }

J'espère que cela t'aides

2
Ramaraju.d

Pour Ubuntu 14.04 avec XAMPP, j'ai aussi un problème de téléchargement, mais après avoir corrigé avec Sudo chmod -R 777 destination, cela fonctionne bien.

Voici ce que j'ai fait:

Dossier temporaire à télécharger dans mon Ubuntu 14.04 XAMPP est/opt/lampp/temp /. Si je veux que mes fichiers uploadés dans /opt/lampp/temp/testupload en tant que dossier de destination, j'ai besoin de la configuration ci-dessous.

  1. Aller au dossier temporaire

    cd /opt/lampp/temp/
    
  2. Créez le dossier 'testupload' sous/opt/lampp/temp /

    Sudo mkdir testupload
    
  3. Changer l'autorisation 777

    Sudo chmod -R 777 /opt/lampp/temp/testupload/
    
  4. Code PHP

    move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/temp/testupload/" . $_FILES["file"]["name"])
    
1
Pao Im

Solution pour Windows et IIS:

Le compte IUSR avait besoin d'autorisations dans le répertoire de destination. Pas là, compte IIS_IUSRS, juste le compte IUSR.

0
Hackmodford