FAQ PHP
FAQ PHPConsultez toutes les FAQ
Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021
- 13.1. Présentation de PHP (7)
- 13.2. Installation - Configuration (3)
- 13.3. php.ini (13)
- 13.4. Chemins - URL (5)
- 13.5. Syntaxe (5)
- 13.6. Utiliser la documentation officielle (4)
- Comment mettre en cache des données ?
- Comment générer un identifiant aléatoire et unique ?
- Pourquoi mon application ne fonctionne plus sans erreur avec EasyPHP 1.7 ?
- Peut-on pré-compiler les scripts PHP ?
- Comment alterner la couleur des tr dans un tableau ?
- Peut-on piloter des logiciels ou des périphériques installés chez le client (douchette code-barre, scanner, etc) ?
- Comment récupérer des informations sur la configuration du client (logiciels installés, RAM, place disque...) ?
- Comment rendre mon projet indépendant de la librairie principale (PEAR ou Source) ?
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
typeString.
PHP offre les moyens d'une telle redirection :
- ob_start() redirige la sortie standard vers un buffer interne
- ob_get_contents() retourne le contenu du buffer
- ob_end_clean() vide le buffer et met fin à la redirection
// bufferisation de la sortie standard
ob_start();
print_r($_GET
);
echo "
;
\n
"
;
print_r($_POST
);
$contents
=
ob_get_contents();
ob_end_clean();
// fin buff
Pour générer un identifiant unique, il vous faut uriliser la fucntion uniqid(). Cela créera un identifiant unique de 13 caractères.
Vous pouvez préfixer votre identifiant.
Vous pouvez passer de 13 à 23 caractères.
$id_unique
=
uniqid(NULL,
true);
echo $id_unique
;
//4d6f4f608ff658.68812147
$id_unique
=
uniqid('
mon_id_a_moi
'
,
true);
echo $id_unique
;
//mon_id_a_moi4d6f4f913361c6.01483455
Pour augmenter le degré d'unicité de la question, on peut utiliser les fonctions de hashage MD5 ou SHA1, SHA1 produisant des empreintes plus grandes. On peut aussi utiliser la fonction mt_rand() pour changer la graine utilisée.
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
C'était possible en PHP3 sous un shell (Unix ou MS-DOS):
php -
p monscript.
php3
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 :
php -
e monscript.
php3p
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 cependant des logiciels d'encodage ou de cryptage, mais ils sont payants (ioncube.com, Zend, etc.). L'un de ces programmes est une extension PHP : bcompiler.
Lien : Tutoriels : Protéger son code source PHP avec bcompiler, par Maxime Ohayon
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
++;
}
À utiliser après avoir déclaré 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>
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.
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.
Comment envoyer mes projets sur un autre serveur sans pour autant dépendre de la librairie installée avec PEAR ou manuellement avec la source.
Nous pouvons faire une sorte de sandbox maison (Bac à sable) :
>
symfony project:
freeze [
votre/
repertoire/
symfony]
Sinon vous pouvez avoir recours à la solution manuelle :
1. Duplication des fichiers de librairies
Rendez-vous dans le répertoire ou à été installé Symfony de base : dans le répertoire PEAR si vous avez installé PEAR ou dans le répertoire de la source si avez télécharger la source manuellement.
Ensuite copiez le contenu du répertoire "symfony/lib" vers le répertoire "~monprojet/lib"
2. Configuration d'accès aux librairies
Maintenant que notre répertoire librairie à été placé dans notre projet nous n'aurons plus qu'à modifier l'accès à celle-ci.
Modifiez ensuite le fichier "config/ProjectConfiguration.class.php" comme ci-dessous:
<?php
require_once dirname(__FILE__
).
'/../lib/autoload/sfCoreAutoload.class.php'
;
//...
//...
?>