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?
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
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
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
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.
Aller au dossier temporaire
cd /opt/lampp/temp/
Créez le dossier 'testupload' sous/opt/lampp/temp /
Sudo mkdir testupload
Changer l'autorisation 777
Sudo chmod -R 777 /opt/lampp/temp/testupload/
Code PHP
move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/temp/testupload/" . $_FILES["file"]["name"])
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.