Cette section regroupe plusieurs erreurs que vous pouvez rencontrer
lors de l'écriture de vos scripts PHP.
- 1.
J'aimerais écrire un script PHP générique qui pourrait traiter les
données provenant de tout formulaire. Comment savoir quelles variables
de la méthode POST sont disponibles ?
- 2.
Il faut que je convertisse tous les guillemets simples (')
en un anti-slash suivi d'un guillemet simple (\'). Comment le faire
avec une expression regulière ? J'aimerais aussi convertir " en " et
\ en \.
- 3.
Tous mes " se transforment en " et mes ' en \', comment me débarrasser
de tous ces anti-slashs ? Comment et pourquoi sont-ils apparus ?
- 4.
Quand je fais ce qui suit, l'affichage se fait dans le mauvais ordre :
<?php function mafonction($argument) { echo $argument + 10; } $variable = 10; echo "mafonction($variable) = " . mafonction($variable); ?>
|
que se passe-t-il ?
- 5.
Hey, où sont mes nouvelles lignes ?
<pre> <?php echo "Ceci est ma première ligne."; ?> <?php echo "Celle-ci devrait s'afficher en dessous de la première."; ?> </pre>
|
- 6.
J'obtiens le message 'Warning: Cannot send session cookie - headers already
sent...' ou 'Cannot add header information - headers already sent...'.
- 7.
J'ai besoin d'accèder à des informations dans l'en-tête de requête
directement. Comment puis-je le faire ?
- 8.
Quand j'essaye d'utiliser l'identification avec IIS j'obtiens
'No Input file specified'.
- 9.
Windows: Je ne peux pas accéder aux fichiers partagés sur un autre ordinateur
utilisant IIS
- 10.
Mon script PHP fonctionne avec IE et Lynx, mais avec Netscape une
portion de ce qui devrait s'afficher manque. Quand j'affiche la source
HTML de la page, je vois le contenu avec IE mais pas avec Netscape.
- 11.
Comment mélanger XML et PHP ? PHP se plaint de mes balises <?xml !
- 12.
Comment utiliser PHP avec FrontPage ou d'autres éditeurs HTML qui
insistent pour mettre mon code ailleurs ?
- 13.
Où puis-je trouver une liste complète des variables pré-définies que je
peux utiliser dans mes scripts PHP ?
- 14.
Comment puis-je générer des fichiers PDF sans utiliser les bibliothèques
non libres ClibPDF et
PDFLib ? J'aimerais une façon gratuite
et qui ne requière pas de bibliothèques PDF externes.
- 15.
J'essaye d'accéder à une des variables standard CGI (comme
$DOCUMENT_ROOT ou
$HTTP_REFERER) dans une fonction écrite par moi-même,
et il semblerait qu'elle ne soit pas définie. Que se passe-t-il ?
- 16.
Quelques directives PHP peuvent également prendre des valeurs d'octets
sténographiées contraitement aux valeurs d'octets uniquement entières.
Quelles sont toutes les options d'octets sténografiées disponible ?
1.
J'aimerais écrire un script PHP générique qui pourrait traiter les
données provenant de tout formulaire. Comment savoir quelles variables
de la méthode POST sont disponibles ?
PHP fournit plusieurs
variables pré-définies, comme la super globale
$_POST. Vous puvez boucler sur $_POST
puisque c'est un tableau associatif de toutes les valeurs POSTées.
Par exemple, bouclons dessus simplement avec
foreach, vérifions les valeurs vides et affichons les.
<?php $empty = $post = array(); foreach ($_POST as $nomvar => $valeurvar) { if (empty($varvalue)) { $empty[$nomvar] = $valeurvar; } else { $post[$nomvar] = $valeurvar; } }
echo '<pre>'; if (empty($empty)) { print "Aucune valeur POSTée n'est vide, postées :\n"; var_dump($post); } else { print "Nous avons " . count($empty) . " valeurs vides\n"; print "Postées :\n"; var_dump($post); print "Vides :\n"; var_dump($empty); exit; } echo '</pre>'; ?>
|
Superglobales : disponiblité : Depuis PHP 4.1.0, les tableaux superglobaux tels que
$_GET, $_POST et
$_SERVER, etc. sont disponibles. Pour plus
d'informations, lisez la section superglobals
2.
Il faut que je convertisse tous les guillemets simples (')
en un anti-slash suivi d'un guillemet simple (\'). Comment le faire
avec une expression regulière ? J'aimerais aussi convertir " en " et
\ en \.
3.
Tous mes " se transforment en " et mes ' en \', comment me débarrasser
de tous ces anti-slashs ? Comment et pourquoi sont-ils apparus ?
La fonction PHP stripslashes() supprimera ces
anti-slashs de votre chaîne de caractères. La plupart du temps, ils
appraissent car la directive PHP
magic_quotes_gpc est activée.
Note concernant la directive : magic_quotes_gpc : La
directive PHP magic_quotes_gpc est par défaut à
on. En bref, elle applique la fonction
addslashes() sur toutes vos données issues de GET, POST
et COOKIE. Vous pouvez utiliser la fonction stripslashes()
pour supprimer cet effet.
4.
Quand je fais ce qui suit, l'affichage se fait dans le mauvais ordre :
<?php function mafonction($argument) { echo $argument + 10; } $variable = 10; echo "mafonction($variable) = " . mafonction($variable); ?>
|
que se passe-t-il ?
Pour pouvoir utiliser le résultat de votre fonction dans une expression
(comme le concaténer avec une chaîne comme dans cet exemple), vous devez
retourner la valeur avec return(), et non pas
l'afficher avec echo().
5.
Hey, où sont mes nouvelles lignes ?
<pre> <?php echo "Ceci est ma première ligne."; ?> <?php echo "Celle-ci devrait s'afficher en dessous de la première."; ?> </pre>
|
En PHP, la fin d'un bloc de code est soit "?>" ou
"?>\n" (où \n signifie une nouvelle ligne). Donc dans l'exemple plus
haut, les phrases affichées le seront sur une seule ligne, car PHP
oublie les nouvelles lignes après la fin du bloc. Cela signifie que vous
devez insérer une nouvelle ligne de plus après chaque bloc de code PHP
pour la lui faire afficher.
Pourquoi PHP fait-il cela ? Car lors du formatage du HTML, cela
vous simplifie la vie car vous ne voulez pas de cette nouvelle ligne,
mais vous devez créer de très longues lignes ou rendre la source brute
de la page illisible pour arriver à cet effet.
6.
J'obtiens le message 'Warning: Cannot send session cookie - headers already
sent...' ou 'Cannot add header information - headers already sent...'.
7.
J'ai besoin d'accèder à des informations dans l'en-tête de requête
directement. Comment puis-je le faire ?
8.
Quand j'essaye d'utiliser l'identification avec IIS j'obtiens
'No Input file specified'.
Le modèle sécuritaire de IIS est en faute. C'est un problème commun à
tous les programmes CGI fonctionnant avec IIS. Une alternative est de
créer un fichier HTML (non exécuté par PHP) comme page d'entrée dans
le dossier où il faut s'identifier. Utilisez alors une balise META
pour rediriger vers la page PHP, ou encore proposez un lien vers
celle-ci. PHP reconnaîtra alors l'identification correctement. Avec
le module ISAPI, cela n'est pas un problème. Cela ne devrait pas non
plus affecter d'autres serveurs NT. Pour plus d'informations, voyez :
http://support.microsoft.com/kb/q160422/ et la section du manuel
concernant l'identification HTTP.
9.
Windows: Je ne peux pas accéder aux fichiers partagés sur un autre ordinateur
utilisant IIS
Vous devez modifier le service Go to Internet Information
Services. Localisez votre fichier PHP et éditez ces propriétés.
Placez-vous sur l'onglet File Security, Edit -<
Anonymous access and authentication control.
Vous pouvez résoudre ce souci soit en décochant la case Anonymous
Access et en laissant la case Integrated Window
Authentication coché, soit en cochant la case Anonymous
Access et en éditant l'utilisateur qui ne doit pas avoir les droits d'acces.
10.
Mon script PHP fonctionne avec IE et Lynx, mais avec Netscape une
portion de ce qui devrait s'afficher manque. Quand j'affiche la source
HTML de la page, je vois le contenu avec IE mais pas avec Netscape.
Netscape est plus strict que IE concernant les balises HTML (comme les tables).
Faire valider votre HTML généré par un validateur HTML, comme
validator.w3.org, peut se
révéler utile. Par exemple, une </table> maquante peut provoquer
ce problème.
De plus, IE et Lynx ignorent les NULs () dans le
flux HTML, Netscape non. La meilleure façon de le vérifier est de
compiler la version en ligne de
commande de PHP (aussi connue sous le nom de version CGI) et
d'exécuter vos scrpts à partir de la console. Sous *nix, redirigez la
sortie sûr od -c et cherchez les caractères
. Si vous êtes sous Windows, vous devez trouver un
éditeur ou un autre programme qui vous permettra de visualiser les
fichiers binaires. Lorsque Netscape rencontre un NUL dans un fichier, il
n'affichera la plupart du temps rien dans cette ligne, alors que IE et
Lynx le feront.
11.
Comment mélanger XML et PHP ? PHP se plaint de mes balises <?xml !
Pour inclure <?xml dans votre code PHP, vous devrez désactiver les
short tags en configurant la directive PHP
short_open_tags à
0. Vous ne pouvez pas modifier cette directive avec
ini_set(). Que
short_open_tags soit à on ou off, vous pouvez toujours faire ceci :
<?php echo '<?xml'; ?>. La valeur par
défaut pour cette directive est on.
12.
Comment utiliser PHP avec FrontPage ou d'autres éditeurs HTML qui
insistent pour mettre mon code ailleurs ?
La façon la plus simple est d'activer l'utilisation des balises ASP dans
votre code PHP. Cela vous permettra d'utiliser des délimiteurs de code
à la manière de ASP : <% et %>. Quelques éditeurs HTML populaires
gèrent cela plus habilement. Pour activer les balises ASP, vous devez
configurer la variable asp_tags
de php.ini, ou utiliser la directive Apache appropriée.
13.
Où puis-je trouver une liste complète des variables pré-définies que je
peux utiliser dans mes scripts PHP ?
Lisez la page du manuel qui concerne les
variables pré-définies vu qu'elle présente une liste
partielle des variables pré-définies disponibles dans votre script. Une
liste complète des variables disponibles (et beaucoup d'informations)
peut être vue en appelant la fonction phpinfo().
Lisez la section du manuel traitant des
variables non-issues de
PHP, elle décrit des scénarios communs pour les variables
externes, comme celles issues d'un formulaire HTML, d'un cookie, et de
l'URL.
register_globals : note importante : Depuis PHP 4.2.0, la
valeur par défaut de la directive de configuration PHP register_globals vaut
off. La communauté PHP vous recommande de ne pas dépendre
de cette directive, mais de trouver d'autres moyens pour accéder aux
données, tels que les superglobals.
14.
Comment puis-je générer des fichiers PDF sans utiliser les bibliothèques
non libres ClibPDF et
PDFLib ? J'aimerais une façon gratuite
et qui ne requière pas de bibliothèques PDF externes.
15.
J'essaye d'accéder à une des variables standard CGI (comme
$DOCUMENT_ROOT ou
$HTTP_REFERER) dans une fonction écrite par moi-même,
et il semblerait qu'elle ne soit pas définie. Que se passe-t-il ?
Il est important de réaliser que la directive PHP register_globals affecte aussi les
variables d'environnement et de serveur. Lorsque register_globals = off
(valeur par défaut depuis PHP 4.2.0), $DOCUMENT_ROOT
n'existera pas. A la place, utilisez
$_SERVER['DOCUMENT_ROOT'].
Si register_globals = on alors les variables
$DOCUMENT_ROOT et
$GLOBALS['DOCUMENT_ROOT'] existeront aussi.
Si vous êtes sûrs que register_globals = on et que vous vous demandez
pourquoi $DOCUMENT_ROOT n'est pas disponible à
l'intérieur de votre fonction, c'est parce que elle est comme toute autre
variable et requièrt donc global $DOCUMENT_ROOT dans
le corps de la fonction. Voyez aussi la page du manuel à propos de la
portée des variables. Il
est recommandé de coder avec register_globals = off.
Superglobales : disponiblité : Depuis PHP 4.1.0, les tableaux superglobaux tels que
$_GET, $_POST et
$_SERVER, etc. sont disponibles. Pour plus
d'informations, lisez la section superglobals
16.
Quelques directives PHP peuvent également prendre des valeurs d'octets
sténographiées contraitement aux valeurs d'octets uniquement entières.
Quelles sont toutes les options d'octets sténografiées disponible ?
Les options disponible sont K (pour Kilo octets) et M (pour Méga octets) et
G (pour Giga octets ; disponible depuis PHP 5.1.0), ils sont
insensibles à la casse. Tout autre chose est supposé représenter des octets.
1M équivaut à un Méga octets ou 1048576
octets. 1K équivaut à un Kilo octets ou
1024 octets. Vous ne devriez pas utiliser
ces notations sténografiques en dehors du php.ini, à la place, utilisez
une valeur entière en octets. Lisez la documentation
sur la fonction ini_get() pour un exemple sur la façon
de convertir ces valeurs.
|