begin process at 2012 05 27 19:57:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > DOUBLE ASTUCE POUR LES LIENS & AUTRES(À PARTIR DE L'URL)

DOUBLE ASTUCE POUR LES LIENS & AUTRES(À PARTIR DE L'URL)


 Information sur la source

Note :
2,5 / 10 - par 4 personnes
2,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Niveau :Débutant Date de création :08/04/2004 Date de mise à jour :28/05/2004 15:23:26 Vu :4 773

Auteur : Samiby

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

C'est un petit peu compliqué à comprendre l'utilité, puis le code lui-même. (Les explications de l'utilisation de ces astuces sont dans la conclusion)

------------------------------------- -------------------------------------------------- --------
1ERE PROBLEMATIQUE :
Sur votre site, pour ne pas répéter la structure (bannière, menu,pied-de page, tout ce qui ne change pas d'une page à l'autre), vous utilisez l'url:
Exemple:http://www.votresite.ext/la_page_qu i_contient_tout.php?la_page_a_inclure=celle_la.php  
dans 'la_page_qui_contient_tout.php', vous avez un code du style: include($_GET['la_page_a_inclure']);'
Malheureusem ent, ce système a l'inconvénient de ne pas plaire à certains référenceurs de sites qui n'aiment pas les '?' dans l'url, et qui, par conséquent, refuseront de référencer votre chef-d'oeuvre, objet de votre fierté qui DOIT être connu.
Il faut utiliser dans ce cas des url du type:
http://www.votresite.ext/la_page_qui_contien t_tout.php/celle_la.php
et dans votre code, vous mettez : include(substr($_SERVER["PATH_INFO"],1)); (j'ai trouvé ça dans Login n°109, article de Yann Rocq)
Malheureusement encore, imaginons que la page à inclure soit dans un sous répertoire (du type : mon_répertoire/celle_ci.php), à ce moment, la page ne sera pas trouvée, car le répertoire sera ignoré.

----------------------------------------- -------------------------------------------------- ----
2NDE PROBLEMATiQUE:
Elle est liée à la première.
exemple:l'utilisateur peut être sur la page :  P1: http://www.votresite.ext/la_page_qui_contient_tout .php/celle_la.php
il peut aussi être sur la page : P2: http://www.votresite.ext/la_page_qui_contient_tout .php/mon_répertoir/celle_ci.php
Du fait que les fichiers inclus peuvent être avec ou sans répertoire avant le nom du fichier (exemple: 'celle_la.php' et 'mon_répertoire/celle_ci.php'), les liens ne peuvent pas être directs (exemple: <a href='../ma_page.php'>ma_page</a>) car si la page actuelle est P1, si l'utilisateur suit le lien, il arrivera sur l'url:
http://www.votresite.ext/ma_page.php
tandis que s'il est sur la page P2 et qu'il suit le même lien, il arrivera sur:
http://www.votresite.ext/la_page_qui_contient _tout.php/ma_page.php
La seule solution est de mettre l'url complète à chaque lien. Cela donnera pour le lien précédent: <a href='http://www.votresite.ext/la_page_qui_contien t_tout.php/ma_page.php'>ma_page</a>
que l'utilisateur soit sur P1 ou P2, il arrivera au même endroit.
Mais il reste un problème. Vous dévelloppez en local, et l'url complète chez vous est différente de l'url complète en ligne.
Chez vous, le lien sera ( avec EasyPHP):
<a href='http://127.0.0.1/www/votre_site/la_page_qui_ contient_tout.php/ma_page.php'>ma_page</a>
En ligne, le lien sera:
<a href='http://www.votresite.ext/la_page_qui_contien t_tout.php/ma_page.php'>ma_page</a>
Il faut donc que les liens dépendent du lieu de sur quel site l'utilisateur ou vous vous connectez.
Les problèmes est le même pour appeller un page css, ou tout autre fichier.

Source

  • //-----------------------------------------------------------
  • /* 1ERE PROBLEMATIQUE */
  • /* version 'pas à pas' */
  • //exemples:
  • //P1 l'url en ligne : 'http://www.votresite.ext/la_page_qui_contient_tout.php/celle_la.php'
  • //P2 l'url en local: 'http://127.0.0.1/www/votre_site/la_page_qui_contient_tout.php/celle_la.php'
  • $len=strlen($_SERVER['SCRIPT_NAME'] + 1 );
  • //renverra
  • //P1 44
  • //P2 59
  • $inc=substr($_SERVER['REQUEST_URI'],$len);
  • //renverra
  • //P1 & P2 "celle_la.php"
  • /* Version 'compacte' */
  • $inc = substr($_SERVER['REQUEST_URI'],strlen($_SERVER['SCRIPT_NAME']) + 1);
  • //--------------------------------------------------------
  • /* 2NDE PROBLEMATIQUE*/
  • /* version compacte */
  • $x = strtok($_SERVER['PATH_INFO'],'/');
  • $y ="../";
  • while($x=strtok('/')){
  • $y .= "../";
  • }
  • define( 'HERE' , $y );
//-----------------------------------------------------------
/* 1ERE PROBLEMATIQUE  */
/* version 'pas à pas' */
//exemples: 
//P1 l'url en ligne : 'http://www.votresite.ext/la_page_qui_contient_tout.php/celle_la.php'
//P2 l'url en local: 'http://127.0.0.1/www/votre_site/la_page_qui_contient_tout.php/celle_la.php'

$len=strlen($_SERVER['SCRIPT_NAME'] + 1 );
//renverra
//P1 44
//P2 59

$inc=substr($_SERVER['REQUEST_URI'],$len);
//renverra
//P1 & P2 "celle_la.php"

/* Version 'compacte' */
$inc = substr($_SERVER['REQUEST_URI'],strlen($_SERVER['SCRIPT_NAME']) + 1);

//--------------------------------------------------------
/* 2NDE PROBLEMATIQUE*/

/* version compacte */
$x = strtok($_SERVER['PATH_INFO'],'/');
$y ="../";
while($x=strtok('/')){
	$y .= "../";
}
define( 'HERE' , $y );

 Conclusion

J'espère que vous avez compris.
Pour la suite:
Pour les liens, il suffit de mettre:
<a href=<?= "\"".HERE ?>(la_page_qui_contient_tout.php/)ma_page.php">ma page</a>
Ce qu'il y a entre () n'est pas indispensable si le lien ne dirige pas vers lea page de structure avec une inclusion.

Pour l'inclusion :
include($inc);

Bravo à ceux qui ont suivi jusque là et qui ont compris ;-) (moi-même, je suis pas sûr :p ).

Prévenez-moi si cela ne marche pas.

L'avantage de ce système est qu'il ne dépend pas du tout de l'adresse du site, ni du répertoire où il se trouve.

EDIT du 28/05/2004:
La dernière version de la 2ème astuce est mieux, car elle n'utilise plus une URL absolue du type http://www.lesite.ext, mais une URL relative du typpe ../../le_rep/lefichier.ext
/EDIT


 Sources du même auteur

Source avec Zip CLASSE POUR FORMULAIRE HTML : GÉNÉRATION ET RÉCUPÉRATION DES...
Source avec Zip GESTION DES ERREURS
Source avec Zip BRUTEFORCE AVEC GESTION DU TIMEOUT
Source avec Zip REQUETE MYSQL SIMPLE AVEC SAUVEGARDE
Source avec Zip UN LIVRE D'OR SANS MYSQL, MAIS AVEC TXT

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

Commentaires et avis

Commentaire de Kilco le 09/04/2004 21:45:23

Jvoi pas à koi ca sert ton truc!
Autant utilisé un truc du genre:
http://www.lesite.com/index.php?p=codessources

-------------------------------------------------------
switch ($p){
case ("codessources"):
$inclus = "pageainclure.php";
break;
}
include ($inclus);
-------------------------------------------------------

c'est beaucoup plus court et mieux compréhensible

Commentaire de Samiby le 09/04/2004 21:56:04

Bien sûr, mais il ne me semble pas que tu aie lu le début de mon explication :
"Malheureusement, ce système a l'inconvénient de ne pas plaire à certains référenceurs de sites qui n'aiment pas les '?' dans l'url, et qui, par conséquent, refuseront de référencer votre chef-d'oeuvre"

PS:
Cette info n'est pas de moi (Login n°109, article de Yann Rocq), est elle n'est pas exactement retranscrite. En fait, les réfé"renceurs refusent de suivre les liens avrec un '?', ce qui a le même résultat.

Commentaire de Kilco le 09/04/2004 22:04:51

Mais ca on s'en fiche!
La page d'accueil elle sera forcément un lien sans '?' donc il n'y a pas de problème avec les référenceur!
tant qu'il y a au moins une page s'en '?'! c'est dans la poche.

et les référenceur ne refuseront plus!!

ou alor jai vraiment rien compris à la vie

Commentaire de Samiby le 09/04/2004 22:10:43

Sauf si ta première page est une page d'entrée.
Et puis c'est toujours mieux que _tout_ le contenu du site soit référencé, par exemple, pour un site dont tout le contenu est une mine d'information.

Commentaire de Anthomicro le 09/04/2004 22:26:34

Vive les failles de sécurité. Inclure une page dans l'url est la pire des choses à faire !!!

a +

Commentaire de fyav le 09/04/2004 22:35:51

pourquoi ne pas mettre dans ta page des templates en html?

style du genre: tapage.php qui contient un include(entete.php);

et dans entete.php une page en html qui a des balises du style &lt;?mavariable&gt;

ça serait beaucoupe plus simple !

joyeuses paques à tous

Commentaire de Kilco le 09/04/2004 23:06:29

fyav rendort toi!!
c du php de base que tu nous parle là!!
le genre de codage qui sert à rien et pis les visiteurs se retrouverait sur des pages sans sommaire et des trucs comme ca!!!

Anthomicro ca crée aucune faille de sécu!! ca fait pas très joli c'est tout!!!

samiby alor tas cas utiliser des fonctions pour toutes tes pages qui te donne le graphisme du site et avec tes informations tu fait des pages différentes

ex:
function entête(){
//graphisme entête
}
function pagenorm(){
//graphisme page norm
}
function pagenormfin(){
//graphisme page normfin
}
...


page1.php
------------
entête()
pagenorm()
informations
pagenormfin()

Commentaire de Samiby le 10/04/2004 12:01:24

Si tuveux, mais je ne suis pas convaincu.
Après tout, ça à l'air compliqué comme ça, mais concrètement, c'est presque rien.

Pour la 2nde problèmatique, il faut mettre 'define('HERE',strrev(substr(strrev("http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']),strlen(strtok(strrev($_SERVER['SCRIPT_NAME']),"/"))+1)));', et sur tous les lien, il faut mettre "&lt;?= HERE ?&gt;" au début de l'url.

