Réponses du test de la semaine 29
| Question 1 | |||
|---|---|---|---|
Après ce script, quelle sera la valeur de $tab['valeur'] ?
<?php
define ('TOTO','valeur');
$tab['TOTO'] = 10;
$tab['valeur']*= 2;
?>
|
|||
| Réponses | Solution | Tendance | |
| NULL | 5% | ||
| 20 | 15% | ||
| 10 | |||
| valeur | |||
| 0 | X | 80% | |
| Question 2 | |||
|---|---|---|---|
Quel sera l'affichage de ce script ?
<?php $var = " 10 petits indiens"; $var = $var + 10; echo $var--; ?> |
|||
| Réponses | Solution | Tendance | |
| une erreur fatale | |||
| 10 petits indiens | |||
| 20 | X | 75% | |
| 19 | 25% | ||
| rien | |||
| Question 3 | |||
|---|---|---|---|
Que vaut $var à la fin de ce script ?
<?php
$var = '';
$chaine = 'abcdef';
for ($i = 5; $i > 0; $i = $i -2)
{
$var .= $chaine[$i];
}
?>
|
|||
| Réponses | Solution | Tendance | |
| une erreur fatale | |||
| efcdefabcdef | |||
| fdb | X | 100% | |
| eca | |||
| abcdef | |||
| Question 4 | |||
|---|---|---|---|
Quel sera l'affichage de ce script ?
<?php $a = 10; $b = 20; $c = &$a; $c += $b; $a = $a + 100; echo $a ; ?> |
|||
| Réponses | Solution | Tendance | |
| 10 | |||
| 20 | |||
| 110 | |||
| une erreur fatale | |||
| 130 | X | 100% | |
| Réponse détailée | |||
| Suivons l'éxécution du script pas à pas. $a vaut 10 puis $b vaut 20. $c devient une référence sur $a. On ajoute la valeur de $b à $c. Comme $c est une référence de $a, $c vaut au début 10, auquel on rajoute la valeur de $b , soit 20. Comme $c est une référence sur $a, l'affectation du résultat à $c, affecte aussi la valeur de $a, qui vaut alors 30. Puis on rajoute 100, soit 130 |
|||
| Question 5 | |||
|---|---|---|---|
Quel sera l'affichage lors du premier appel à ce script ?
<?php
$var = 10;
setcookie('var', $var);
$var = $var + 20;
echo $_COOKIE['var'];
?>
|
|||
| Réponses | Solution | Tendance | |
| 10 | 25% | ||
| 30 | |||
| 'var' | |||
| rien n'est affiché | X | 75% | |
| Question 6 | |||
|---|---|---|---|
| Quelle fonction PHP permet d'éviter les attaques par XSS ? | |||
| Réponses | Solution | Tendance | |
| addslashes() | 15% | ||
| xssclean() | |||
| htmlentities() | X | 85% | |
| xslt_free() | |||
| trim() | |||
| Réponse détailée | |||
| La fonction xssclean n'existe pas ! La fonction addslashes a longtemps été considéré comme une solution efficace pour bloquer les attaques de type injection SQL. Non seulement cette fonction ne permet pas de se protéger mais il faut lui préférer par exemple mysqli_real_escape_string, ou même encore utiliser des requêtes préparées. La fonction htmlentities, définit par : string htmlentities ( string string [, int quote_style [, string charset]] ), permet de remplacer tous les caractères par leur équivalent entités html s'il existe. Il faut revenir au principe de base qui est de filtrer vos inputs et d'échapper les outpus. Cette questions vous demandait d'échapper un output. N'oubliais pas d'échapper les guillements simples et/ou doubles, et surtout de préciser le charset utilisé. |
|||
| Question 7 | |||
|---|---|---|---|
Quel sera l'affichage de ce script ?
<?php
class maClasse {
protected $valeur;
function __construct($val)
{
$this->valeur = $val;
}
function affValeur()
{
echo $this->valeur;
}
}
class maClasse2 extends maClasse {
function __construct($val)
{
$this->valeur1 = $val*10;
}
}
$a = new maClasse2(10);
$a->affvaleur();
echo $a->valeur1;
?>
|
|||
| Réponses | Solution | Tendance | |
| 100 | X | 75% | |
| 10100 | |||
| une erreur fatale | 20% | ||
| 10 | 5% | ||
| 10010 | |||
| Question 8 | |||
|---|---|---|---|
| Est il possible de stocker des sessions en base de données ? | |||
| Réponses | Solution | Tendance | |
| non, ce n'est pas possible | |||
| cela dépend du système d'exploitation | 5% | ||
| oui, mais il faut modifier les codes sources de PHP | 5% | ||
| oui, en utilisant l'extension ODBC | |||
| oui, en redéfinissant le gestionnaire de session directement dans son code source | X | 90% | |
| Réponse détailée | |||
| Lorsque qu'un site internet (ou intranet) enregistre de forte charge, il faut utiliser plusieurs serveurs web en frontal pour pouvoir répondre aux nombreuses requêtes http envoyées. Par défaut le gestionnaire de session PHP utilise un fichier. Cela signifie qu'une session commencée sur le serveur 1, ne sera pas disponible sur le serveur 2. Il faut trouver une solution pour partager les sessions entre tous les serverus frontaux. NFS pourrait être utilisé mais pose des problèmes de lock, qui peuvent corrompre les fichiers ou ralentir le site. Une autre solution consiste à stocker les sessions dans une base de données. Il faut donc redéfinir le gestionnaire de session par défaut. Il faut utiliser la fonction session_set_save_handler. Consulter la documentation sur php.net si vous ne l'avez jamais utilisé, et proposer votre gestionnaire à la communauté ! |
|||
| Question 9 | |||
|---|---|---|---|
| Quelle différence y a t'il entre la fonction mysql_connect() et la fonction mysqli_connect() ? | |||
| Réponses | Solution | Tendance | |
| la première permet de se connecter à mysql, la deuxième à mysqli | 5% | ||
| ce sont des alias | |||
| les protocoles de communication avec MySQL sont différents | X | 60% | |
| mysqli_connect() ne permet que de se connecter à MySQL 5 | 20% | ||
| la deuxième permet d'établir des connexions persistantes | 15% | ||
| Question 10 | |||
|---|---|---|---|
Quel sera l'affichage de ce script ?
<?php
$tab = array('cel1' => 20, 1 => 36, 40);
array_rand($tab);
echo $a[0];
?>
|
|||
| Réponses | Solution | Tendance | |
| une valeur aléatoire du tableau $tab | 15% | ||
| 20 | |||
| 36 | |||
| cel1 | |||
| aucune des réponses ci-dessus | X | 85% | |
