Mkdir ne fonctionne que sous IE ?!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mkdir ne fonctionne que sous IE ?!

Re: Mkdir ne fonctionne que sous IE ?!

par xTG » 10 oct. 2010, 18:50

3) Tu peux aussi forcer l'ID de session via l'url. ^_-
Ainsi elle ne devrait pas être perdue.

Re: Mkdir ne fonctionne que sous IE ?!

par matt1983 » 10 oct. 2010, 16:42

bon je crois que j ai trouvé... pour info je le partage ici....

Il semblerait que le probleme vienne de Flash et que l utilisation de FileReference.upload ne permette pas de récupérer et d’utiliser les sessions PHP sous un autre navigateur que IE. (voir article ci dessous)
http://blog.ludikreation.com/2010/06/11 ... e-session/

Contrairement a l article je n utilise pas flex et AMFPHP donc je ne vois que deux solutions:
1. ne debuter la session qu une fois le fichier flash realisé.
2. recuperer l id de session dans BDD avant execution du flash et demarrer une nouvelle session en forcant ce meme id apres execution du flash.

je pense que la deuxieme solution est lourde mais je ne vois pas d autres manieres de faire pour le moment avec mon niveau !

merci en tout cas pour votre aide :D

Re: Mkdir ne fonctionne que sous IE ?!

par xTG » 10 oct. 2010, 08:20

Si l'id de session change c'est que la session a été perdue, soit écrasée par le script soit que les cookies ne sont pas enregistrés.

Re: Mkdir ne fonctionne que sous IE ?!

par matt1983 » 10 oct. 2010, 03:08

bon........... il semblerait que le probleme vienne de l identifiant de session. En remplacant ma variable de session qui contenait l id par la commande session_id(), j arrive maintenant a creer un repertoire avec cette identifiant.

ce qui cloche c est que sous IE ma page index.php renvoie un id de session identique au repertoire cree par upload.php, par contre sous FF et Safari, il semblerait qu en passant d une page a l autre l id de session change !! une session php n est elle pas censee etre conservee entre les pages jusqu a realisation d un session_destroy ou un timeout ?

je remets le code:

index.php

Code : Tout sélectionner

<body> <?php $identifiant = session_id(); echo "hola !<br />"; echo $identifiant; echo '<br /><br />'; ?> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="300" height="200"> <param name="movie" value="FileUpload.swf"> <param name="quality" value="high"> <embed src="FileUpload.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="300" height="200"></embed></object> </body>
upload.php

Code : Tout sélectionner

<body> <?php $chemin = session_id(); if (isset($_FILES['Filedata']['name'])) { chmod ("imagenes/", 0777); @mkdir($chemin, 0777); chmod($chemin, 0777); $uploadDir = $chemin.'/'; $uploadFile = $uploadDir . basename($_FILES['Filedata']['name']); move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadFile); } ?> </body>
le flash n a pas change et j ai bien un session_start() au tout debut des deux pages !

Re: Mkdir ne fonctionne que sous IE ?!

par Ryle » 09 oct. 2010, 20:11

Que retourne ta fonction mkdir quand tu utilises FF ?

Petite remarque : tu fais un chmod sur le dossier "/imagenes/", c'est à dire que tu changes les droits du répertoire "imagenes" qui se trouve à la racine du disque. Puis tu fais un mkdir dans le dossier "imagenes/" (sans le "/" initial), c'est à dire que tu fais référence à un répertoire "imagenes" qui se trouve dans le même répertoire que ton script.

Re: Mkdir ne fonctionne que sous IE ?!

par Matt1983 » 09 oct. 2010, 16:44

merci poru ton aide...

