upload sur le serveur ?!

Eléphant du PHP | 151 Messages

17 nov. 2005, 13:13

Bonjour tout le monde, je viens d'implementer un script d'upload images à mon site web, si l'utilisateur ajoute une image à son annonce immobiliere, il doit payer 4 euros, un encadré 3 euros ....
en local ça marche très bien en ce qui concerne la somme que le client doit payer mais une fois j'effectue le test sur le serveur le champs image est ignoré et par la suite les 4 euros ne sont pas additionnés pour établir la somme ! j'espère que j'ai bien expliqué mon problème !
En local je met pour le chemin d'upload ceci :
$dest_dossier = 'c:/images/';

sur le serveur je met ceci :
$dest_dossier = '/home/center/images/';
voila mon script :
<? 

include("gestion/config.php"); 
include ("fonctions.php"); 
 $typeAnnonce    = isset($_POST['typeAnnonce'])    ? $_POST['typeAnnonce']    : (isset($_GET['typeAnnonce'])    ? $_GET['typeAnnonce'] : ""); 

 $rubrique    = isset($_POST['rubrique'])    ? $_POST['rubrique']    : (isset($_GET['rubrique'])    ? $_GET['rubrique'] : ""); 
 $lignes    = isset($_POST['lignes'])    ? $_POST['lignes']    : (isset($_GET['lignes'])    ? $_GET['lignes'] : ""); 
 $pays_combo   = isset($_POST['pays_combo'])    ? $_POST['pays_combo']    : (isset($_GET['pays_combo'])    ? $_GET['pays_combo'] : ""); 

 $txtvill    = isset($_POST['txtvill'])    ? $_POST['txtvill']    : (isset($_GET['txtvill'])    ? $_GET['txtvill'] : ""); 

 $parution    = isset($_POST['parution'])    ? $_POST['parution']    : (isset($_GET['parution'])    ? $_GET['parution'] : ""); 

 $sub_type_achat    = isset($_POST['sub_type_achat'])    ? $_POST['sub_type_achat']    : (isset($_GET['sub_type_achat'])    ? $_GET['sub_type_achat'] : ""); 

 $sub_type_logement   = isset($_POST['sub_type_logement'])    ? $_POST['sub_type_logement']    : (isset($_GET['sub_type_logement'])    ? $_GET['sub_type_logement'] : ""); 
  $description    = isset($_POST['description'])    ? $_POST['description']    : (isset($_GET['description'])    ? $_GET['description'] : ""); 

 $telEmail   = isset($_POST['telEmail'])    ? $_POST['telEmail']    : (isset($_GET['telEmail'])    ? $_GET['telEmail'] : ""); 
  
 $Nom   = isset($_POST['Nom'])    ? $_POST['Nom']    : (isset($_GET['Nom'])    ? $_GET['Nom'] : ""); 
 
 $Prenom   = isset($_POST['Prenom'])    ? $_POST['Prenom']    : (isset($_GET['Prenom'])    ? $_GET['Prenom'] : ""); 
 
 $Adresse   = isset($_POST['Adresse'])    ? $_POST['Adresse']    : (isset($_GET['Adresse'])    ? $_GET['Adresse'] : ""); 

 $Ville    = isset($_POST['Ville'])    ? $_POST['Ville']    : (isset($_GET['Ville'])    ? $_GET['Ville'] : ""); 

 $TelBureau    = isset($_POST['TelBureau'])    ? $_POST['TelBureau']    : (isset($_GET['TelBureau'])    ? $_GET['TelBureau'] : ""); 
 
 $TelDomicile    = isset($_POST['TelDomicile'])    ? $_POST['TelDomicile']    : (isset($_GET['TelDomicile'])    ? $_GET['TelDomicile'] : ""); 

 $email    = isset($_POST['email'])    ? $_POST['email']    : (isset($_GET['email'])    ? $_GET['email'] : ""); 
 
 $Identif   = isset($_POST['Identif'])    ? $_POST['Identif']    : (isset($_GET['Identif'])    ? $_GET['Identif'] : ""); 
$cadre    = isset($_POST['cadre'])    ? $_POST['cadre']    : (isset($_GET['cadre'])    ? $_GET['cadre'] : "No"); 
$images="";
$S=0;
$fichier_bd="No Picture"; 
//$tel    = isset($_POST['tel'])    ? $_POST['tel']    : (isset($_GET['tel'])    ? $_GET['tel'] : "");
$description= addslashes($description);


