Problème indéterminé suite upgrade debian ...

Petit nouveau ! | 3 Messages

21 mars 2013, 16:10

Bonjour à tou(te)s,

Je rencontre un problème dans mon code php suite (a priori) à un upgrade de debian lenny vers squeeze (et donc passage à php 5.3.3-7)

Dans un formulaire, je récupère les identifiants de personnes que l'utilisateur peut cocher, pour ensuite générer un tableau excel contenant les emails de ces mêmes personnes (récupérés dans une table via l'identifiant).

Voici ce qu'il se passe :

Tant que l'on coche quelques dizaines de personnes, tout fonctionne. Par contre, lorsqu'on sélectionne plusieurs milliers de personnes, il ne se passe absolument rien. Ma page résultat s'ouvre mais ne contient rien (code source de la page vide) et aucune erreur ne s'affiche.

Dans les logs php, je n'ai que 3 lignes :

Code : Tout sélectionner

[21-Mar-2013 11:46:23] PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/php_xsl.dll' - /usr/lib/php5/20090626+lfs/php_xsl.dll: cann$ [21-Mar-2013 11:46:23] PHP Deprecated: Directive 'register_long_arrays' is deprecated in PHP 5.3 and greater in Unknown on line 0 [21-Mar-2013 11:46:23] PHP Deprecated: Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in Unknown on line 0
Voici l'extrait de mon code php qui pose problème :
if ($_POST['action'] == 'mail'){ // si l'option choisie = envoi de mail

	if(!empty($_POST['corres'])) { // si des correspondants ont été cochés
                $nb = count($_POST['corres']); // on compte les corerspondants
		for ($i = 0; $i < $nb; $i++) {
			$num = $_POST['corres'][$i]; // on récupère l'identifiant de chaque correspondant
			if ($numcorres == '') $numcorres = 'c.num = \''.$num.'\'';
			else $numcorres = $numcorres.' OR c.num = \''.$num.'\''; // on écrit la requête SQL (WHERE)
		}
		if ($nb > 40) include "mail_corres_check.php"; // génération d'un fichier excel
	        else{ ...
Je précise que la variable $_POST['corres'] est issue d'un <input type="checkbox" name="corres[]" id="choix" value="<? echo $data['num'] ?>">

Je précise également encore une fois que ce formulaire fonctionnait parfaitement avant l'upgrade de debian.

Si je fais un echo de $nb, cela fonctionne tant que le nombre de personnes cochées n'est pas trop élevé. Sinon, rien.

J'espère que mon explication est assez claire ...

Merci beaucoup d'avance pour votre aide éventuelle.

Wilfried

Mammouth du PHP | 2278 Messages

21 mars 2013, 19:30

Je serais d'avis d'aller voir:
mail_corres_check.php
Par ailleurs, Squeeze, au moins, en masquant les messages d'erreur, n'aide pas à développer.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 mars 2013, 15:20

Quel était la version de php précédente ?

Il y a une limite sur le valeur fournis par une requête (1000 par défaut) a voir dans le php.ini.


@+
Il en faut peu pour être heureux ......

wheintz
Invité n'ayant pas de compte PHPfrance

22 mars 2013, 17:11

Bonjour,

Merci bien pour vos réponses.

Concernant mail_corres_check.php, cela ne vient pas de lui car le problème arrive même lorsque je commente cette ligne.
En fait, lorsque je coche "trop" de personnes, le script est incapable de m'afficher ne serait-ce qu'un alert() placé juste après le if(!empty($_POST['corres'])) { à la deuxième ligne.

Quant à la version de php précédente, je pense que c'était 5.1.x
Sauriez-vous où est la ligne relative à la limite sur les valeurs fournies par une requête ? S'agit-il de pcre.backtrack_limit (qui est commentée par défaut) ?

Merci encore.

Wilfried

wheintz
Invité n'ayant pas de compte PHPfrance

22 mars 2013, 18:23

Re-bonjour,

Problème finalement résolu en décommentant et modifiant les valeurs des variables post_max_vars et request_max_vars dans le fichier suhosin.ini

Merci pour votre aide,

Wilfried