Et pour la 1ere, il faut mettre juste 'inckude(substr("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_UlI'],strlen(HERE."/general.php.")));' pour avoir la page insérée.
C'est vrai qu'au niveau sécurité, c'est pas le top, mais rien ne t'empèche de mettre tous les fichiers qui doivent être inclus dans un dossier spécial, et de l'inclure par 'include("le_dossier_qui_contient_les_pages_a_inclure/".substr("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],strlen(HERE."/general.php.")).".php");' (le ".php" c'est si tu veux que l'extension n'apparraisse pas. Dans ce cas, si l'utilisateur met n'importe quoi, tu peux toujours vérifier que le fichier existe dans le répertoir, et si ce n'est pas le cas, tu inclus une page du style '404, page non trouvée...'.

Commentaire de Samiby le 10/04/2004 12:15:06

Je viens de tester, l'astuce de mettre les fichiers à inclure dans un dossier spécial sécurise l'inclusion. Si l'utilisateur met une url du type 'http://www.phpcs.com/auteurdetail.aspx?ID=198832', la page '404...' sera chargée (même si il enlève 'http://'), et s'il met une adresse du type '../telle_page.ext', 'telle_page.ext' sera chargée à l'adresse : 'http://www.votresite.ext/telle_page.php', de même si il ne met pas '.php', sans passer par le fichier d'inclusion ('la_page_qui_contient_tout.php'), comme s'il mettait directement 'http://www.votresite.ext/telle_page.php';
Ce système est donc assez sécurisé.

Dites-moi si vous voyez une autre faille, c'est toujours utile.

PS:tests faits sur http://www.ichthus-ados.com , qui utilise ce système.

Commentaire de Natim le 06/05/2004 18:53:22

Moi je trouve que c un bon truc !!
La preuve c qu'il est utilisé sur php.net
Enfin !! c pas une preuve
Moi je trouve que c très pratique car on peut accerder directement à la fonction que l'on cherche.
Il n'y a qu'a faire http://www.php.net/echo ou http://www.php.net/break pour connaitre leurs utilités

Enfin !! on est tjs mal compris dans ce monde
Bravo

Commentaire de Samiby le 06/05/2004 19:26:15

Merci Natim.
J'aimerais préciser, à l'attention de tout le monde, que ça peut s'employer  avec un switch.
Le code de Kilco peut devenir :
-------------------------------------------------------
define('HERE',strrev(substr(strrev("http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']),strlen(strtok(strrev($_SERVER['SCRIPT_NAME']),"/"))+1)));
$p = substr("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],strlen(HERE."/general.php."));
switch ($p){
case ("codessources"):
$inclus = "pageainclure.php";
break;
}
include ($inclus);
-------------------------------------------------------

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales