Lire un fichier a partir du nom !

Petit nouveau ! | 6 Messages

07 juin 2008, 14:22

Bonjour tout le monde, donc, ça va être chaud chaud pour expliquer car je code bizarrement, mais je vais quand même essayer !

Alors voilà, depuis 3 jours, je code une sorte de repository simple mais sympa !
Je créer une table avec quatre champs qui sont :

- id
- nom
- doc
- link

En faîte c'est assez simple, doc contiens le nom du fichier TXT qui " présente " la release ( création ).
Donc avec un formulaire et l'aide d'un fichier PHP, j'envoie ( par exemple ) test qui est le nom, test.txt qui est le txt qui présente le projet, et test.rar qui contient les sources et la release que j'ai faite.

Ensuite je récupère tout avec une boucle while dans index.php, et je veux que QUAND je clique sur présentation il ouvre une autre page qui lit le contenu du fichier TXT ( avec le nom du txt que je lui ai donné ) mais je vois pas comment le faire.

Merci. Bye tout le monde.

ViPHP
ViPHP | 1996 Messages

07 juin 2008, 14:23

T'es bien marrant mais je comprends que dalle !!!
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Petit nouveau ! | 6 Messages

07 juin 2008, 14:29

Je me disais aussi =(
J'arrive pas à expliquer ?!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 juin 2008, 14:57

En gros t'as un fichier sur le serveur, son nom dans une base et tu veux que quand on clique sur un lien ca t'ouver le fichier ?

Pour ouvrir une nouvelle fenêtre il suffit juste d'ajouter l'attribut target="_blank" dans ton lien, quant à l'ouverture du fichier texte, il suffit de passer son chemin dans le href et le tour est joué.
while (...) {

  echo '<a href="'.$chemin_et_nom_du_fichier_txt.'" target="_blank">présentation</a>';

}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

07 juin 2008, 15:06

Non, non j'ai un fichier read.php qui doit recevoir le nom du fichier TXT et l'ouvrir ! ( pour que ça soit désigné et j'ai pas envie d'utiliser la bdd pour ça

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 juin 2008, 15:09

Ben...
echo '<a href="read.php?fichier='.$nom_du_fichier_txt.'" target="_blank">présentation</a>';
Tu récupères $_GET['fichier'] dans ton read.php, tu l'ouvres et tu l'affiches :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

07 juin 2008, 15:14

Non, mais le truc c'est que le nom est dans la base de données et regarde :

Voilà index.php :

Code : Tout sélectionner

<?php include("bdd.php"); $requete = "SELECT * FROM repo"; $fin_requete = mysql_query($requete); while($repo = mysql_fetch_array($fin_requete)) { $id = $repo['id']; $nom = $repo['nom']; $doc = $repo['doc']; $link = $repo['link']; echo "<td width='50%'>"; echo "<p>$nom.</p>"; echo "</td>"; echo "<td width='15%'>"; echo "<p><a href='read.php?=$doc'>Présentation</a></p>"; echo "</td>"; echo "<td width='20%'>"; echo "<p><a href='$link'>Click Here For Download.</a></p>"; echo "</td>"; echo "</tr>"; } ?>
et je veux qu'il ouvre ce que contient $doc mais sans laisser de failles surtout car je crois qu'on peut afficher les sources des autres fichiers comme ça !

Eléphant du PHP | 224 Messages

07 juin 2008, 19:27

Bonjour :)

Bon, voici ce que je crois avoir compris de ton histoire (pas simple à suivre si tu ne donnes pas au moins un exemple de ce que peuvent contenir comme donnée tes variables)...

Un premier fichier Php qui construit le tableau d'éléments à consulter ou télécharger :

1. Méthode directe :
while($repo = mysql_fetch_array($fin_requete)) { 
	$id = $repo['id']; // 1234
	$nom = $repo['nom']; // Un nom
	$doc = $repo['doc']; // presentation/un_nom.txt
	$link = $repo['link']; // download/un_nom.rar
	echo "<tr>"; 
	echo "<td width='50%'>"; 
	echo "<p>".$nom.".</p>"; 
	echo "</td>"; 
	echo "<td width='15%'>"; 
	echo "<p><a href='".$doc."' target='_blank'>Présentation</a></p>"; 
	echo "</td>"; 
	echo "<td width='20%'>"; 
	echo "<p><a href='".$link."'>Click Here For Download.</a></p>"; 
	echo "</td>"; 
	echo "</tr>"; 
}


Avec cette piste le visiteur n'a qu'à cliquer sur le lien "Présentation" pour que le fichier texte correspondant s'affiche dans une nouvelle fenêtre du navigateur.

2. Méthode indirecte :
while($repo = mysql_fetch_array($fin_requete)) { 
	$id = $repo['id']; // 1234
	$nom = $repo['nom']; // Un nom
	$doc = $repo['doc']; // presentation/un_nom.txt
	$link = $repo['link']; // download/un_nom.rar
	echo "<tr>"; 
	echo "<td width='50%'>"; 
	echo "<p>".$nom.".</p>"; 
	echo "</td>"; 
	echo "<td width='15%'>"; 
	echo "<p><a href='read.php?doc=".$doc."' target='_blank'>Présentation</a></p>"; 
	echo "</td>"; 
	echo "<td width='20%'>"; 
	echo "<p><a href='".$link."'>Click Here For Download.</a></p>"; 
	echo "</td>"; 
	echo "</tr>"; 
}
Dans cette méthode, un clic sur le lien "Présentation" sollicite un autre fichier Php, nommé ici "read.php", et qui récupère le chemin d'accès du fichier texte de présentation pour l'afficher ensuite. Voici donc comment afficher le contenu du fichier dans "read.php" (c'est vraiment minimaliste comme exemple) :
if (!empty($_GET['doc'])) { echo implode("", file($_GET['doc'])); }

Enfin, je pense que tu devrais utiliser la concaténation pour intégrer tes variables dans les textes, je trouve cela plus clair et moins sujet à des erreurs d'interprétation...

à+ :)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Petit nouveau ! | 6 Messages

07 juin 2008, 21:11

Rolf merci beaucoup, ça fonctionne =)

