Difficulté pour construire scripts php

Petit nouveau ! | 8 Messages

17 juin 2006, 20:57

Bonjour,

voila, je vous explique mon probleme.

Sur mon site http://www.sur.be , rubrique "Transferer" (en bas a gauche) j'utilise flash pour faire de l'upload. Le script flash utilise un script php pour l'upload car je n'ai pas installé cold fusion sur le serveur.

Voici mon script php:
<?

if ($_FILES['Filedata']) {
$uploaddir = './uploads/';
$uploadfile = $uploaddir . basename($_FILES['Filedata']['name']);


$name='Flash uploader';
$email='xxx';
$subject='New file uploaded';
$message='A new file has been uploaded to www.sur.be/uploads';
$message1='A new file failed to be uploaded to www.sur.be/uploads';
$toaddress='xxx';

if (move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadfile)) {
   mail($toaddress,$subject,$message,"From: $name <$email>");
} else {
  mail($toaddress,$subject,$message1,"From: $name <$email>");
}
} else {
print "&success=0";
}
?>
Avec ce script je récupère les fichiers qu'on veut m'envoyer, je les upload et ensuite j'envoie un message ok ou pas ok.

Ensuite j'ai un deuxieme script que j'aimerais intégrer dans le premier et ceci pour eviter d'écraser un fichier avec le même nom. Si je l'utilise tout seul il fonctionne mais je n'ai pas la fonction mail.

Deuxième script:
<?

$source=$_FILES['Filedata']['tmp_name'];

$fichier=$_FILES['Filedata']['name'];

list($nomfichier,$extension)=explode(".",$fichier);

$destination='./uploads/'.$nomfichier.'1.'.$extension;

$i=1;
while(is_file($destination))
{
  $i++;
  $destination='./uploads/'.$nomfichier.''.$i.'.'.$extension;
}

move_uploaded_file($source,$destination);
?>
Et aussi j'aimerais intégrer une fonction pour vérifier les extensions des fichiers qu'on m'envoit. (car j'ai decouvert qu'on pouvait aisement passer outre la protection flash)(si ca interesse qq'un je peux lui expliquer).

Et une dernière chose, comment pourrais-je récupérer le nom du fichier qu'on m'a envoyé pour le passer dans le corps du message?

Merci beaucoup d'avance pour votre aide.

Strotti
Modifié en dernier par Strotti le 18 juin 2006, 02:05, modifié 1 fois.

Petit nouveau ! | 8 Messages

18 juin 2006, 00:12

Re bonjour,

voilà, j'ai trouvé une solution pour envoyer le mail mais le problème maintenant est qu'au moment ou j'envois un fichier, je reçois deux mails, un "upload ok" et un "upload failed". Pourtant php devrait s'arreter si la condition du "if" est remplie, non? :roll:
<?

$name='Flash uploader';
$email='xxx';
$subject='New file uploaded';
$subject1='Upload failed';
$message='A new file has been uploaded to www.sur.be/uploads';
$message1='A file failed to be uploaded to www.sur.be/uploads';
$toaddress='xxx';

$source=$_FILES['Filedata']['tmp_name'];

$fichier=$_FILES['Filedata']['name'];

list($nomfichier,$extension)=explode(".",$fichier);

$destination='./uploads/'.$nomfichier.'1.'.$extension;

$i=1;
while(is_file($destination))
{
  $i++;
  $destination='./uploads/'.$nomfichier.''.$i.'.'.$extension;
}

if (move_uploaded_file($source,$destination)) {
   mail($toaddress,$subject,$message,"From: $name <$email>");
} else {
  mail($toaddress,$subject1,$message1,"From: $name <$email>");
}
?>
Merci pour votre support.
Modifié en dernier par Strotti le 18 juin 2006, 02:05, modifié 1 fois.

Eléphant du PHP | 153 Messages

18 juin 2006, 00:35

Salut !

Ton script a l'air ok.

Ce qui peut expliquer l'envoi des deux mails est peut être (il est tard et je suis crevé mais j'ai déjà eu ce problème une fois) le fait que tu possède une barre d'outils (google toolbar, msn, yahoo...) et que tu testes ton site à distance.

Le but de ces toolbars est de découvrir de nouveaux sites, donc dès que tu changes de pages, un trackeur pars visité la page en même temps, et du coup cela expliquerait ton problème rencontré. Le trackeur n'a pas de $_FILES donc le move_uploadedfile() est faux donc il passe dans le 2ème email.

Essaie pour vérifier d'envoyer avec tes mails l'adresse IP du visiteur.
mail(......, $message." IP : ".$_SERVER['REMOTE_ADDR'],...);
Si tu testes en local, tout ce que j'ai dit est faux, puisque les trackeurs ne vérifient pas les localhost, mais je sens que c'est la faute d'un trackeur (j'ai du flair aujourd'hui ! :))
http://gl2.delcedo.com/ Galaxialord 2 !

Invité
Invité n'ayant pas de compte PHPfrance

18 juin 2006, 00:59

Salut delcedo galaxialord,

au fait je n'utilise pas de toolbar du tout. Mais...