if(isset($_FILES['photo'])){  
// params  unset($erreur);  
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');  
$taille_max = 100000;  
 
// utilisez également des slashes sous windows : 
$dest_dossier  = '/home/center/images/';  
// vérifications  
if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )  
{    
//$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';    
}  
elseif
(
 file_exists($_FILES['photo']['tmp_name'])           
 and filesize($_FILES['photo']['tmp_name']) > $taille_max)  
 {    
 $erreur = 'Votre fichier doit faire moins de 500Ko !';  
 }  
 // copie du fichier  
 if(!isset($erreur))  {    $dest_fichier = basename($_FILES['photo']['name']);    
 // formatage nom fichier    
 // enlever les accents    
 $dest_fichier = strtr($dest_fichier,     'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',     'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');    
 // remplacer les caracteres autres que lettres, chiffres et point par _    
 $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);    
 // copie du fichier   
  if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier)) 
{ 
   //l'upload est ok 
   $fichier_bd=$dest_fichier; 
} 
  }} 
  // <!-- Erreur ? -->
 if(isset($erreur)){  echo '<p>', $erreur ,'</p>';}
 // <!-- Formulaire --><!-- Attention, ne de ne pas oublier le  enctype="multipart/form-data" -->
  
  if ($cadre != "No")
{
$S= $S+3;
}
if ($fichier_bd != "No Picture")
{
$S= $S+4;
}


 if (($Ville !="") and ($rubrique !="") and ($typeAnnonce != "") and ($lignes =! "") and ($sub_type_achat !="") and ($description !="") and ($telEmail !="") and ($Nom !="") and ($Prenom !="") and ($Adresse !="") and ($TelDomicile != ""))
{
$sql = "insert into achat (id_achat,pays,ville,location,offre,Nbrligne,type_achat,type_logement,description,photo,cadre,telemail) values ('','$pays_combo','$Ville','$rubrique','$typeAnnonce','$lignes','$sub_type_achat','$sub_type_logement','$description','$fichier_bd','$cadre','$telEmail')";

$test= mysql_query($sql) or die(mysql_error());
 



//echo '.<p>'.$sql.'</p>';

 $sql1 = "insert into client (id_client,nom,prenom,ident,adresse,telbureau,gsm1,email,ville) values ('','$Nom','$Prenom','$Identif','$Adresse','$TelBureau','$TelDomicile','$email','$txtvill')";
 $test1=mysql_query($sql1) or die(mysql_error()); 

//echo '.<p>'.$sql1.'</p>';
if($test and $test1) {
echo("<script type=\"text/javascript\">alert('Votre annonce a été ajoutée avec succès !');</script>"); }

else
{ echo("<script type=\"text/javascript\">alert('Ajout non effectué !');</script>"); 
 }
 $address="ResultPage.php?id=$S";
echo"<META HTTP-EQUIV='Refresh' CONTENT='0;URL=$address'>"; 

}
else 
{
echo("<script type=\"text/javascript\">alert('Vous devez remplir tous les champs obligatoires (*)  !');</script>"); 
}
$address="passann.php";
echo"<META HTTP-EQUIV='Refresh' CONTENT='0;URL=$address'>"; 

//echo $S;
 ?>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2005, 13:48

Salut, essaie avec un point devant le chemin :
./home/center/images/
sinon il faut entrer un chemin relatif par rapport a l'emplacement du fichier d'upload.

d'apres ce chemin tu as:
dossier_quelconque/home/center/images
dossier_quelconque/fichier_upload.php
est-ce bien ça ?[/php]

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

17 nov. 2005, 15:17

Salut Truc, j'ai ajouté le point mais ça ne marche pas
pour le :
dossier_quelconque/home/center/images
dossier_quelconque/fichier_upload.php
j'ai pas bien compris Truc, qu'est ce que tu veux dire par "dossier_quelconque" ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2005, 15:41

dossier_quelconque = "sans importance" :wink:

le principal est de mettre le chemin par rapport a l'emplacement de ton fichier. si tu as en partant de la racine:
racine/dossier1/dossier2/images
racine/dossier3/upload.php

