PHP utilisation une personne à la fois ????

Résolu/Fermé
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 - Modifié par nonodu003 le 11/04/2013 à 15:45
Nyctaclope Messages postés 5315 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 11 décembre 2022 - 15 avril 2013 à 14:55
Bonjour,

Voilà j'ai crée un formulaire en .html et un page .php qui récupère ces informations. Dans ma page php, j'exécute un programme depuis mon ordi qui prend en argument mes infos du formulaire. J'ai récupéré les résultats de ce programme dans un fichier zip.

Je veux rendre ce fichier téléchargeable. Du coup, j'ai crée un lien grâce à la balise <a>. Tout fonctionne correctement, pas de problème de ce coté là.

Mais mon problème c'est qu'une seule personne à la fois doit utiliser ma page sinon il pourrait télécharger le fichier zip de quelqu'un d'autre. Mon fichier zip a toujours le même nom outputs.zip afin que le lien de téléchargement fonctionne.

Comment je pourrais faire pour qu'une seule personne à la fois exécute mon programme????
J'ai déjà entendu parlé de la fonction uniqid qui génère un identifiant unique mais je sais pas trop comment l'utiliser ou encore si c'est bien adapté à ma situation.

Merci d'avance pour ceux qui peuvent m'aider !

13 réponses

Nyctaclope Messages postés 5315 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 11 décembre 2022 1 250
13 avril 2013 à 15:28
Re
Désolé du retard à répondre ..
Je rejoins tout à fait Azraka ..
Ton application actuelle n'est qu'une ébauche, une maquette, du traitement , et ce n'est certainement pas en bricolant à partir d'elle que tu résoudras ton problème ..
Tu dois refaire entièrement ton analyse, en repartant des fondamentaux de la logique du système , et ensuite récupérer ce qui est utile et qui fonctionne ..

Quelques réflexions ou pistes :
1// tu n'as pas à considérer "une ou deux" personnes en même temps, mais zéro ou plusieurs , et de nature différente ...
Une "personne" est soit un simple visiteur, non intéressé par ton analyse de fichier, soit un client ( qui va passer "commande" )
Enfin un client peut passer plusieurs commandes ..
2// ton serveur affiche pour chacun des pages web différentes et imperméables entre elles, même si le contenu est éventuellement identique.
Ce ne peut être la même page pour un visiteur, ou un client qui passe commande, ou qui en reçoit le résultat. Il y a donc sans doute du PHP derrière cela
Ce n'est pas sain d'envoyer la même page à tous, et en particulier d'office le lien de téléchargement non personnalisé, pour une analyse qui n'existe peut être pas encore
3// ton serveur est-il ton Mac ( en réseau local, ou public ? ), ou un serveur Web ?
4// la première chose à déterminer, c'est si ton programme d'analyse peut traiter plusieurs demandes en même temps, donc en ligne
Si non : il va falloir faire patienter tes clients, et éventuellement leur demander de revenir, ou leur envoyer ensuite le résultat , donc faire du stockage en base de données ou page htm..
5// ton programme d'analyse peut il fonctionner sur un site web, ou seulement sur ton Mac ?
6// tu as nécessairement affaire à plusieurs fichiers à analyser, simultanément ou non, donc à plusieurs résultats, et il faudra sans doute les stocker quelque part, avant et après traitement
7// ensuite ils sont personnalisés, et ne peuvent être récupérés que par leur propriétaire, qu'il faut donc identifier lors de la commande
Pour les personnaliser, il faut les "rattacher" à quelque identifiant convenable :
- soit l'identifiant ou mot de passe ou e-mail ou IP du client
- soit, pourquoi pas, le nom du fichier à analyser : pourquoi ne pas renvoyer dans un .zip à la fois le fichier envoyé , et l'analyse qui lui correspond, avec un nom reprenant celui du fichier de départ ?
L'identifiant est nécessaire pour renvoyer le résultat personnalisé au "bon" propriétaire, en le rendant invisible aux autres
8// enfin, l'effacement systématique du fichier analyse après téléchargement n'est pas, à mon avis, une bonne idée :
- tu peux avoir à faire un contrôle ou vérification a postériori
- tu peux avoir une contestation ultérieure du client
- tu peux avoir besoin d'un historique des traitements ..