EDIT ::: =D
Nouveau problème, en faite, y'a une faille =/

Quand je clique sur présentation ça met dans l'url :
http://localhost/0verAlexis/read.php?doc=test.txt

Et moi voulant jouer les grands hackers de 2008 ( non je déconne ) j'ai mis index.php à la place de test.txt et bim et bam et boom il m'affiche le code PHP
!!

EDIT 2 :::: Je met http://google.fr il m'l'affiche, faille include, le mec il inclus une backdoor je suis foutus =[

Eléphant du PHP | 224 Messages

07 juin 2008, 23:11

Nouveau problème, en faite, y'a une faille =/

Quand je clique sur présentation ça met dans l'url :
http://localhost/0verAlexis/read.php?doc=test.txt

Et moi voulant jouer les grands hackers de 2008 ( non je déconne ) j'ai mis index.php à la place de test.txt et bim et bam et boom il m'affiche le code PHP
!!
Bein, dis-donc 0verAlexis, tu plaisantes j'espère... déjà que ça pas été de la tarte de comprendre ce que tu voulais faire, tu voudrais pas non plus qu'on te fasse tout ton script à ta place... non ? :x

Je me suis contenté de te donner juste quelques pistes pour que tu puisses avancer sur ton projet, je n'ai jamais abordé les questions liées à la sécurités, à toi de voir quels contrôles appliquer une fois la variable "doc" récupérée dans le fichier "read.php", il n'y a que toi qui peut savoir ce que tu es près à autoriser et ce que tu veux interdire, et puis, l'exemple que j'ai donné du fichier "read.php" n'était qu'un "exemple", plus que basique, pas une solution !

Déjà, si tu cherches une méthode plus sûre, il faudrait peut-être penser à passer les variables plutôt par "$_POST" que par "$_GET", et pourquoi pas une solution avec les sessions ou des cookies... bref, c'est pas les pistes qui manquent...

Je t'invite vivement à regarder d'un peu plus près quelques tutos de ce site, tu trouveras plein de pistes intéressantes et utiles pour ton projet...

Sur ce...
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Invité
Invité n'ayant pas de compte PHPfrance

08 juin 2008, 12:27

Hmm tu as raison, merci quand même.

Eléphant du PHP | 224 Messages

08 juin 2008, 17:59

Bonjour :)
Hmm tu as raison, merci quand même.
Bon, ok, le ton de mon précédent message était un peu énervé, je suis désolé, mais il n'y avait absolument aucune volonté de t'offenser... ceci mérite peut-être quelques explications :

1. Tout d'abord, nous avons tenté de répondre à ton premier message de ce topic qui, avouons-le, n'était pas très simple à comprendre, tu as d'ailleurs était le premier à avouer ta difficulté à expliquer ce que tu cherchais à faire. Mais ceci n'est pas bien grave en soi, on a tous parfois des difficultés à expliquer quelque chose, faut juste essayer, dans la mesure du possible, de découper le problème en parties plus simples et basiques histoire de faciliter leur compréhension, quitte à avancer par petites étapes successives.

2. Il est relativement rare que les questions liées à la sécurité puissent être réglées avec une ou deux simples lignes de code, parfois cela nécessite de revoir le projet en profondeur, parfois même de passer des heures à étudier les codes sources pour traquer tel ou tel autre faille, et tout ceci peut devenir pratiquement impossible à faire si, de surcroît, on n'a pas une vision assez claire et précise du projet. Bref, difficile de proposer une solution de code sans aucune faille si on n'a pas toutes les données du problème au départ, et même avec, ce n'est pas toujours évident.