...je suis sur un reseau local et je fais mes tests a partir du pc vers le serveur. et, effectivement t'as raison, si je le fais a partir du serveur je ne recois qu'un mail, le upload "ok". j'ai mis la variable "ip" et je vois les adresses du pc et du serveur.

comment faire donc pour ne recevoir que le mail qu'il faut? "ok" si ok et "failed" si pas ok.

Merci

Petit nouveau ! | 8 Messages

18 juin 2006, 00:59

oups, c'etait moi plus haut...

Eléphant du PHP | 153 Messages

18 juin 2006, 01:01

Vérifie le contenu de $_FILES, si un fichier est défini alors c'est le bon utilisateur, sinon c'est le mauvais.

Ou alors

Vérifie avec l'ip du serveur, si c'est la même ip ==> c'est le mauvais utilisateur sinon (ip différente) c'est le bon ;)
http://gl2.delcedo.com/ Galaxialord 2 !

Petit nouveau ! | 8 Messages

18 juin 2006, 01:09

Saurais-tu me dire stp comment verifier le contenu du $_Files?

T'aurais la ligne php sous la main? :roll:

Merci

Eléphant du PHP | 153 Messages

18 juin 2006, 01:13

Comme tu avais fait dans ton premier script :
if ($_FILES['Filedata'])
{
....
Je pense pas que le serveur envoie aussi les données dans $_FILES, il doit juste accéder à la page et donc cette variable ne doit pas être remplie (supposition à tester)
http://gl2.delcedo.com/ Galaxialord 2 !

Petit nouveau ! | 8 Messages

18 juin 2006, 01:52

Je n'arrive pas a faire le check correctement. Chaque fois l'upload echoue.

Quelqu'un pourrait me dire ce qui va pas dans mon script svp?

Merci.
<?

$name='Flash uploader';
$email='xxx';
$subject='New file uploaded';
$subject1='Upload failed';
$message='A new file has been uploaded to www.sur.be/uploads';
$message1='A file failed to be uploaded to www.sur.be/uploads';
$toaddress='xxx';

if ($_FILES['Filedata']) {
$source='./uploads/';
$fichier= $source . basename($_FILES['Filedata']['name']);

list($nomfichier,$extension)=explode(".",$fichier);

$destination='./uploads/'.$nomfichier.'1.'.$extension;

$i=0;
while(is_file($destination))
{
  $i++;
  $destination='./uploads/'.$nomfichier.''.$i.'.'.$extension;
}

if (move_uploaded_file($_FILES['Filedata']['tmp_name'], $fichier)) {
   mail($toaddress,$subject,$message,$destination." from IP: ".$_SERVER['REMOTE_ADDR'], "From: $name <$email>");
} else {
  mail($toaddress,$subject1,$message1,$destination." from IP: ".$_SERVER['REMOTE_ADDR'],"From: $name <$email>");
}else {
print "&success=0";
}
}
?>

[/php]

Eléphant du PHP | 153 Messages

18 juin 2006, 09:54

Je crois bien que ce n'est pas $fichier que tu voulais mettre :
move_uploaded_file($_FILES['Filedata']['tmp_name'], $fichier)
mais plutot $destination :
move_uploaded_file($_FILES['Filedata']['tmp_name'], $destination)
Sinon la barrière pour le serveur fonctionne ? Si non, tu peux remplacer le test
if($_FILES['Filedate'])

par
if($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR'])

Cela évitera que le serveur exécute ta page (s'il s'agit bien du serveur qui visite ta page ;))
http://gl2.delcedo.com/ Galaxialord 2 !

Petit nouveau ! | 8 Messages

18 juin 2006, 13:24

non ca ne fonctionne toujours pas.

j'ai remplacé

PHP:
move_uploaded_file($_FILES['Filedata']['tmp_name'], $fichier)

avec $destination :

PHP:
move_uploaded_file($_FILES['Filedata']['tmp_name'], $destination) mais ca marche encore moins, je ne sais plus uploader.

avec le script original, si je fais le test a partir du serveur je ne recois qu un mail, le bon. C'est quand j'essaye a partir d'autres pc, du lan, que je recois deux mails.


<?

$name='Flash uploader';
$email='xxx';
$subject='New file uploaded';
$subject1='Upload failed';
$message='A new file has been uploaded to www.sur.be/uploads';
$message1='A file failed to be uploaded to www.sur.be/uploads';
$toaddress='xxx ';


$source=$_FILES['Filedata']['tmp_name'];
$fichier=$_FILES['Filedata']['name'];

list($nomfichier,$extension)=explode(".",$fichier);

$destination='./uploads/'.$nomfichier.'.'.$extension;

$i=0;
while(is_file($destination))
{
  $i++;
  $destination='./uploads/'.$nomfichier.''.$i.'.'.$extension;
}

if (move_uploaded_file($source,$destination)) {
   mail($toaddress,$subject,$message." from IP: ".$_SERVER['REMOTE_ADDR'],"From: $name <$email>");
} else {
  die ();
}

?>
celui ci fonctionne mais j'ai été obligé de mettre "else" "die". donc je ne sais pas voir si quelqu'un a essayé et echoué.

aurais-tu d'autres idées?

Merci