lundi 15 juin 2015
Développement d'un produit: Les 11 péchés mortels
Le développement d’un produit est une aventure pleine de risques et d’obstacles à surmonter pour garantir le succès du projet. Un projet est plein de pièges et chaque surprise non découverte à temps pourrait s’avérer fatale pour la réussite du projet. Dans un livre intitulé « Prototype to product : a practical guide for getting to market », l’auteur Alan Cohen consacre son premier chapitre à présenter « les 11 péchés mortels pour le développement d’un produit ». Une synthèse de ce chapitre a été faite sur le site Oreilly.com, mais ici nous allons nous limiter aux « péchés mortels » auxquels les développeurs sont couramment confrontés dans leurs différents projets.
La première chose à retenir est qu’il ne faut jamais remettre à demain ce que l’on peut faire aujourd’hui. Cet adage prend tout son sens dans le développement informatique car l’un des péchés mortels dans le développement d’un produit vient du vice de la paresse. Dans son livre, Alan Cohen explique en effet que c’est une erreur grave de faire les tests seulement après que les prototypes soient largement développés. Remettre les tests à la fin du développement peut conduire parfois à effectuer de grands changements alors que le projet est très avancé, ce qui est très coûteux. Les tests devraient vite commencer dans le développement, cela permettra de découvrir les surprises le plus tôt possible et d’entreprendre les actions nécessaires au bon moment.
D’autres erreurs qui pourraient miner le projet découlent des hypothèses que nous faisons sur les besoins des utilisateurs. A ce niveau, le développeur pourrait commettre 2 péchés mortels selon Cohen. Le premier est de supposer que nous connaissons les caractéristiques que le produit doit avoir pour satisfaire l’utilisateur moyen. La plupart du temps, nous ne le savons pas parce qu’en tant que développeurs, nous avons tendance à mettre l’accent sur la technologie. Nous désirons plus de fonctionnalités et plus de personnalisations, alors que l’utilisateur ne veut qu’un outil attrayant qui pourra lui permettre de travailler efficacement.
Une autre erreur à ne pas commettre est de se dire également que les utilisateurs savent ce dont ils ont besoin. Selon l’auteur du livre « Prototype to product », il se trouve souvent que ces derniers ne savent pas non plus ce qu’ils veulent mais plutôt ce qu’ils pensent qu’ils veulent. L’idéal serait donc de leur donner quelque chose à tester le plus vite possible - afin d’identifier leurs besoins réels - au lieu d’attendre jusqu’à la fin du développement.
Le flou ou le manque de spécificité dans la planification d'un produit et son effort de développement est également une source majeure d'échec du projet. Il y a 3 péchés mortels qui découlent du flou : le manque de compréhension des exigences, l’absence d’un bon plan de projet et la non assignation de responsabilité.
Si les deux dernières erreurs fatales liées au flou sont plus ou moins claires, il est important de revenir sur le manque de compréhension des exigences. A ce niveau, il faut noter qu’entre l’utilisateur final et le développeur, chaque intervenant a une certaine compréhension du produit que demande le client. Même si le client a une idée claire de ce qu’il souhaite, en exprimant son besoin, le produit qu’il décrit peut subir une modification et d’ores et déjà être différent de ce qu’il souhaite. Si le besoin est recueilli par une partie intermédiaire entre le client et le développeur, cette personne aura encore une compréhension un peu dégradée de ce que le client a exprimé ; alors le produit souhaité par le client subit une autre déformation. Jusqu’à ce que l’expression des besoins parvienne au développeur, le produit aurait déjà subi une profonde déformation. Le développeur va donc concevoir un produit selon la compréhension qu’il a eu des besoins de l’utilisateur. Il sera donc plus facile par exemple pour le client qui voulait une Lamborghini de se retrouver une Volkswagen.
D’autres erreurs à ne pas commettre dans un projet découlent du vice de perfectionnisme. Le développement d’un logiciel peut avoir de grands enjeux, au-delà de l’obligation du développeur de bien faire son travail. Un logiciel réussi peut apporter la gloire et la richesse alors qu’un échec d’un produit destiné à une utilisation à grande échelle pourrait s’avérer désastreux. Le développeur veut donc produire quelque chose de parfait et cela peut parfois l’inciter à développer de nouvelles fonctionnalités. Ce que certains développeurs ne mesurent souvent pas, c’est que l’ajout de nouvelles fonctionnalités a un coût et un risque de mise en œuvre. Une fois que les exigences sont déjà définies, le calendrier est établi et le budget verrouillé. L’ajout de nouvelles fonctionnalités va donc nécessiter plus de temps et générer des coûts supplémentaires.
Une autre erreur fatale liée au vice de perfectionnisme est de ne pas savoir quand arrêter le développement et livrer quelque chose au client. Un logiciel n’est jamais parfait, mais il arrive un moment où il peut être déjà libéré. Le développeur doit savoir s’arrêter à ce moment et donner quelque chose d’utilisable aux clients. Il y aura toujours la possibilité de faire des mises à jour sur le terrain, après que le logiciel ait été déployé.
L’orgueil est également un vice qui peut miner un projet. Selon Cohen, ce serait une erreur grave pour le développeur d’exclure la possibilité d’un échec. Envisager la possibilité d’un échec ne contribue qu’à aider le développeur, qui sera plus avisé pour ne pas commettre les autres erreurs.
Source: Oreilly.com
jeudi 11 juin 2015
Kaspersky Lab victime d'une cyberattaque hautement sophistiquée
source: https://blog.kaspersky.co.uk/kaspersky-statement-duqu-attack/
C’est encore une évidence que nul n’est à l’abri des menaces de cyber-sécurité, qu’il s’agisse de particuliers, gouvernements ou des entreprises. Même les entreprises de sécurité – censées protéger les autres contre les attaques - ne sont pas non plus épargnées. Après Avast, Avira et AVG ces dernières années, la firme de sécurité basée à Moscou vient de détecter une cyber-attaque hautement sophistiquée contre son propre réseau ; l’entreprise l’a annoncé hier sur son blog.
Comme l’explique Eugène Kaspersky, président et CEO de la firme de sécurité, il s’agit d’une «attaque de pointe » sur ses propres réseaux internes. L’attaque a été « complexe » et « furtive » et « a exploité plusieurs vulnérabilités zero-day ».
Kaspersky a baptisé l’attaque Duqu 2.0, d’après un cheval de Troie du nom de Duqu qui a été utilisé dans des attaques contre l’Iran et la France entre autres pays. Duqu 2.0 aurait également été utilisé pour espionner « plusieurs cibles de premier plan, y compris les participants aux négociations internationales sur le programme nucléaire de l'Iran et dans le cadre du 70e anniversaire de la libération d'Auschwitz », explique le CEO de Kaspersky.
La cyberattaque aurait été parrainée par un État. « Le coût de développement et le maintien d'un tel cadre malveillant est colossal », a écrit Eugène Kaspersky, en ajoutant que l’attaque « a une génération d'avance » sur tout ce qu’ils ont vu plus tôt. Elle utilise encore un certain nombre de techniques qui font qu'il est très difficile de la détecter et de la neutraliser. « Il semble que les gens derrière Duqu 2.0 étaient pleinement convaincus qu'il serait impossible d’exposer leur activité clandestine », explique-t-il.
Kaspersky se réjouit par contre du fait qu’aussi professionnelle que l’attaque ait été, ils ont été en mesure de la détecter avec une version alpha de l’une de leurs solutions de sécurité. L’attaque visait la propriété intellectuelle, mais la firme assure qu’aucun de ses produits et services n’a été compromis. Les clients ne font donc face à aucune menace.
Si la firme ne dit rien sur les pays suspects, elle s’indigne par contre de voir des gouvernements s’en prendre aux sociétés de sécurité plutôt que de leur tendre la main pour lutter contre les logiciels malveillants.
« Le fait que les gouvernements attaquent les sociétés de sécurité informatique est tout simplement scandaleux. Nous sommes censés être du même côté que les pays responsables, partageant l'objectif commun d'un cybermonde sûr et sécurisé. Nous partageons nos connaissances pour lutter contre la cybercriminalité et aider les enquêtes à devenir plus efficaces. Il y a beaucoup de choses que nous faisons ensemble pour faire de ce cybermonde un meilleur endroit. Mais maintenant, nous voyons que certains membres de cette ‘communauté’ n'accordent aucun respect aux lois, l'éthique professionnelle ou le bon sens ».
Ce qu’il faut, selon Kaspersky, c'est un ensemble de « règles de jeu reconnues mondialement pour freiner l'espionnage numérique et empêcher la guerre cybernétique ». Le CEO de la firme appelle donc les gouvernements à se réunir et à établir ces règles pour « lutter contre la cybercriminalité et les logiciels malveillants, pas les parrainer et les promouvoir ».
source: https://blog.kaspersky.co.uk/kaspersky-statement-duqu-attack/
Par:
Unknown
Comment repousser la paresse alors que vous avez encore 42 projets à coder ?
Vous l'entendez comme moi cette petite voix qui vous supplie de fermer cette page et de retourner coder ?
Pour ceux qui sont encore là, sachez que ce n'est pas bien. Vous le savez mais c'est plus fort que vous. Comment ça, moi ? Oui, mais moi, c'est différent. Je suis là car j'ai bien vu que vous aviez besoin d'aide. Alors, j'ai accouru... Véridique !
Qu'est-ce qui nous pousse à procrastiner sur internet ?
Faire des internets, c'est aussi obligatoirement être connecté en permanence. Soit pour faire de la veille, soit pour lire la doc ou encore pour aller faire un tour sur [Remplacez cette phrase par le réseau social/divertissement de votre choix]. Par conséquent, notre cerveau est sollicité en permanence. Une notification par-ci, un mail par là, on ne sait plus où donner de la tête.
La solution est donc de réduire le nombre de prétextes de tout reporter au lendemain.
Il y a des applications pour ça !
Coupez votre téléphone
Je vous vois venir d'ici :
- Mais s'il y a une urgence ?
- Et si ma copine m'envoie un texto pour me dire qu'elle m'aime ?
- Et si on m'appelle pour me dire que j'ai gagné mon poids en banane ?
Pas de panique, Offtime (android) va vous aider. Grâce à cette application, vous allez pouvoir décider qui peut vous déranger (SMS, mails, applications). Il suffit de définir un profil répondant à vos besoins (contacts et applications autorisées à vous déranger) ainsi qu'une durée et c'est parti ! Et si vous êtes tentés par zieuter votre profil facebook pendant votre temps de travail, vous devrez attendre soixante secondes avant de faire quoique ce soit. Autant être productif, donc.
Offtime fournit des statistiques sur votre utilisation du smartphone. Le but est donc de vous faire décrocher totalement de l'habitude de tout le temps regarder son portable. Bref, avec cette application, il n'y a plus d'excuses.
Pour les autres : Ne possédant ni iPhone, ni Windows Phone, il m'est impossible de tester de possibles alternatives sur ces plateformes. Néanmoins, les créateurs d'Offtime ont promis une version pour celles-ci malgré une release date encore indéfinie.
Coupez l'accès aux sites parasites
Avec les extensions, nul besoin de modifier le fichier host de votre PC pour vous interdire l'accès à certains sites.
De plus, la majorité d'entre eux sont entièrement paramétrables. En général, il suffit de définir une blacklist de sites ainsi qu'une tranche horaire de travail et le plugin fait le reste.
Sous Chrome
Stayfocusd est le meilleur plugin que j'ai pu trouver sur ce navigateur. Le paramétrage est simple, parfois trop à mon goût. En effet, il n'est possible de définir qu'une seule plage horaire de travail. Toutefois, ce plugin propose un petit bonus par rapport à son alternative Firefox (que je vous présenterai ci-dessous) : l'option nucléaire. Sous cette traduction douteuse se cache la possibilité de "rester focus" ponctuellement, sur une durée déterminée.
Sous Firefox
Malgré une interface un peu plus geek que l'équivalent Chrome, je dois reconnaitre avoir une préférence pour LeechBlock.
Cette extension nous offre la possibilité de définir plusieurs tranches horaires pour plusieursblacklists. Et pour les procrastinateurs les plus coriaces, une tierce personne peut même ajouter un mot de passe pour vous empêcher de bidouiller les réglages en loucedé.
Gardez la documentation en local
Vous avez aussi la solution de couper le câble de votre machinbox. Et dans ce cas, impossible de garder un oeil sur la documentation de votre framework favori. C'est là que Zeal pour PC et Dashpour Mac interviennent. Ces deux frères jumeaux téléchargerons pour vous toute l'information dont vous avez besoin pour vous aider à recoder Facebook.
Et avec la recherche rapide, vous ne pesterez plus contre le temps de chargement de la page. C'est tout bénef !
Et avec la recherche rapide, vous ne pesterez plus contre le temps de chargement de la page. C'est tout bénef !
Comme je l'expliquerai plus tard, la lutte contre la procrastination passe par garder ses objectifs en tête et décomposer vos processus en plusieurs étapes.
Au quotidien
Wunderlist est parfait pour vous rappeler ce pour quoi vous vous êtes levé ce matin. Création de plusieurs listes, possibilité de programmer des rappels, de définir des priorités et même de préciser des sous-tâche. Et en plus, c'est totalement multi-plateformes. Entre les plugins Chrome et Firefox, les applis desktop et mobile (existe même sur Kindle ! Waouuuh !), il y a de quoi faire.
En plein rush
Veille d'une mise en production. Vous avez fait explosé votre cafetière, commandé des pizzas que vous n'avez pas le temps d'apprécier, votre clavier est plein de sauce tomate ! Et vous ne savez plus où vous en êtes, ni ce qu'il vous reste à faire ! Quand le chaos règne, il ne reste plus qu'une seule solution : Trello !
Cette web-app vous permet de faire des todo-lists et d'éliminer les bugs fixés au fur et à mesure ! Je ne vous décrirai pas le bohneur que j'ai à faire passer une tâche dans la case "done", ça serait indécent. Et surtout, ça donne une bonne vision d'ensemble de ce qu'il nous reste à faire. Un bon moyen de rester concentrer sur la chasse aux bugs !
Un peu de méthodologie
Et comme l'outil ne fait pas la méthode, je vais vous donner d'autres astuces qui s'appliquent aussi bien devant un ordinateur qu'avec un crayon en main. Certaines sont purement personnelles et ne conviendront peut-être pas à tout le monde.
La vie, c'est comme un gâteau
N'oubliez pas de vous fixer des objectifs.
- Commencez toujours par définir quelle est votre tâche principale et découpez là en sous-tâches. Le cerveau a tendance être plus enclin à commencer quelque chose quand il sait ce qu'il doit faire, avec précision et dans le bon ordre.
- Maintenant, découpez votre journée de travail sur des tranches horaires d'une demi-heure.
- Placez vos sous-tâches sur ces demi-heures.
- Mettez-vous au travail et tentez d'atteindre vos objectifs.
- L'important n'est pas de les atteindre obligatoirement. Le but est de rester concentré jusqu'au bout en se basant sur vos check-points. De quoi ne plus être tenté d'aller voir ailleurs si on y est !
Que la musique retentisse !
- La musique peut vous aider à vous concentrer. Ou simplement à vous mettre dans le bain. Parfois, ma playlist s'arrête sans même que je m'en rende compte. Et je ne ressens pas le besoin de la relancer. Elle m'aide seulement à être dans une bulle.
- Attention, la science a démontré qu'une musique avec paroles peut être néfaste pour notre attention. En effet, notre cerveau a la sale manie de vouloir interpréter le sens des mots, même dans une langue qu'on ne connait pas. Préférez des bandes originales ou du classique donc. De l'instrumentale dans tous les cas, avec des tempos lents de préférence.
Ne codez/travaillez pas !
- Et oui ! Ce conseil peut vous paraître un peu WTF mais il a fait ses preuves chez moi !
- Imposez-vous des temps de pause planifiés.
- Des pauses, car nous ne sommes pas des machines.
- Planifiées, car il est plus facile de finir un travail lorsque l'on sait qu'il y a une carotte au bout. (Par carotte, j'entends "un moment de distraction". Pas forcément un légume.) Inscrivez donc ce temps dans votre emploi du temps et tenez-y vous !
Pour finir
Désormais, vous n'avez plus d'excuses !
J'espère que cette liste (non-exhaustive) de conseils vous aura plu ! Si vous avez des astuces pour ne plus remettre au lendemain ce que l'on peut faire le jour même, n'hésitez pas à les mettre en commentaire !
Par:
Unknown
mercredi 10 juin 2015
Les prix officiels de Windows 10 sont enfin connus
Windows 10 sera disponible le 29 juillet 2015 comme une mise à jour gratuite pour les PC et tablettes sous les versions authentiques de Windows 7 et Windows 8.1.
La gratuité sera possible uniquement la première année du lancement de l’OS. Après cette période, les utilisateurs qui n’ont pas encore migré devront payer pour obtenir l’OS.
Après une récente fuite sur les prix de l’OS, Microsoft dévoile officiellement le cout à la vente de son OS, pour éviter que l’information erronée ne se propage.
L’OS sera vendu au détail au même prix que Windows 8.1, c'est-à-dire 119 dollars pour Windows 10 Home et 199 dollars pour Windows 10 Pro. Le passage de Windows 10 Home à Windows 10 Pro se fera contre le paiement de 99 dollars. En France, le prix pourrait être de 119 euros pour Windows 10 Home et 199 euros pour Windows 10 Pro.
Microsoft affirme que la meilleure façon d’obtenir Windows 10 est de mettre à jour son PC gratuitement.
Quant à la date de sortie, il n’est pas sûr qu’elle soit maintenue à sa date initiale, ce qui explique la mention spéciale concernant un éventuel retard de livraison sur l’annonce. Néanmoins, dans le cas de son maintien, la version OEM sera publiée un mois seulement après la version RTM. En effet, un peu plus tôt au cours de cette année, des sources bien informées avaient évoqué une sortie de la RTM en juillet 2015.
Dès lors, cette courte durée entre les versions OEM et RTM, en comparaison avec les trois mois habituels, pourrait éventuellement s’expliquer par la volonté de Microsoft d’accélérer le processus d’adoption de son OS afin d’atteindre son objectif principal : l’adoption de Windows 10 par un milliard d’appareils au bout des deux ou trois premières années de son lancement.
Par:
Unknown
mardi 9 juin 2015
Faut-il éliminer le mythe du programmeur génie ?
Jacob Kaplan-Moss, directeur de sécurité à Heroku et l’un des principaux contributeurs à Django, avait présenté une conférence assez intrigante lors de la PyCon 2015 qui s’était tenue à Montréal en avril dernier.
Étant considéré comme l’un des vétérans de la PyCon et un des co-fondateurs de la plateforme Django, Jacob Kaplan-Moss a toujours précisé qu’il n’était en réalité engagé qu’un an après que Django fut créé et qu’il n’était pas aussi bon programmeur que les gens le pensent. En effet, durant son discours, on pouvait lire sur un de ses slides : « Salut, je suis Jacob, et je suis un programmeur médiocre ». Selon lui, nous ne savons pas réellement mesurer l’habilité des programmeurs à produire des logiciels, « Quelles sont nos métriques ? » demande-t-il, « les lignes de codes ? Que mesurent-elles ? Les Story Points ? Qu’est-ce donc déjà un Story Point ? » continu Kaplan-Moss.
« La plupart des gens sont moyens » affirme le conférencier, notre habilité à programmer ne suit pas une distribution bimodale selon lui, et penser qu’un programmeur est « soit bon, soit mauvais » peut avoir des conséquences très dangereuses puisque cela pousse les gens à quitter le domaine de la programmation, voire même décourager les nouveaux venus. Et tout comme le fait de courir un marathon ne requiert pas la nécessité d’être un bon coureur, programmer ne requiert pas la nécessité d’être « un ninja de la programmation ».
La vérité selon lui est que la programmation n’est pas une passion ni un talent, ce n’est qu’un ensemble de compétences que tout le monde peut apprendre. Il faudrait accepter le fait que « ce n’est pas grave d’être moyen dans ces compétences » assure Jacob Kaplan-Moss, ceci rendra la programmation moins intimidante aux nouveaux venus qui veulent rejoindre la communauté.
Un autre point très important selon lui est la nécessité de faire disparaître les stéréotypes sur les programmeurs, selon les chiffres du National Center for Women and Information Technology qu’il avait présenté : la moitié des femmes diplômées en informatique n’utilisent pas leurs diplômes dans leur activité professionnelle, et 40% d’entre elles quittent le domaine de la technologie après une dizaine d’années contre 17% pour les hommes. Selon lui, ceci est dû au fait qu’elles sont souvent perçues comme non compétentes en programmation car elles ne satisfont pas le stéréotype du programmeur lambda à savoir : un jeune homme blanc à l’image de « Mark Zuckerberg ».
Source: Linux news from the source
Par:
Unknown
vendredi 15 mai 2015
Microsoft dévoile les éditions de windows 10
C’est désormais chose faite. Microsoft vient de dévoiler dans un billet de blog les différentes déclinaisons de Windows 10. Contrairement à Windows 8 qui se déclinait en 4 principales éditions, Windows 10 sera disponible en 7 éditions : Windows 10 Home, Windows 10 Mobile, Windows 10 Mobile Enterprise, Windows 10 Pro, Windows 10 Enterprise, Windows 10 Education et Windows 10 IoT Core.
Ce n’est pas supprimant, car Windows 10 a été développé pour fonctionner sur un large éventail d’appareils, dont les PC, les tablettes, les smartphones, Xbox One, Microsoft HoloLens et autres objets connectés. Toutefois, on espérait une rationalisation de la gamme afin de limiter le risque de confusion.
Windows 10 Home sera la version standard de l’OS. Elle est destinée au grand public et fonctionnera sur PC, tablettes et 2-en-1. Elle disposera de l’assistant vocal Cortana, du nouveau navigateur Microsoft Edge, du mode Continuum tablet pour les appareils avec écran tactile, des applications universelles (Photos, Maps, Mail, Calendar, Music, Video, etc.) et Windows Hello pour la reconnaissance faciale, de l’iris et des empreintes digitales lors de l’authentification.
Windows 10 Pro fonctionnera sur PC, tablettes et 2-en-1. En plus des fonctionnalités de Windows Home, elle disposera de nouvelles capacités pour les entreprises, comme la protection des données, le nouveau système de mise à jour pour les entreprises et la gestion des périphériques.
Windows 10 Enterprise sera accessible aux clients disposants des licences de volume. Elle reprend les fonctionnalités de Windows 10 Pro, et s’enrichit de capacités avancées pour protéger les organisations contre les attaques. Elle prendra en charge le nouveau « Windows Update for Business », offrira l’assurance logicielle et des options de déploiement.
Windows 10 Education. Basée sur les fonctionnalités de la déclinaison pour entreprise, elle sera disponible pour les enseignants, les étudiants et l’administration des écoles. Elle sera accessible à travers la licence de volume académique.
Windows 10 Mobile sera disponible pour les smartphones et les mini-tablettes, dont la taille de l’écran est inférieure à 8 pouces. Elle disposera des applications universelles présentées plus haut, ainsi que de la version tactile d’Office. Windows 10 Mobile permettra à certains smartphones de profiter de Continuum, qui fera fonctionner ceux-ci comme des PC lorsqu’ils seront connectés à des écrans externes. Elle remplace donc la marque Windows Phone et Windows RT.
Windows 10 Mobile Enterprise est destinée aux smartphones et mini-tablettes utilisés en entreprise. Elle sera disponible pour les clients qui ont des licences de volume. Elle offrira plus de sécurité et plus de souplesse dans la gestion des mises à jour.
Windows 10 IoT Core sera destinée aux objets connectés, dont les guichets automatiques, les points de vente, les mini-ordinateurs à l’instar du Raspberry Pi, etc.
La mise à jour vers Windows 10 Home, Windows 10 Pro et Windows 10 Mobile sera gratuite la première année du lancement de l’OS pour les appareils « qualifiés » sous Windows 7, Windows 8.1 et Windows Phone 8.1.
Par:
Unknown
mercredi 13 mai 2015
Upload de fichiers par formulaires avec php
L'utilisation des formulaires n'est pas des plus compliquées, et vous en avez certainement déjà utilisé pour créer votre site web, ne serait-ce que pour la page d'inscription et de connexion.
Mais dès que l'on souhaite aller plus loin, et proposer aux visiteurs de personnaliser leur avatar ou d'envoyer une image, cela devient plus difficile. Or, PHP propose des fonctions permettant justement de créer ce genre de script.
Upload c'est quoi ?
Internet est un réseau mondial, regroupant des millions d'individus
répartis sur le globe. Toutes ces personnes s'échangent des messages,
partagent des fichiers, jouent ou cherchent des informations. Nous
échangeons donc des données directement avec d'autres personnes ou avec
des ordinateurs installés dans des locaux.
Tous ces transferts de données d'un ordinateur à l'autre se font par le
biais de connexions, qu'elles soient filaires ou non-filaires (comme le
célèbre WiFi). Une connexion est donc un lien entre deux ordinateurs.
L'ordinateur (ainsi que le logiciel) qui crée la connexion s'appelle le client, alors que celui qui « reçoit » la demande s'appelle le serveur.
Pour chacun des ordinateurs, les données reçues constituent le download (téléchargement), alors que les données envoyées constituent l'upload
(téléversement). Si vous avez bien compris, vous devriez alors voir que
tout ce qui est de l'upload pour le client, est du download pour le
serveur, et réciproquement.
Consulter un site web revient généralement à télécharger (download) les
pages, images et autres fichiers qui forment la page que l'on souhaite.
C'est le navigateur qui s'occupe de gérer toutes les connexions
nécessaires, qui envoie les demandes de fichiers, reçoit les fichiers et
affiche la page.
Mais depuis de nombreuses années, les sites s'ouvrent aux visiteurs de
manière à leur permettre de participer à la vie du site. On trouve
désormais bon nombre de forums, des galeries, et de nombreuses autres
applications en ligne. Pour permettre aux visiteurs d'envoyer des
données, la page contient un formulaire.
Donc, dans un premier temps, le visiteur sélectionne le fichier.
Ensuite, après avoir rempli le reste du formulaire, il clique sur le
bouton pour l'envoyer.
À ce moment-là, le navigateur du client demande au serveur la page « cible » (spécifiée grâce à l'attribut action
du formulaire) en lui envoyant une requête HTTP. Dans cette requête, le
navigateur fournit diverses informations (page demandée, nom et version
du navigateur, cookies qu'il possède pour ce site, etc.) dont les données du formulaire.
Le serveur (Apache par exemple) analyse la requête et passe le relais à
PHP. Juste avant de lancer l'exécution de la page demandée, PHP s'occupe
des données envoyées par le formulaire :
- les champs textuels (text, checkbox, select, textarea, ...) sont copiés dans le tableau superglobal $_POST ;
- les informations concernant les champs de type file sont enregistrées dans le tableau superglobal $_FILES ;
- les fichiers sont temporairement placés dans le dossier temporaire du serveur.
Une fois que tout est prêt, PHP commence à exécuter le script de la page
demandée. C'est donc le script PHP qui va pouvoir gérer le fichier. Il
ne faudra pas oublier que le fichier est dans un dossier temporaire, et
donc que si l'on souhaite le garder, il faudra le placer ailleurs (dans
un dossier du site par exemple). Si au contraire on décide de ne pas
garder le fichier (par exemple si on remarque qu'il est trop grand, que
ce n'est pas une image, …) il suffit de ne pas le déplacer ; il sera
effacé automatiquement lorsque le script aura fini d'être exécuté.
Nous allons voir plus en détail comment mettre en place le script.
Créer le formulaire
Bien, nous voici donc à la première étape : la création d'un formulaire. Le visiteur qui veut uploader un fichier doit passer par un formulaire.
Eh bien non, cela serait terriblement dangereux. En effet, s'il suffisait au script PHP d'avoir l'adresse du fichier pour pouvoir le prendre sur le disque dur du visiteur, un webmaster mal intentionné pourrait prendre tous les fichiers qu'il veut, et donc même ceux qui contiennent vos informations confidentielles ! C'est pourquoi on utilise un type de champ particulier où seul le visiteur pourra choisir le fichier que le navigateur va envoyer au serveur.
Il faut utiliser la balise XHTML
<input />
que vous connaissez déjà sous trois formes :
Nous allons utiliser une autre forme de cette balise, qui permet au visiteur de sélectionner un fichier dans une liste. Elle est fortement semblable aux trois formes précédentes, mais son type est « file » et elle ne peut pas avoir de valeur par défaut :
Elle permet, comme vous le voyez, de sélectionner un fichier à envoyer. Vous pouvez en mettre autant que vous le souhaitez dans votre formulaire, mais n'oubliez pas de leur donner des noms différents.
L'entête du formulaire
Pour que le navigateur sache qu'il doit envoyer un fichier, on l'indique dans l'en-tête du formulaire. C'est très simple, mais il faudra bien y penser pour que votre formulaire fonctionne correctement.
Vous connaissez déjà la balise
Vous connaissez déjà la balise
<form>
, il ne devrait donc pas vous être difficile d'y ajouter une propriété. Il s'agit de la propriété enctype, qui indique le type d'encodage des données. Elle prendra la valeur « multipart/form-data », qui spécifie que le formulaire envoie des données binaires (fichier) et du texte (champs de formulaire). Ce qui nous donne ceci :
Profitons-en pour nous intéresser aux deux autres propriétés du formulaire.
- method : c'est la façon dont les informations seront envoyées, soit par l'URL si la méthode est « GET », soit dans la requête HTTP si la méthode est « POST ». Dans le cas de l'envoi d'un fichier, cette propriété doit être placée à « POST », car le fichier ne peut pas être passé par l'URL (
) . Il existe d'autres valeurs possibles, mais qui ne nous intéressent pas ici.
- action : c'est la page qui sera appelée lors de l'envoi du formulaire. C'est-à-dire, par exemple, le script PHP qui va traiter la réception du fichier. Vous pouvez placer le script sur la même page que le formulaire, comme vous avez appris à le faire dans le cours PHP (que vous devez aussi avoir lu pour poursuivre ce tutoriel).
Restrictions
Un webmaster sain d'esprit ne laissera pas n'importe qui uploader n'importe quoi (
) . C'est pourquoi il est nécessaire d'apprendre à restreindre l'envoi. Nous verrons par la suite que c'est en PHP que se fera la plus grosse partie de la vérification, mais il est déjà possible, en XHTML, de fixer une limite de taille sur l'envoi.
C'est en fait juste une variable que l'on communique au navigateur dans le formulaire. Comme le visiteur n'a pas besoin de voir ce champ, on lui attribue le type hidden.
Cette restriction se fait en octets. Normalement, depuis quelques années, 1 Go = 1 000 Mo = 1 000 000 Ko = 10^9 octets, mais cette norme n'est pas suivie par tout le monde.
Finalisations / Exemples
Nous avons maintenant vu tout ce qui est nécessaire pour réaliser un formulaire d'upload. Bien sûr, vous pouvez ajouter autant de champs que vous le souhaitez. Pour ma part, je vais par exemple ajouter un champ de type texte pour indiquer une brève description. J'ai aussi décidé de permettre au visiteur d'envoyer deux fichiers avec le formulaire. Au final, mon code XHTML ressemble à ceci :
La réalisation du formulaire est à présent terminée. Nous allons maintenant passer à la réception du fichier par le script PHP.
Récupérer le fichier
Poursuivons notre petite histoire. Le formulaire est en place ; le visiteur le remplit puis le valide. Comme je vous l'ai expliqué, les fichiers sont alors uploadés et placés dans un répertoire temporaire. L'avantage, c'est que seul le script PHP pourra accéder à ce dossier.
Nous allons donc contrôler le fichier puis le déplacer vers un dossier du site. On peut contrôler plusieurs choses : la taille, le type, le nom, les dimensions (si c'est une image), …
Le tableau $_FILES contient certaines informations sur les fichiers. Pour chaque champ de type file, on peut obtenir les informations le concernant dans le tableau $_FILES[attribut_name]. On retrouve actuellement les informations suivantes :
Contrôle sur le fichier
Une première vérification consiste à savoir si le fichier a bien été uploadé. Pour ce faire, nous allons utiliser le code d'erreur du fichier. Ensuite nous pourrons effectuer les autres tests.
On peut même préciser de quel type d'erreur il s'agit en comparant le code d'erreur à plusieurs constantes :
UPLOAD_ERR_NO_FILE : fichier manquant.
UPLOAD_ERR_INI_SIZE : fichier dépassant la taille maximale autorisée par PHP.
UPLOAD_ERR_FORM_SIZE : fichier dépassant la taille maximale autorisée par le formulaire.
UPLOAD_ERR_PARTIAL : fichier transféré partiellement.
UPLOAD_ERR_INI_SIZE : fichier dépassant la taille maximale autorisée par PHP.
UPLOAD_ERR_FORM_SIZE : fichier dépassant la taille maximale autorisée par le formulaire.
UPLOAD_ERR_PARTIAL : fichier transféré partiellement.
Commençons par la taille maximale. Pas difficile, c'est une simple comparaison.
Pour le type, nous n'allons pas utiliser le type du tableau mais l'extension du fichier, ce qui sera plus simple. Rassurez-vous, cela revient exactement au même, car le type est pris en fonction de l'extension. Ce qui signifie aussi, malheureusement, qu'on ne peut pas être sûr de la nature du fichier.
Le moyen le plus efficace et le plus polyvalent est de placer les extensions autorisées dans un tableau puis de vérifier que l'extension du fichier est bien dans ce tableau. On pourrait aussi, si on souhaitait autoriser tous les types de fichier mis à part quelques uns, lister les extensions non autorisées et vérifier ensuite que l'extension du fichier uploadé ne s'y trouve pas. Pour cette dernière méthode, il suffit alors d'ajouter une négation à la condition grâce à « ! ».
Le moyen le plus efficace et le plus polyvalent est de placer les extensions autorisées dans un tableau puis de vérifier que l'extension du fichier est bien dans ce tableau. On pourrait aussi, si on souhaitait autoriser tous les types de fichier mis à part quelques uns, lister les extensions non autorisées et vérifier ensuite que l'extension du fichier uploadé ne s'y trouve pas. Pour cette dernière méthode, il suffit alors d'ajouter une négation à la condition grâce à « ! ».
Pour contrôler les dimensions d'une image, il suffit d'utiliser une fonction PHP, getimagesize(), qui retourne un tableau. Nous devons bien évidemment spécifier l'adresse du fichier, qui pour l'instant se trouve dans le dossier temporaire. La fonction retourne alors un tableau dont l'index 0 donne la largeur et l'index 1 la hauteur de l'image. C'est ici encore une simple condition.
En utilisant conjointement ces deux ou trois tests, on peut s'assurer que le fichier est correct et que nous pouvons donc le déplacer dans un dossier du site sans danger. Je ne vous ai pas donné le code final, mais vous devriez être capables de le réaliser facilement avec les lignes de code que je vous ai données. Si vous n'y arrivez pas, c'est que vous devriez sans doute relire le cours, car vous n'avez pas compris le fonctionnement de PHP.
Déplacer le fichier
Pour déplacer le fichier, nous avons besoin de deux informations : l'emplacement de départ, que nous connaissons déjà grâce à la variable superglobale $_FILES, et l'emplacement de destination, que nous devons fixer nous-mêmes. Ici, plusieurs possibilités s'offrent à nous.
Il est toujours important de bien choisir de quelle façon on va nommer les fichiers. Il faut se rappeler deux règles fondamentales : deux fichiers ne peuvent pas avoir le même nom dans le même dossier, et il faut faire attention à l'extension. Ce qui veut dire que l'on ne va presque jamais garder le nom de départ du fichier, car deux visiteurs différents pourraient avoir un fichier du même nom. Pour l'extension, nous verrons par la suite comment contourner le problème. Voici d'abord quelques exemples de noms :
- un avatar : on peut lui donner le numéro unique (id) du membre (1, 2, 343, ...) ;
- une image perso : on peut créer un dossier par membre (s'il peut uploader plusieurs fichiers) et garder le nom de départ ;
- un tracker torrent : on peut lui attribuer un numéro unique (son id dans une BDD par exemple).
Quelques fonctions utiles :
Créer un dossier : boolmkdir ( string$pathname [, int$mode [, bool$recursive [, resource$context ]]])
Créer un identifiant alphanumérique unique : stringuniqid ([ string$prefix [, bool$more_entropy ]] ).
Pour l'extension, on a plusieurs possibilités. On peut garder celle de départ, s’il s’agit par exemple d'une image ou d'un document PDF. En revanche, si l'extension de départ est php ou html, mieux vaut changer l'extension pour éviter que le visiteur puisse placer ses propres scripts sur le site.
Il y a plusieurs façons de procéder : on peut se contenter d'ajouter une extension après celle déjà existante (par exemple page2.php deviendrait page2.php.file) ; on peut remplacer l'extension par une autre (page2.php deviendrait page2.file) ; ou on peut finalement retirer l'extension (page2.php deviendrait page2). Évidemment, lorsqu'un visiteur voudra télécharger le fichier, il faudra remettre l'extension correcte, mais nous verrons comment faire cela plus tard.
Une fois le nom du fichier choisi, il faut déplacer le fichier du répertoire temporaire vers le dossier de destination. Il existe pour cela une fonction très simple qui fonctionne presque exactement comme la fonction copy() ; il s'agit de la fonction move_uploaded_file(). La principale différence avec copy, c'est qu'elle vérifie également que le fichier que l'on souhaite déplacer provient bien d'un formulaire PHP. Voici un exemple d'utilisation :
La fonction renvoie vrai ou faux, selon que le fichier a bien été déplacé ou non. On peut donc s'assurer que le transfert a bien eu lieu, ce qui constitue la dernière étape dans l'upload du fichier.
Par:
Unknown
Inscription à :
Articles (Atom)