Manuel PHP

Utiliser PHP

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 réguliè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 : <?phpfunction 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 requiert 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 contrairement aux valeurs d'octets uniquement entières. Quelles sont toutes les options d'octets sténographiées disponibles ?
  17. 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 ?

    variables pré-définies, comme la super globale $_POST. Vous pouvez 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.
    1. <?php
    2. $empty = $post = array();  
    3. foreach ($_POST as $nomvar => $valeurvar) { 
    4.    if (empty($varvalue)) { 
    5.       $empty[$nomvar] = $valeurvar; 
    6.    } else { 
    7.       $post[$nomvar] = $valeurvar; 
    8.    }  
    9. }  
    10.  
    11. echo '<pre>';  
    12. if (empty($empty)) { 
    13.    print "Aucune valeur POSTée n'est vide, postées :\n"; 
    14.    var_dump($post);  
    15. } else { 
    16.    print "Nous avons " . count($empty) . " valeurs vides\n"; 
    17.    print "Postées :\n"; var_dump($post); 
    18.    print "Vides :\n"; var_dump($empty); 
    19.    exit;  
    20. }  
    21. echo '</pre>';  
    22. ?> 

    Note: Superglobales : disponibilité 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

    Il faut que je convertisse tous les guillemets simples (') en un anti-slash suivi d'un guillemet simple (\'). Comment le faire avec une expression régulière ? J'aimerais aussi convertir " en \" et \ en \\.

    addslashes() le fera. Voir aussi mysql_escape_string(). Vous pouvez aussi supprimer les anti-slashs avec stripslashes().

    Note: Note concernant la directive : magic_quotes_gpcLa 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.

    Tous mes " se transforment en \" et mes ' en \', comment me débarrasser de tous ces anti-slashs ? Comment et pourquoi sont-ils apparus ?

    stripslashes() supprimera ces anti-slashs de votre chaîne de caractères. La plupart du temps, ils apparaissent car la directive PHP magic_quotes_gpc est activée.

    Note: Note concernant la directive : magic_quotes_gpcLa 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.

    Quand je fais ce qui suit, l'affichage se fait dans le mauvais ordre :

    1. <?php
    2. function mafonction($argument)  
    3. { 
    4.    echo $argument + 10;  
    5. }  
    6. $variable = 10;  
    7. echo "mafonction($variable) =" . mafonction($variable);  
    8. ?> 
    que se passe-t-il ?

    return(), et non pas l'afficher avec echo().

    Hey, où sont mes nouvelles lignes ?

    1. <pre>
    2. <?php echo "Ceci est ma première ligne."; ?>
    3. <?php echo "Celle-ci devrait s'afficher en dessous de la première."; ?>
    4. </pre> 

    header(), setcookie(), et les fonctions de session doivent ajouter des en-têtes au flux de sortie, mais ceux-ci ne peuvent être envoyés qu'avant le reste du contenu. Il ne doit y avoir aucun affichage avant d'utiliser ces fonctions, comme le HTML par exemple. La fonction headers_sent() vérifiera si votre script a déjà envoyé des en-têtes. Voyez aussi les fonctions de bufferisation de sortie.

    J'ai besoin d'accéder à des informations dans l'en-tête de requête directement. Comment puis-je le faire ?

    getallheaders() le fera si vous exécutez PHP en tant que module Apache. Le code suivant vous montrera tous les en-têtes de requête :
    1. <?php
    2. $headers = getallheaders();  
    3. foreach ($headers as $nom => $contenu) { 
    4.    echo "headers[$nom] =$contenu<br />\n";  
    5. }  
    6. ?> 

    Voir aussi apache_lookup_uri(), apache_response_headers() et fsockopen().

    Quand j'essaye d'utiliser l'identification avec IIS j'obtiens 'No Input file specified'.

    » http://support.microsoft.com/kb/q160422/ et la section du manuel concernant l'identification HTTP.

    Windows: Je ne peux pas accéder aux fichiers partagés sur un autre ordinateur utilisant IIS

    » validator.w3.org, peut se révéler utile. Par exemple, une </table> manquante peut provoquer ce problème.

    De plus, IE et Lynx ignorent les NULs (\0) 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 scripts à partir de la console. Sous *nix, redirigez la sortie sur od -c et cherchez les caractères \0. 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.

    Comment mélanger XML et PHP ? PHP se plaint de mes balises <?xml !

    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.

    Comment utiliser PHP avec FrontPage ou d'autres éditeurs HTML qui insistent pour mettre mon code ailleurs ?

    asp_tags de php.ini, ou utiliser la directive Apache appropriée.

    Où puis-je trouver une liste complète des variables pré-définies que je peux utiliser dans mes scripts PHP ?

    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.

    Note: register_globals : note importanteDepuis PHP 4.2.0, la valeur par défaut de la directive de configuration PHP register_globals vaut off et est complètement retirée depuis PHP 6.0.0. 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.

    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 requiert pas de bibliothèques PDF externes.

    » http://www.ros.co.nz/pdf/, » http://www.fpdf.org/, » http://www.gnuvox.com/pdf4php/, et » http://www.potentialtech.com/ppl.php. Il existe aussi le module » Panda.

    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 ?

    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. À 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 requiert 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.

    Note: Superglobales : disponibilité 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

    Quelques directives PHP peuvent également prendre des valeurs d'octets sténographiées contrairement aux valeurs d'octets uniquement entières. Quelles sont toutes les options d'octets sténographiées disponibles ?

    ini_get() pour un exemple sur la façon de convertir ces valeurs.


Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Breizh Blog