Bien sûr les mots "client" et "commande" ne sont ici que des images de principe.

Je pense que tu dois te mettre avant toute chose devant une grande feuille de papier, et dessiner la logique du système ( appelle cela comme tu veux, organigramme, ordinogramme, logigramme, peu importe .. ) et tester minutieusement la logique en fonction des renseignements que tu possèdes, du but recherché , et des séquences successives dans le temps ..

Tu n'en dis pas assez pour que je puisse aller plus loin, et de toute façon ce n'est qu'un simple avis .. Il y a sans doute de nombreuses solutions possibles, plus ou moins "économiques" ..
Et j'en oublie certainement ..
Mais je pense que tu vas avoir des surprises ..

N'hésite pas à te rapprocher de ton responsable de projet, lui poser les bonnes questions , et lui faire tes suggestions ..
C'est un comportement tout à fait "normal" , et même souhaitable, de la part d'un stagiaire ..

Bon courage ..
A te lire éventuellement ..

A+
Nyctaclope
1
Nyctaclope Messages postés 5315 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 11 décembre 2022 1 250
13 avril 2013 à 18:47
Re-re
concernant 3// et 5// c'est Intranet , OK j'avais lu trop vite ..
A+
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
15 avril 2013 à 14:28
Merci beaucoup tout le monde !

J'ai réfléchi à ce que vous m'avez dit et j'ai modifié ma façon de penser.

Du coup, j'ai fini par réussir ce que je voulais faire.

Merci encore =)
1
Nyctaclope Messages postés 5315 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 11 décembre 2022 1 250
Modifié par Nyctaclope le 15/04/2013 à 14:58
Re
Eh bien parfait ! .. Merci pour le retour d'info ..
Bon travail ..
A+
Nyctaclope
0
Utilisateur anonyme
11 avril 2013 à 17:02
salut,

plutot que de bloquer la page pour qu'une seule personne à la fois y soit, je te conseil plutôt de générer des .zip nommés (par exemple "outputs_NOMUTILISATEUR.zip"), tu récupère le nom d'utilisateur pour généré ton lien en fonction de lui. par exemple :

<a href="outputs_<?php echo $nom_utilisateur ; ?>.zip"> ...</a>
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
11 avril 2013 à 17:32
Mais de cette façon, mon lien ne va plus être valide puisqu'il se nomme outputs.zip, non??

Et puis, les personnes ne se connectent pas pour utiliser le programme donc je n'est pas de nom d'utilisateur.

Après si je peux trouver une solution pour que plusieurs personne y soit moi sa me va, mais je vois pas trop comment faire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nyctaclope Messages postés 5315 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 11 décembre 2022 1 250
Modifié par Nyctaclope le 11/04/2013 à 18:13
Bonjour
"le fichier zip de quelqu'un d'autre" : donc ton fichier est personnalisé ..
Comment peux tu le personnaliser si tu n'identifies pas l'utilisateur ?
Et comment identifier l'utilisateur, puisque tu ne sais pas s'il va être intéressé par ton "programme" ? ("les personnes ne se connectent pas pour utiliser le programme")
Tu ne peux pas créer d'avance quelque chose de personnalisé pour quelqu'un dont tu ignores le souhait, ou alors ton fichier est le même pour tout le monde, donc pas personnalisé ..

Ce n'est pas très clair, ou il manque quelque chose dans la chaîne logique ..

Pourquoi pas , s'il est intéressé, faire "commander" ton fichier par l'utilisateur qui laisse son e-mail ..
Ensuite tu envoies le fichier sur dl.free.fr en faisant envoyer le lien par mail au demandeur ? .. Mais ce sera peut être difficile à faire en "automatique" ..

Mais j'ai sans doute mal compris ce que tu veux faire ..
A+
Nyctaclope

