| auteur : Cyberzoide | Il est quelquefois judicieux de forcer l'arrêt d'un script PHP en milieu d'exécution pour des raisons diverses : erreur grave survenue, intrusion d'une personne non autorisée... Pour cela il existe la fonction : exit() et son alias die(). Cette fonction ne retourne aucune valeur puisque les instructions qui la suivent ne seront pas exécutées. De plus elle peut prendre un argument optionnel de type chaîne de caractères. Cette chaîne sera affichée dans la page juste avant l'arrêt.
|
| auteur : Forum PHP |
Pour arrêter l'exécution d'un code pendant un certain temps, il faut utiliser la fonction sleep() qui retarde l'exécution du programme pendant x secondes.
Syntaxe :
Par définition, toute fonction sleep de n'importe quel langage limite une forte consommation du CPU car c'est justement pour libérer le CPU qu'on utilise ce genre de fonction.
|
| auteur : Forum PHP |
Pour alterner les couleurs, il suffit de faire ainsi :
$i = 0;
while(condition)
{
$couleur = ($compteur % 2 == 0) ? "#CCCCCC" : "#FFFFFF";
echo '<tr bgcolor="'.$couleur.'"><td>texte</td></tr>';
$i++;
} |
Ou de la manière suivante
$i = 0;
while(condition)
{
echo '<tr class="ligne'.($i % 2).'"><td>texte</td></tr>';
$i++;
} |
A utiliser après avoir déclarer une feuille de style contenant les classes ligne0, ligne1. Exemple de classe : <style type="css/text">
.ligne0 { background-color : #FF0000; }
.ligne1 { background-color : #CCCCCC; }
<style> |
|
| auteur : Cyberzoide | Il est parfois nécessaire de comparer le temps d'exécution de deux fonctions pour savoir laquelle des deux est la plus rapide afin de ne retenir que le code le plus performant.
Pour calculer avec précision ce temps d'exécution, nous allons déterminer deux dates : une date juste avant le début de l'exécution du code, une autre date juste après. Puis nous calculerons la différence entre ces deux dates.
La fonction microtime() permet de connaître avec précision la date du moment. Cette fonction retourne une chaîne de caractères composée de deux nombres positifs, le permier est un réel, le deuxième un entier, séparés par un espace. Le deuxième est le TIMESTAMP Unix de la date et de l'heure actuelle (Note : un TIMESTAMP est le nombre de secondes écoulées depuis le 1er janvier 1970). Le premier apporte une précision en microsecondes.
Exemple :
Affiche :
0.93578900 1056612625
26/06/2003 09:30:25 |
Cela correspond donc à la date du 26 juin 2003 à 9h et demi et 25 secondes. De plus on peut rajouter 93578900 microsecondes à cette heure là, c'est-à-dire 0.93578900 secondes.
Une telle précision permet de connaître aisément le temps d'exécution sur le serveur d'une simple commande PHP.
On va alors créer une fonction qui détermine un TIMESTAMP Unix qui contient le nombre de micosecondes écoulées depuis le 1er janvier 1970.
function microtimestamp() {
list($msec, $sec) = explode(' ', microtime());
return ((float) $sec + (float) $msec) * 1000000;
} |
Cette fonction doit donc être appelée avant et après le code dont on veut calculer la durée d'exécution. Puis on soustrait les deux résultats pour avoir le nombre de microsecondes écoulées.
Exemple :
$start = microtimestamp();
require('script-a-tester.php');
$end = microtimestamp();
echo $end-$start; |
Et voila, cela affiche le temps d'exécution du script en question.
Pour avoir ce temps en secondes :
$start = microtimestamp();
fonction_a_tester();
$end = microtimestamp();
echo round(($end-$start)*100000); |
|
| auteur : Cyberzoide | C'était possible en PHP3 sous un shell (Unix ou MS-DOS):
On obtenait ainsi un script .php3p (p pour pretokenized). Le but était de cacher le code source et pas d'en rendre l'exécution plus rapide.
Pour l'exécuter en ligne de commande :
Et via Apache, il faut ajouter dans le fichier de configuration /usr/local/apache/conf/httpd.conf la ligne suivante :
AddType application/x-httpd-php3 .php3p |
Mais ceci n'existe plus en PHP4.
Il existe bien des logiciels d'encodage ou de cryptage, mais ils sont payants (ioncube.com, Zend, etc...).
|
| auteur : Cyberzoide | Pour exécuter une commande shell (Unix ou Windows) depuis PHP, existe les fonctions suivantes : shell_exec(), system(), exec()
ainsi que l'opérateur d'exécution ` `.
PHP tente d'exécuter sur le shell du serveur toute commande incluse dans les guillemets obliques (touches ALT + 7) et retourne le résultat de l'exécution qui peut être assigné à une variable de type chaîne de caractères. A noter que cet opérateur est inactif lorsque le safe mode est activé. $list = `ls -l`;
echo "<pre>$list</pre>"; |
La fonction shell_exec() est strictement identique à l'opérateur d'exécution.
La fonction system() exécute une commande et retourne la dernière ligne de résultat sous la forme d'une chaîne de caractères si succès de la commande, sinon retourne le booléen FALSE.
La fonction passthru() est similaire à exec() mais ne retourne rien et affiche le résultat brut.
La fonction escapeshellcmd() permet de traiter une chaîne de caractères contenant une commande afin d'en supprimer tout caractère spécial pouvant tromper le système.
|
| auteur : Yogui |
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 :
À 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] |
|
lien : Tutoriel de réécriture de liens (URL Rewriting), par Guillaume Rossolini
|
| auteur : Cyberzoide | Le fichier de configuration php.ini permet d'interdire l'utilisation de certaines fonctions dans les scripts PHP pour des raisons de sécurité (par exemple, interdire l'utilisation de system(), exec(), et autres...).
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions = |
Cette directive de configuration prend pour valeur une chaîne de caractères délimitée par des doubles quotes. Cette chaîne est composée de la liste des fonctions à interdire, séparées par une virgule.
Exemple :
disable_functions = "system, exec, phpinfo" |
Cette directive n'est pas inactivée par le safe mode.
|
| auteur : Cyberzoide | Le fichier de configuration php.ini permet d'interdire l'utilisation de certaines classes dans les scripts PHP pour des raisons de sécurité. Cette directive de configuration prend pour valeur une chaîne de caractères délimitée par des doubles quotes. Cette chaîne est composée de la liste des classes à interdire, séparées par une virgule.
Exemple : disable_classes = "SQL_user" |
Cette directive n'est pas inactivée par le safe mode.
|
| auteur : Cyberzoide | 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){
if (!eregi("^http://", $url)) {
return FALSE;
}
$details = parse_url($url);
if (!isset($details['port'])) {
$details['port'] = "80";
}
if (!isset($details['path'])) {
$details['path'] = "/";
}
if (!ereg("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+", $details['host'])){
$details['host'] = gethostbyname($details['host']);
}
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";
fputs($sock, $requete);
$str = fgets($sock, 1024);
while(!ereg('^HTTP/1.1 ', $str)){
$str = fgets($sock, 1024);
}
fclose($sock);
list($http, $str, $texte) = explode(" ", $str, 3);
return array($str, $reponse[$str]);
}
return FALSE;
} |
|
| auteurs : Forum PHP, Kerod |
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
Exemple :
echo $_SERVER['PHP_SELF']; |
-
$_SERVER['SCRIPT_NAME'] : qui contient le nom du
script courant. Cela sert lorsque les pages doivent
s'appeler elles-mêmes.
Exemple :
echo $_SERVER['SCRIPT_NAME']; |
-
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)
Exemple :
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
Exemple :
echo $_SERVER['SERVER_NAME'];
echo $_SERVER['REQUEST_URI']; |
On peut également le faire avec le code suivant :
echo 'http://' . $_SERVER['SERVER_ADDR'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI']; |
|
| auteur : Cyberzoide | Un cookie est un petit fichier texte placé dans l'ordinateur de l'internaute à la demande du serveur lors de la visite d'une page. Ce fichier permet de stocker un petit nombre d'informations, comme un mot de passe, le nombre de visites, etc.
A utiliser avec parcimonie, car un internaute peut les supprimer à la main ou configuer son navigateur pour les refuser.
AVERTISSEMENT : Les cookies peuvent être considérés par certaines personnes comme une violation de leur vie privée. La CNIL (Commission Nationale de l'Informatique et des Libertés, France) recommande aux webmasters qui ont recours aux cookies de le signaler très clairement sur leur page d'accueil.
Ainsi, il est souvent préférable d'utiliser les sessions à la place des cookies.
Un cookie peut être envoyé depuis un script PHP avec la fonction setCookie(). Cette fonction doit être utilisée avant tout envoi d'en-tête HTTP au navigateur (il ne faut rien afficher avant d'utiliser cette fonction).
1. Création de cookie
Cette fonction prend pour paramètres :
- $name : le nom du cookie (cette chaîne de caractères ne doit contenir ni virgule, ni espace, ni les deux points(:))
- $value : la valeur du cookie
- $expires : la date d'expiration du cookie au format timestamp Unix (c'est-à-dire le nombre de secondes écoulées depuis le 1er janvier 1970), s'il n'est pas spécifié, le cookie sera supprimé lors de la fermeture du navigateur
- $path : le répertoire du site web pour lequel le cookie est valide (les sous-répertoires sont acceptés) : par défaut le répertoire actuel
- $domain : le nom de domaine pour lequel le cookie est valide
- $secure : indique (0 ou 1) si le cookie doit être transmis via une connexion sécurisée par le protocole HTTPS
Tous les paramètres sont optionnels sauf $name.
Exemple :
<?php
setcookie("Visites", "1", time()+24*60*60, "/", "monsite.fr", 0);
?> |
Cet exemple envoie le cookie nommé Visites de valeur 1, de date d'expiration : le jour suivant (aujourd'hui + 24 heures). Il est valide dans tout le site web (c'est-à-dire depuis la racine / du site) pour le domaine monsite.fr. Il ne requiert pas de connexion sécurisée par HTTPS.
2. Lecture de cookie
La puissance du PHP fait qu'il n'est pas nécéssaire d'aller chercher quoi que ce soit : PHP le fait tout seul automatiquement. Tous les cookies valides pour le domaine et le répertoire du script PHP en cours vont être mis en mémoire. Ainsi vont être créées des variables portant le nom des cookies et valant leur valeurs respectives. Les tableaux $HTTP_COOKIE_VARS (obsolète) et $_COOKIE (depuis PHP 4.1.0) contiennent la liste des cookies disponibles.
Exemple :
<?php
echo $Visites;
echo $HTTP_COOKIE_VARS['Visites'];
echo $_COOKIE['Visites'];
?> |
3. Suppression de cookie
Pour supprimer un cookie, c'est très simple, il suffit de le recréer à l'identique mais sans valeur et avec une date d'expiration dépassée.
Exemple :
<?php
setcookie("Visites", "", time()-100, "/", "monsite.fr", 0);
?> |
|
| auteur : Alexandre_T | Le code suivant vous permet de récupérer facilement les variables sous forme de tableau et constitue également un débuggueur.
echo '<TABLE BORDER=0 CELLPADDING=3 CELLSPACING=1 WIDTH=600 BGCOLOR="#000000" ALIGN="CENTER">';
echo '<tr bgcolor="#9999CC"><th colspan="2">Variables de session</th></tr>';
if (isset($HTTP_SESSION_VARS))
foreach ($HTTP_SESSION_VARS as $key=>$value)
{
if (is_array($value))
{
echo "<tr bgcolor=\"#CCCCCC\"><td nowrap bgcolor=\"#CCCCFF\">$key</td><td>";
foreach ($value as $inckey=>$incval)
echo "[$inckey]=>$incval<br />";
echo '</td></tr>';
}
else
echo "<tr bgcolor=\"#CCCCCC\"><td nowrap bgcolor=\"#CCCCFF\">$key</td><td>$value</td></tr>";
}
echo '<tr bgcolor="#9999CC"><th colspan="2">Variables passées en URL</th></tr>';
if (isset($HTTP_GET_VARS))
foreach ($HTTP_GET_VARS as $key=>$value)
{
echo "<tr bgcolor=\"#CCCCCC\"><td nowrap bgcolor=\"#CCCCFF\">$key</td><td>$value</td></tr>";
}
echo '<tr bgcolor="#9999CC"><th colspan="2">Variables passées par formulaire</th></tr>';
if (isset($HTTP_POST_VARS))
foreach ($HTTP_POST_VARS as $key=>$value)
{
if (is_array($value))
{
echo "<tr bgcolor=\"#CCCCCC\"><td nowrap bgcolor=\"#CCCCFF\">$key</td><td>";
foreach ($value as $inckey=>$incval)
echo "[$inckey]=>$incval<br />";
echo '</td></tr>';
}
else
echo "<tr bgcolor=\"#CCCCCC\"><td nowrap bgcolor=\"#CCCCFF\">$key</td><td>$value</td></tr>";
}
echo '</table>'; |
|
| auteur : Nonothehobbit | La nouvelle version de php est configurée par défaut pour afficher toutes les erreurs (même les "notices" (avertissement)) et avec le paramètre "register_globals" à off.
En ce qui concerne register_globals, cela signifie que vous ne pouvez plus accéder directement aux variables de session, postées par formulaire ou même venant de la barre d'adresse. Il vous faudra passer par des tableaux "superglobaux". Voici les différent tableaux :
Pour les sessions : $_SESSION['ma_variable'] au lieu de $ma_variable
Pour la barre d'adresse : $_GET['ma_variable'] au lieu de $ma_variable
Pour les variable postées par formulaire : $_POST['ma_variable'] au lieu de $ma_variable
Pour les cookies : $_COOKIE['ma_variable'] au lieu de $ma_variable
Pour les fichiers envoyés par formulaire : $_FILES['ma_variable'] au lieu de $ma_variable
Tableau regroupant toutes les données envoyées (barre d'adresse, formulaire et cookie) : $_REQUEST['ma_variable'] au lieu de $ma_variable
Les informations de serveur : $_SERVER['ma_variable'] au lieu de $ma_variable
Les informations d'environnement : $_ENV['ma_variable'] au lieu de $ma_variable
Pour l'affichage des "notices", il est conseillé de le laisser, car il vous informe des trous de sécurité de votre code comme les variable non déclarées ou les index de tableau non définis.
Par exemple pour tester l'existence d'une variable, utiliser if(isset($variable)) plutèt que if($variable) ou if(!empty($variable)).
De même, mettez des guillemets ou apostrophes dans les index non numériques des tableaux.
Ex : $tab["index"] à la place de $tab[index]
Voilà, je rappelle qu'il faut laisser ces paramètres tels quels sous peine d'avoir un code peu sécurisé et donc plus facilement vulnérable. Même si l'application n'est pas destinée au grand public (sur le web), il ne coûte rien de prendre l'habitude de programmer "propre" pour éviter les problèmes à venir.
|
lien : Les tableaux superglobaux
|
| auteur : khayyam90 | 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
par Listen [IP de la machine]:80 |
puis redémarrez le serveur.
|
| auteur : BiD0uille | Il n'est pas possible pour des raisons évidentes de sécurité de faire ce genre d'opération. PHP s'exécute côté serveur et rien ne peut être tenté côte client sans son accord.
|
| auteur : BiD0uille | Il n'est pas possible pour des raisons évidentes de sécurité de faire ce genre d'opération. PHP s'exécute côté serveur et rien ne peut être tenté côte client sans son accord.
|
| auteur : BiD0uille | Il n'est pas possible pour des raisons évidentes de sécurité de faire ce genre d'opération. PHP s'exécute côté serveur et rien ne peut être tenté côté client sans son accord.
|
| auteur : Kerod | Pour générer un identifiant unique et aléatoire, il faut utiliser la fonction uniqid() qui retourne un identifiant préfixé unique, basé sur l'heure courante, en micro-secondes. Exemple : |
| auteur : Cyberzoide |
PHP
fournit de nombreuses fonctions d'affichage du contenu de
fichier, variables, tableau... qui malheureusement affichent
directement à l'écran le contenu utile. Or dans certains cas,
il serait très utile de pouvoir récupérer l'information dans
une variable.
Pour cela, il reste à rediriger le
flux de sortie standard
vers un buffer
que l'on pourra vider dans une variable de
type
String.
PHP offre les moyens d'une telle redirection :
Exemple :
|
| auteur : Forum PHP | 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'): <?php
ini_set('include_path', '.' . PATH_SEPARATOR . dirname(__FILE__) . '/classes');
?> |
|
lien : Comment définir le répertoire qui contient les fichiers à inclure ?
|
| auteur : Sergejack |
Cela peut-être fait suite à la soumission d'un formulaire.
Nous définissons donc un formulaire tout en rajoutant la
partie qui sera activée en cas de désactivation du
Javascript du côté navigateur.
Page de soumission du formulaire | <form method="post" action="page2.php">
[...]
<noscript>
<input type="hidden" name="sansJS" value="1">
</noscript>
</form> |
Puis dans la page2.php, on rajoute le test suivant :
if (array_key_exists("sansJS",$_POST))
{
$javaScript = FALSE;
}
else
{
$javaScript = TRUE;
} |
Remarque : Ce script ne prend pas immédiatement en compte la
présence ou non du javascript, une première soumission est
indispensable.
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2003
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|