FAQ PHP
FAQ PHPConsultez toutes les FAQ
Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021
Avec Linux, le caractère à utiliser dans les chemins est le slash (/). Avec Windows, il s'agit de l'anti-slash (\) mais dans un script en PHP il est aussi possible d'utiliser le slash.
Vous pouvez donc utiliser des slash pour que vos scripts fonctionne sous Windows et sous Linux. Par exemple, le code suivant recherchera le fichier "librairie.php" qui se trouve dans le répertoire "inclure" du répertoire courant et ceci quelque soit le système d'exploitation :
<?php
require './inclure/librairie.php'
;
?>
Attention, Linux est sensible à la casse, donc si vous voulez inclure le fichier "librairie.php", vous pouvez mettre "librairie.php", "LIBRAIRIE.PHP" ou "Librairie.PHP" sous Windows mais vous devez absolument mettre "librairie.php" si le code doit fonctionner sous Linux.
En ce qui concerne le chemin que vous définissez pour la directive "include_path", le séparateur n'est pas le même et vous pouvez utiliser la constante PATH_SEPARATOR. Exemple de code pour inclure les fichiers qui sont dans le répertoire "classes" (plus d'informations sur la directive "include_path"):
Lien : Comment définir le répertoire qui contient les fichiers à inclure ?
Une première idée pourrait nous pousser à utiliser le fichier .htaccess pour rediriger l'internaute à l'aide d'une page 404 de notre choix (la page par défaut pour les URIs non valides). Ce script peut récupérer l'adresse que notre internaute a demandée et utiliser un tableau ou une base de données pour déterminer la véritable page à charger. Cependant, cette approche est incorrecte car Apache envoie une erreur HTTP 404 au navigateur, ce qui empêche le référencement correct de la page Web. Par conséquent, aucune page de votre site ne serait référencé par les moteurs de recherche. La véritable solution implique la réécriture de liens. Il faut pouvoir activer la directive "RewriteEngine" de votre fichier .htaccess de manière à y inclure cette première ligne :
RewriteEngine on
À partir de là, vous pouvez utiliser la directive RewriteRule dans ce même fichier, conjointement à des expressions régulières. Imaginons par exemple un site fondé sur des articles, sur le principe de : articles.php?article=X (où X est l'identifiant numérique entier de l'article).
Nous aurions une série d'articles de la sorte :
articles.php?article=1, articles.php?article=43, articles.php?article=99, etc.
Nous désirons utiliser une arborescence virtuelle au lieu de ces paramètres barbares. Nous aimerions quelque chose comme : articles/titre/X/
Voici comment nous pouvons nous y prendre : il suffit d'afficher les liens de la manière souhaitée dans le HTML et, dans le .htaccess, d'ajouter cette ligne :
RewriteRule articles/.*/([0
-9
]+)$ /articles.php?article=$1
[L]
C'est une solution assez complexe, mais elle est détaillée dans le tutoriel de réécriture de liens (URL Rewriting)
Lien : Tutoriel de réécriture de liens (URL Rewriting), par Guillaume Rossolini
On procède en deux étapes :
- vérification syntaxique
- vérification de l'existence de la ressource
La vérification syntaxique consiste à vérifier que le http:// est bien présent, et d'une manière générale que la grammaire normalisée d'écriture des URL est bien respectée.
Ainsi, la fonction parse_url($url) permet d'extraire tous les éléments d'une URL : domaine, protocole, port, chemin, paramètres... afin de les contrôler.
La vérification de l'existence physique du serveur, passe par l'établissement d'une socket vers le serveur avec la fonction fsockopen().
Le script suivant procède à ces vérifications successives :
function checkurl($url
){
// vérification du protocole HTTP
if (!
eregi("
^http://
"
,
$url
)) {
return FALSE;
}
$details
=
parse_url($url
);
// vérification du port 80 lié au protocole HTTP
if (!
isset($details
[
'
port
'
]
)) {
$details
[
'
port
'
]
=
"
80
"
;
}
// vérification du chemin
if (!
isset($details
[
'
path
'
]
)) {
$details
[
'
path
'
]
=
"
/
"
;
}
// vérification de l'adresse du serveur
if (!
ereg("
[0-9]+
\.
[0-9]+
\.
[0-9]+
\.
[0-9]+
"
,
$details
[
'
host
'
]
)){
$details
[
'
host
'
]
=
gethostbyname($details
[
'
host
'
]
);
}
// ouverture d'une connexion vers le serveur
if ($sock
=
fsockopen( $details
[
'
host
'
],
$details
[
'
port
'
],
&
$numero_erreur
,
&
$texte_erreur
)){
$requete
=
"
GET
"
.
$details
[
'
path
'
].
"
HTTP/1.1
\r\n
"
;
$requete
.=
"
Host:
"
.
$details
[
'
host
'
].
"
\r\n\r\n
"
;
// envoie d'une requête HTTP GET
fputs
($sock
,
$requete
);
// réception de la réponse du serveur
$str
=
fgets($sock
,
1024
);
while(!
ereg('
^HTTP/1.1
'
,
$str
)){
$str
=
fgets($sock
,
1024
);
}
// fermeture de la connexion
fclose($sock
);
list($http
,
$str
,
$texte
) =
explode("
"
,
$str
,
3
);
return array($str
,
$reponse
[
$str
]
);
}
return FALSE;
}
Un serveur est configuré par défaut pour fonctionner en local, en écoutant l'adresse 127.0.0.1 (localhost). Donc pour pouvoir y accéder depuis d'autres ordinateurs, il faut le faire écouter l'adresse de la machine sur le réseau. Il s'agit juste d'une ligne à changer dans le fichier de configuration. Stoppez le serveur, modifiez le fichier httpd.conf situé dans le répertoire conf_files et changez la ligne
Listen 127
.0
.0
.1
:80
par
Listen [IP de la machine]:80
puis redémarrez le serveur.
Pour récupérer l'url d'une page en cours d'exécution, on utilise l'une des variables prédéfinies suivantes :
- $_SERVER['PHP_SELF'], qui contient le nom du fichier du script en cours d'exécution, par rapport à la racine Web :
//Dans le script se trouvant à l'adresse http://www.monsite.com/test/test.php
echo $_SERVER
[
'
PHP_SELF
'
];
//Affiche /test/test.php
- $_SERVER['SCRIPT_NAME'], qui contient le nom du script courant. Cela sert lorsque les pages doivent s'appeler elles-mêmes :
//Dans le script se trouvant à l'adresse http://www.monsite.com/test/test.php
echo $_SERVER
[
'
SCRIPT_NAME
'
];
//Affiche /test/test.php
- basename(__FILE__), qui contient uniquement le nom du script courant. (Ce qui est un avantage lorsque l'on souhaite uniquement récupérer le nom du script) :
//Dans le script se trouvant à l'adresse http://www.monsite.com/test/test.php
echo basename(__FILE__);
//Affiche test.php
Pour récupérer l'url complète d'un script, on utilise les
variables prédéfinies $_SERVER['SERVER_NAME'] et
$_SERVER['REQUEST_URI'].
- $_SERVER['SERVER_NAME'] renvoie le nom du serveur hôte qui exécute le script
- $_SERVER['REQUEST_URI'] renvoie tout le reste de l'url y compris les variables transmises par la méthode GET
//Dans le script se trouvant à l'adresse http://www.monsite.com/test/test.php?test=10
echo $_SERVER
[
'
SERVER_NAME
'
];
//Affiche www.monsite.com
echo $_SERVER
[
'
REQUEST_URI
'
];
//Affiche /test/test.php?test=10
On peut également le faire avec le code suivant :
//Affiche l'url complète composée de l'ip, du port et du fichier ainsi que les variables en paramètres
echo '
http://
'
.
$_SERVER
[
'
SERVER_ADDR
'
]
.
'
:
'
.
$_SERVER
[
'
SERVER_PORT
'
]
.
$_SERVER
[
'
REQUEST_URI
'
];