3. Malgré le ton quelque peu agacé de mon précédent message, tu n'aura pas manqué de remarquer que j'ai quand-même essayé de te confier quelques pistes à explorer à propos de la sécurité, comme l'utilisation de "$_POST", les "sessions" ou les "cookies", qui sont des mécanismes pensés pour manipuler des données avec une relative bonne sécurité... j'insiste, il y a des bons tutos sur PhpFrance.

4. Un forum comme celui-ci est un lieu d'échanges, où on sollicite l'aide et les compétences d'autres participants pour essayer d'avancer sur son propre projet, parfois cela nécessite de s'y prendre à plusieurs reprises, pour résoudre peu à peu les différents problèmes qui peuvent apparaître. Du coup, il est très rare, voire exceptionnel, que des solutions toutes faites soient proposées dans les forums. Pour ça il y a des sites spécialisés qui proposent des scripts prêts à l'emploi. En tout cas, ce n'est pas la vocation première d'un forum, ici il s'agit avant tout de favoriser l'entraide, ce qui est déjà pas si mal.

5. Imaginons que, un jour, quelqu'un vienne par ici demander un peu d'aide pour qu'on lui explique comment éplucher une orange.
Puis, comme tu sais déjà un peu faire ça, tu viens gentiment lui expliquer la technique en lui montrant, au mieux de tes possibilités et des infos que tu as, comment faire sur un quart d'orange.
Ensuite, logiquement, le demandeur te réponds, mais en ces termes :
"merci mais... il y a quand-même un problème, il reste encore trois quarts d'orange à éplucher !"
En revanche, si cette même personne avait plutôt répondu :
"tiens, je viens d'essayer mais je n'y arrive pas sur toute l'orange, j'ai fais ceci, j'ai essayé cela, j'ai aussi tenté de faire comme-ceci, mais rien à faire, je dois certainement mal m'y prendre, pourrais-tu me montrer sur le reste de l'orange Stp ?"
Alors, franchement, quelle aurait été ta réaction pour l'une ou pour l'autre réponse ?
Je ne veut pas faire de jugement de valeurs en affirmant que la seconde réponse est meilleure que la première, seulement, et c'est inévitable, les réactions qu'elles provoquent seront bien différentes... normal non ?

6. Pour finir, n'y prends pas mal mes remarques, mais comme tu es un participant récent de ces forums, peut-être que tu n'es pas encore familiarisé avec les habitudes de discussion qu'il y a ici, et sur les forums en général. Toujours est-il que l'ensemble des contributeurs sont bénévoles ici, et qu'ils prennent de leur temps libre pour essayer de donner un petit coup de pouce à ceux qui demandent un peu d'aide, alors qu'ils n'ont absolument aucune obligation de le faire... Bref, lorsqu'on demande de l'aide, il faut déjà être content d'en recevoir et, en plus, il ne faut déprécier aucune contribution, pertinente ou pas.

Désolé encore une fois pour le ton de mon précédent message, il n'y avait aucune hostilité à ton égard, vraiment, juste une bonne dose d'agacement... mais ça passe très vite ;)

à+ :)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Petit nouveau ! | 6 Messages

09 juin 2008, 18:34

Non, non mais il n'y a pas de mâl, je sais que je suis un peut capricieux. Le truc c'est que PHP je l'apprends dans un bookin que j'ai acheté, mais je commence avec un peut de temps que le bookin apprends pas grand chose de VRAIMENT intéréssent, mais vus que j'ai les minimes ( voir très minime ) base je peut continuer sur le web, et ton exemple de l'orange est parfait, merci et je ne prends AUCUNE remarque mal puisque elle ne me veulent que du bien.

Merci =)

Eléphant du PHP | 422 Messages

09 juin 2008, 18:44

Et moi voulant jouer les grands hackers de 2008 ( non je déconne ) j'ai mis index.php à la place de test.txt et bim et bam et boom il m'affiche le code PHP
!!
Avant d'afficher n'importe quoi, tu vérifies que le document fait partie d'une liste de documents autorisés à être affichés, ou dont l'extension est autorisée ou dont le répertoire est autorisé ...

Mammouth du PHP | 959 Messages

10 juin 2008, 18:13

Dans ton php.ini, tu peux déjà mettre allow_url_fopen et allow_url_include à Off ;)

et aussi, tu peux faire :
http://localhost/0verAlexis/read.php?doc=test
au lieu de :
http://localhost/0verAlexis/read.php?doc=test.txt

et dans read.php, le nom du fichier n'est pas égal à $_GET['doc'] mais $_GET['doc'].'.txt' ;)

après, par une REGEX, tu peux vérifier si la variable GET est un mot simple et pas une chaine de caractère compliqué...
Tu peux aussi restreindre le nombre de caractères pour le nom du fichier, (si les noms de tes txt sont relativement cours...)

Voilà pour la sécurité... ;)