Le plus joli des poèmes de la mathématique : e^(i.PI)=i^2
trois nombres "sacrés" d'horizons différents qui se donnent la main ...
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
11 avril 2013 à 18:39
En faite, je suis en stage, et on me demande de mettre en ligne en intranet un programme qu'ils ont déjà crée. C'est pour cela que j'ai crée une interface web.

Mais j'ai qu'un fichier zip qui sort à la fin du programme: outputs.zip qu'ils peuvent télécharger avec le lien que j'ai crée (balise <a> en html)

Du coup, les utilisateurs n'ont pas besoin de se connecter à mon interface, ils sont libre de l'utiliser quand ils le veulent mais si deux personnes commencent en même temps mais que l'un termine un peu avant l'autre, il va récupérer les résultats de l'autres et les supprimer.

Désolé si je n'ai pas été très claire. J'espère que vous comprenez mieux mon problème ! =)
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
11 avril 2013 à 18:42
Petit précision en plus: lors du formulaire ils entrent des fichiers que le programme va analyser.

Du coup, ils n'ont pas les même résultats selon la manip et la personne.
0
Utilisateur anonyme
11 avril 2013 à 19:44
en fait tu as plusieurs solutions.
si c'est toi qui développe le programme, tu peux lui passer le nom d'utilisateur en paramètre lors de son appel, et le programme génère le fichier. Et comme tu sais de quel manière le nom est généré, tu peux créer ton lien dynamiquement pour chaque utilisateur.

si tu utilise un programme externe, il faut que tu fasse un bat entre les deux qui renomera le zip pour créer le lien. Et ensuite c'est pareil.

enfin si réellement tu veux bloquer l'accès à un utilisateur, tu peux rajouter une requete qui indiquera à la base de donnée qu'un utilisateur est en train de télécharger le fichier, et donc quand les autres utilisateurs viendront sur la page, en en-tête tu regarde d'abord dans ta bdd si quelqu'un est déjà connecté, et si oui tu redirige vers une autre page. Il faut aussi que lorsque l'utilisateur à téléchargé le fichier ou quitter la page, tu fasse une requête qui l'indiquera ensuite. (il faudra palier au problème de la personne qui reste sur la page et celui qui quitte le navigateur quand il est sur ta page)
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
11 avril 2013 à 19:55
C'est une programme externe ce n'est pas moi qui l'a crée. Donc je dois faire un bat?

Qu'est ce que tu appelle un bat? --"
0
Utilisateur anonyme
11 avril 2013 à 22:50
et bien en fait tu appel ton executable depuis ton code. je ne sais pas si t'es sous linux ou windows, on va dire windows.
en gras un bat et comme un executable mais dont tu peux lire du contenu (tu l'édite avec le bloc note...essaye un .exe c'est pas pareil ^^)
tu peux regarder ce tuto qui est plutot pas mal :
https://openclassrooms.com/forum/sujet/big-tuto-renovellement-du-tutoriel-ms-dos-et-batch-14132

bne soirée ;)
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
11 avril 2013 à 23:16
Merci je vais lire le tutoriel ! =)

J'utilise un mac et mon programme est écrit en shell, je l'exécute de ma page php grâce à la fonction system().

Je reviendrai si j'ai des questions
Bonne soirée
0
Utilisateur anonyme
12 avril 2013 à 07:45
ah ok ! bah si t'es sur mac il faudra surement que tu cherche un autre tuto je pense car les commandes sont différentes (je ne connais pas mac). Par contre le principe reste le même =)
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
12 avril 2013 à 14:25
Bonjour,

Je pense que le problème vient du fonctionnement de base de l'application.

Si chaque fichier est propre à une personne mais que tu n'as aucun moyen de les distinguer et les associer à la bonne personne, l'application est mal faite !

En soit faire ce que tu veux n'est pas compliqué, mais si tu n'as pas la main sur le fichier et que tu ne sais même pas à qui il est destinée, ça va être très compliqué !
0