2011-11-26 1 views
0

Je rencontre un léger problème de codage. J'ai fait un fichier PHP de restauration de fichier qui permettra à une personne de placer une case à cocher à côté du nom d'un fichier - et puis quand ils cliquent sur le bouton "Restaurer" en bas, il restaurera le fichier en question à partir d'une sauvegarde.Posts de formulaire HTML - Utilisation de cases à cocher avec un attribut de nom long

Malheureusement, il semble y avoir un problème. Le chemin d'accès complet et le nom du fichier se trouvent dans l'attribut "name" de la case à cocher - ainsi, il est transmis au script suivant en tant qu'emplacement et fichier à restaurer.

À titre d'exemple:

<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/" /> 

Voyez combien de temps l'attribut "name" est? Dans de nombreux cas, la restauration fonctionne, mais une fois que l'attribut name est plus long, cela ne fonctionne plus. Dans l'attribut ci-dessus, le champ "name" a une longueur de 63 caractères.

Maintenant, si un autre est essayé:

<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/js/" /> 

ci-dessus attribut "name" est de 67 caractères. Ça ne marche pas.

Sur le script sur lequel les données POST sont postées, j'ai effectué un var_dump ($ _ POST); pour voir ce que la sortie était. Dans le premier cas où l'attribut "name" avait 63 caractères, le var_dump l'affiche. Mais dans le second cas où l'attribut était de 67 caractères, il ne l'affiche pas - et par conséquent le fichier n'est pas restauré.

Y a-t-il un moyen de contourner cette limite de taille d'attribut supposée? J'ai regardé en ligne et vu plusieurs messages où les individus ont dit qu'il n'y avait pas de limite à la longueur de l'attribut "nom" - mais apparemment il y en a un.

Merci!

+0

OK - Je pense avoir découvert mon propre problème ici. PHP est installé avec le module suhosin. Je désactive le module suhosin et il semble fonctionner correctement. Maintenant, j'ai juste besoin de comprendre quel paramètre changer dans le module pour permettre les noms longs. –

+0

Le problème a été résolu. Cause était le module Suhosin en PHP. J'ai dû modifier le suhosin.post.max_name_length de la valeur par défaut 64 et a également dû modifier le suhosin.request.max_varname_length de la valeur par défaut 64. Modification d'un seul d'entre eux n'a pas causé le problème; les deux devaient être modifiés par défaut. –

+0

suhosin.post.max_name_length est ce que vous voulez, je crois. Vous voudrez aussi changer la version "requête" correspondante de cette variable de configuration aussi – Lee

Répondre

0

C'est le durcisseur phos suhosin qui le fait sans aucun doute. Vous pouvez éditer le répertoire de configuration de suhosin ou vous devez adopter une approche différente. Peut-être le moyen le plus simple sans recoder un morceau de votre script pour utiliser aliasing ou stocker un tableau key => value serait de simplement faire le nom de vos entrées "files []" et mettre le chemin vers le fichier comme la valeur de la case à cocher. alors vous pouvez juste faire

foreach($_POST['files'] as $f) { 
//$f is the file path 
} 

Cependant moi je n'aime pas faire des choses comme ça. Id essaye et stocke une clef => tableau de valeur quelque part. Si vous ne voulez pas utiliser une base de données, juste sérialiser un tableau php dans un fichier, alors juste les cases à cocher avec la clé tableau entier pour chaque fichier. Ensuite, sur le script de traitement, vous pouvez simplement obtenir les fichiers du tableau stocké aux index entiers enregistrés

Questions connexes