Tests & Concours


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%


 

[ archives ]