-
On évalue le code suivant :
$kiwi = 'vert';
$fruit = &$kiwi;
$fruit = array();
$fruit['kiwi'] = $kiwi;
Que contient $fruit ?- Infiniment de rien
- Un kiwi.
- du vert !
- La variable n'est pas définie.
A, la simple assignation d'un tableau vide ne supprime pas la référence, il faudrait utiliser unset() avant.
-
Sachant que l'on veut retrouver une portion de texte sous la forme crochet gauche, 2 à 6 caractères alphanumériques ou souligné, crochet droit avec preg_match, quelle expression utiliser :
- "/\[[A-Za-z0-9]{2,6}\]/"
- '`\[\w{2,6}\]`'
- '#\[[A-Z0-9_]{2,6}\]#iA'
- "\`\[\w{2,6}\]\`"
- A et B
- B et D
B, tous les autres masques sont invalides : A. Il manque le souligné; C. L'option "A" force la validation de tout le texte et non pas une portion; D. Les guillemets doubles provoquent l'interprétation des backslash et les crochets ne sont plus échappés pour preg_match().
-
Soit query() un fonction faisant une requête SQL et escape() une fonction effectuant un échappement des caractères potentiellement dangereux. Quelle requête est sécurisée de manière optimale ?
- query('SELECT * FROM `table` WHERE champ1='.$a.' AND champ2='.$b);
- query('SELECT * FROM `table` WHERE champ1='.escape($a).' AND champ2='.escape($b));
- query(sprintf('SELECT * FROM `table` WHERE champ1="%s" AND champ2="%d"', escape($a), escape($b));
- query(escape('SELECT * FROM `table` WHERE champ1='.$a.' AND champ2='.$b));
- query(sprintf('SELECT * FROM `table` WHERE champ1="%s" AND champ2="%d"', escape($a), $b);
E, les autres requêtes ne sont pas optimales: A. Il n'y a aucun échappement; B. Les variables à insérer sont bien échappées mais elle ne sont pas entourées de guillemets; C. Il est inutile d'échapper la 2eme variable, en effet %d force son interprétation comme un nombre; D. L'échappement de toute la requête la rend totalement inutile
-
On interprète le code suivant:
$a = 'ki' || 'wi';
$b = 'ki' or 'wi';
Que donne var_dump($a, $b); ?- bool(true) bool(true)
- string(2) "ki" bool(true).
- bool(true) string(2) "ki".
- 1 1.
- ki wi
C, l'opérateur "||" ayant une précédence supérieure à "=" et "or" une précédence inférieure on peut lire le code ainsi:
$a = ('ki' || 'wi');
($b = 'ki') or 'wi'; -
En utilisant la fonction header() de php afin d'envoyer un code HTTP 404, puis exit(), qu'est-ce qui est affiché (aucun envoi n'a encore été fait au client) ?
- Une page blanche avec un code html minimaliste "HTTP/1.1 404 Not Found".
- Une erreur PHP.
- La page d'erreur 404 par défaut de mon site ou de mon CMS/Blog.
- Une page blanche ou la page type 404 intégrée au navigateur.
Le header HTTP est bien envoyé mais il n'y a aucun ajout de contenu par le serveur, ce qui ne donne aucune indication au navigateur hormis le code retour HTTP. Celui-ci est donc libre de ne rien afficher (par exemple Firefox) ou de remplacer le tout par une page 404 par défaut qui oriente l'internaute (par exemple Internet Explorer).
-
Ma page index.php contient le code suivant :
$a = 'a'.file_exists(__FILE__);
$a1 = 'wiki';
$a2 = 'kiwi';
echo ${$a};
Qu'est-ce qui s'affiche si on y accède ?- Une page blanche.
- kiwi.
- wiki
- Une erreur PHP.
- Aucune des solutions précédentes.
C, $a contient 'a1', donc ${$a} correspond à ${a1} soit 'wiki'
-
Quel est l'effet de l'utilisation de la structure return(); dans un fichier inclus (sans être dans une fonction) ?
- Retour au script parent sans exécuter la suite du fichier.
- Une erreur PHP.
- Arrêt du script à la manière de exit().
- Aucun, il est ignoré.
- Cela dépend s'il a été inclus avec require() ou include().
A, et si un paramètre est ajouté il peut être récupérer comme retour de include();
-
Que donne le code suivant en PHP5 ?
$b = false;
$a = unset($b);
var_dump($a);- NULL
- Une erreur PHP.
- bool(true)
- bool(false)
- ressource(#)
B, unset() n'a aucune valeur de retour depuis PHP4, tenter d'utiliser le retour provoque donc une erreur d'analyse.
-
PHP possède deux analyseurs XML, quelle est leur principale différence ?
- Il n'y a qu'un analyseur XML
- L'un commence par la fin du fichier, l'autre par le début
- L'un ignore les erreurs, l'autre arrête l'analyse
- L'un nécessite une DTD pour travailler, l'autre pas
- L'un charge toute la chaine en mémoire, l'autre travail sur un flux
E, il est possible d'utiliser simpleXML ou les fonctions xml. SimpleXML charge l'intégralité de la chaine en mémoire et construit l'arborescence. SAX (le moteur utilisé par les fonctions xml), lui lit la chaine par petits morceaux (flux).
-
Laquelle de ces affirmations concernant PHP6 est fausse ?
- Le type string est destiné à disparaître
- La syntaxe "goto label" sera utilisable.
- Une classe fille pourra avoir plusieurs classes mères.
- On pourra utiliser: foreach($a as $key => list($value1, $value2)).
- Les espaces de nom feront leur apparition.
- Les directives magic_quotes_gpc et register_global disparaîtront.
Une classe fille ne pourra pas avoir plusieurs classes mères. Toutes les autres affirmations sont justes (le type "string" deviendra "unicode").
Résultats du Quiz PHP difficile (bis)
Score 0/10
Le verdict de Bernard Minet

As-tu bien compris le principe de cocher les cases ?