tu dois mettre comme chamin => ../../dossier1/dossier2/images/
racine/dossier1/dossier2/images
racine/dossier1/upload.php

tu dois mettre comme chamin => ../dossier2/images/
le " ../ " permet de remonter d'un niveau par rapport au fichier d'upload, puis il faut mettre le chemin permettant de descendre dans l'arborescence pour atteindre le dossier cible.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

17 nov. 2005, 15:52

Ok je vais essayer Truc, le dossier racine C'est celui qui existe dans le repertoire Home ?!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2005, 16:03

pour connaitre le chemin ajoute cette ligne dans le fichier d'upload:
echo realpath("fichier_upload.php");
le chemin de la racine est ce qu'il y a apres " www/ "

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

17 nov. 2005, 16:12

pour connaitre le chemin ajoute cette ligne dans le fichier d'upload:
echo realpath("fichier_upload.php");
le chemin de la racine est ce qu'il y a apres " www/ "
Pour le www on l'utilise que si on a interet à connaitre le chemin quand on test notre site en localhost mais une fois il est hebergé on n'a plus le "www" Non ?!
ce que je ne comprends pas C que le upload passe en localhost mais pas en ligne ????!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2005, 16:25

oui biensur y en a plus besoin de www/ c'est pour cela que j'ai dis de regarder par rapport a ce qu'il y a apres www/.

realpath() va te retourner le chemin complet du fichier passé en paramètre y compris "home/blabla/www/"

"l'upload" se fait en local parceque le chemin est corret en ligne ce n'est plus le meme :wink:

autre exemple, si le fichier est dans le meme dossier que la destination:
racine/dossier1/images
racine/dossier1/upload.php

tu dois mettre comme chemin => "images/"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

19 nov. 2005, 15:14

desolée Truc de ne pas pouvoir répondre, 2 jours de voyage :wink:
pour le chemin que j'ai obtenu en ajoutant la ligne :
echo realpath("fichier_upload.php");
est celui là :
/home/virtual/site13/fst/var/www/html/test/fichier_upload.php/
alors mon nouveau dossier de destination doit être celui ci Non ?! :
$dest_dossier = 'html/test/photos/';
NB: le fichier de mon "uplaod" est dans le meme dossier que la destination "photos" !

j'attends votre aide ! Merci d'avance !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 nov. 2005, 15:55

Salut,
2 jours de voyage :wink:
Il en qui en ont de la chance :D

je récapitule, tu dois avoir une arborescence comme suite:
html/test/fichier_upload.php
html/test/photos
le chemin doit donc se faire a partir de l'emplacement du fichier d'upload
$dest_dossier  = 'photos/';  


ils (fichier upload et dossier destination) se trouvent dans le meme dossier donc il suffit d'entrer dans le dosier "photos"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

19 nov. 2005, 16:48

j'ai ajouté la ligne :
$dest_dossier = 'photos/';
mais j'ai toujours le même problème, l'image ne passe pas, alors qu'en local ça marche, pourtant j'ai mon fichier "upload" dans le même dossier que mon fichier de destination "photos". :?

Mammouth du PHP | 983 Messages

19 nov. 2005, 16:52

As tu les droits pour copier un fichier à cet emplacement?

Eléphant du PHP | 151 Messages

19 nov. 2005, 18:37

As tu les droits pour copier un fichier à cet emplacement?
je pense que oui ! sinon comment pourrai je le savoir ?!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 nov. 2005, 18:55

pour les droits :
exemple de la doc
echo substr(sprintf('%o', fileperms('.')), -4);
tu fait un copier coller de ce code et le place dans le dossier destination "photos" et tu regarde l'affichage qui doit ressembler a un truc du style

=> 0777

Mais je ne pense pas que ce soit ça le probleme sinn tu aurai eu un message d'erreur correspondant

sinon ajoute un point et / devant le chemin précédent:
$dest_dossier  = './photos/';
au pire
$dest_dossier  = './';
la plus de probleme de chemin, l'upload se fera dans le meme dossier que le fichier_upload.php

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

19 nov. 2005, 19:43

Effectivement les amis, j'avais un problème de permissions :oops: j'avais pas le droit d'ajouter des images sur mon fichier "photos" :wink:
Merci beaucoup pour votre aide ! :D