non pas de difference :(

un var_dump($_SESSION) a la fin de ma page principale (ou s initialise la session) me renvoie la meme chose sur les 3 navigateurs, par exemple :

array(1) { ["ref_session"]=> string(26) "ihfvlk7g2abblrlsde43ob7k52" }

je sais que le mkdir se fait cote serveur d ou mon incomprehention totale de cette difference entre FF et IE... Je n ai vraiment aucune idee de ce qui se passe.

Re: Mkdir ne fonctionne que sous IE ?!

par xTG » 09 oct. 2010, 07:03

Je n'ai pas d'autres idées lumières pour le moment désolé. :/
Il n'y a aucune raison que le soucis vienne de la fonction mkdir, c'est exécuté côté serveur et on se fiche du navigateur.
Donc cela ne peut venir que d'un problème d'argument passé à cette fonction, d'où mon interrogation sur les sessions.

Si tu fais un var_dump($_SESSION); dans ton code PHP, y-a-t-il des différences suivants les navigateurs ?

Re: Mkdir ne fonctionne que sous IE ?!

par Matt1983 » 09 oct. 2010, 02:01

Est-ce que Safari et Firefox acceptent les cookies ?
Car sans cookies pas de session et pas de goûter !
Bonsoir et merci pour les reponses...

je vasi mettre en ligne une page de test pour montrer le prob... mais comme le dit probleme se passe au niveau du serveur ca ne va pas trop aider je pense.

pour les cookies j ai verifie ils sont actives et la page de test arrive a recuperer un id de session sous les 3 navigateurs, le probleme est que sous 2 d entres eux, l image est bien uploadee mais directement a la racine comme si la commande mkdir n etait pas prise en compte alors que sous IE l image est bien uploadee dans un nouveau repertoire du nom de la session !

sur un autre forum ils persistent a me dire que le probleme viendrait du flash, ce dont je doute car si vous regardez l AS je ne vois aucune reference au repertoire de destination ! tout est dans le fichier php... en plus si cela venait du flash pourquoi tout fonctionne avec IE ?!

bref je suis loin d etre un expert mais je suis perplexe quant a ces reponses et surtout..... bloque !

Re: Mkdir ne fonctionne que sous IE ?!

par xTG » 08 oct. 2010, 07:34

Est-ce que Safari et Firefox acceptent les cookies ?
Car sans cookies pas de session et pas de goûter !

Re: Mkdir ne fonctionne que sous IE ?!

par staan » 08 oct. 2010, 01:35

Pourrais tu mettre les balises code ?

aurais tu une page test en ligne (envoie le lien en PV si tu veux) pour voir à quoi ressemble le "bug" ?

Mkdir ne fonctionne que sous IE ?!

par Matt1983 » 07 oct. 2010, 21:31

Bonjour !

Je sais que mon titre peut paraitre absurde mais je suis compltement perdu. Il s agit de creer en local sous easyphp une page d upload de photo avec progress bar en flash qui place la photo dans un nouveau repertoire du nom de la session php active.

Sous IE tout va bien, un repertoire du nom de la session est cree et la photo transferee ! :P (exemple: imagenes/1232jkhais1234/photo.jpg)

Sous FF et Safari la photo est transferee a la racine imagenes et aucun repertoire n est cree ! (exemple: imagenes/photo.jpg)

je n y comprends rien et je ne vois pas en quoi le navigateur pourrait influencer sur une commande de creation de repertoire au niveau du serveur... j ai bien autorise l ecriture des repertoires sous windows et j ai meme essaye d inclure une commande chmod 777 dans mon script php mais rien n y fait, seul IE repond a ma demande. J ai vide le cache une centaine de fois et redemmare le pc au cas ou les fichiers pris en comptes soient les anterieurs de test ou la commande mkdir n etait pas encore presente mais rien...

MERCI d avance pour votre aide, c est probablement une betise de debutant mais j ai beau retourner ca dans tous les sens avec tous les tuto je ne vois pas le detail qui cloche.

please help !!!!! ci dessous le code des fichiers (il s agit d un test, c est simple et non securise!):

la page contenant le flash

Code : Tout sélectionner

<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" > <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="Content-Language" content="es-co" /> <link rel="stylesheet" type="text/css" href="menu/menu_style.css" /> <title>test session</title> </head> <body> <?php $_SESSION['ref_session'] = session_id(); echo $_SESSION['ref_session']; ?> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="300" height="200"> <param name="movie" value="FileUpload.swf"> <param name="quality" value="high"> <embed src="FileUpload.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="300" height="200"></embed></object> </body> </html>
le flash

Code : Tout sélectionner

import flash.net.FileReference; var file_fr:FileReference = new FileReference(); var list_obj:Object = new Object(); file_fr.addListener(list_obj); var my_pb:mx.controls.ProgressBar; my_pb.mode = "manual"; my_pb.conversion = 1024; my_pb.labelPlacement = "top"; my_pb.label = "%3%% Uploadé (%1Ko/%2Ko)"; my_pb._visible = false; name_txt.text = "Sélectionnez un fichier"; browse_butn.clickHandler = function(){ file_fr.browse([{description: "tous", extension: "*.jpg"}]); } list_obj.onSelect = function(){ name_txt.text = file_fr.name; file_fr.upload("upload.php"); } list_obj.onProgress = function (bytesTotal, bytesLoaded){ my_pb._visible = true; my_pb.minimum = 0; my_pb.maximum = file_fr.size; my_pb.setProgress(bytesLoaded, my_pb.maximum); } list_obj.onComplete = function(){ name_txt.text = "Le colis est livré."; my_pb._visible = false; getURL("http://www.google.com", "_parent"); } list_obj.onCancel = function(){ name_txt.text = "Annulé"; } list_obj.onIOError = function(fileRef){ name_txt.text = "IO error with " + fileRef.name; } list_obj.onSecurityError = function(fileRef, error){ name_txt.text = "Security error with " + fileRef.name + ":" + error; } list_obj.onHTTPError = function(fileRef:FileReference, error:Number){ name_txt.text += "HTTP error: with " + fileRef.name + ":error #" + error;}
et enfin, la ou je pense ca cloche, le php d upload

Code : Tout sélectionner

<?php session_start(); if (isset($_FILES['Filedata']['name'])) { chmod ('/imagenes/', 0777); mkdir('imagenes/'.$_SESSION['ref_session'], 0777); $uploadDir = 'imagenes/'.$_SESSION['ref_session'].'/'; $uploadFile = $uploadDir . basename($_FILES['Filedata']['name']); move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadFile); } ?>