Bonjour,

j'utilise une fonction récursive (Permet de générer aléatoirement un nom de fichier, puis vérifie si il existe déjà en BDD):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function random_name($fileName) {
 
    // Récupère l'extention du fichier
    $pos = strrpos($fileName, '.');
    $ext = strtolower(substr($fileName, $pos));;
 
    // Génère un fileName aléatoire
    $fileName_random = "";
    $len = rand(1,11);
    $str= "abcdefghijklmnopqrstuvwxyz";
    for($i=0;$i<$len;$i++)
    {
        switch(rand(1,2)){
            case 1: $fileName_random.= $str[rand(0,25)];
            case 2: $fileName_random.= rand(0,9);
		}
    }
 
    // Replace l'extention du fichier
    $fichier = $fileName_random.$ext;
 
    // Vérifie si le nom de fichier n'existe pas déjà
    $query = $GLOBALS['db']->prepare("select fileName from image where fileName = :fichier limit 1");
    $query->bindParam(':fichier', $fichier, PDO::PARAM_STR);
    $query->execute();
    $row = $query->fetchAll();
    $query= null;
 
    // return
    if (count($row) > 0){
        return random_name($fileName);
    } else {
        return $fichier;
   }
}
Lorsque je l'utilise, mon navigateur plante :
  • La connexion a été réinitialisée (pour Firefox)
  • Erreur 101 (net::ERR_CONNECTION_RESET) : Erreur inconnue (pour Google Chrome)


J'ai 3800 entrées en BDD, donc la fonction s'arrête bien à un moment.
Si j'enlève la récursivité, le code fonctionne.
Si j'enlève la requête SQL, le code fonctionne.
Voici ma connexion dans mon fichier de config appelé plus haut :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
$dbhost = 'localhost';
$dbuser = 'xxx';
$dbpass = 'xxx';
$dbname = 'xxx';
try{
	$sqlPDO = new PDO('mysql:host='.$dbhost.';dbname='.$dbname, $dbuser, $dbpass);
	$sqlPDO->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
	$sqlPDO->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
} catch(PDOException $e){
	//echo 'Erreur : '.$e->getMessage().'<br /><br />';
	die("Une erreur est survenue, le site est temporairement indisponible");
}
$GLOBALS['db'] = $sqlPDO;
J'ai également tenté de mettre $sqlPDO en paramètre de la fonction récursive, même souci.

Merci de votre aide, j'espère que l'erreur n'est pas trop idiote

Merci

Edit : je souhaiterai ajouter que si vous n'avez pas la réponse, n'hésitez pas à me proposer des tests pour mieux cibler le problème.
Je travail sous WAMP en Local.