Quel est le nombre maximum de clés pour un tableau en php
Je suis en train d'écrire un script php où j'appelle
$lines = file('base_list.txt');
de briser un fichier dans un tableau. Le fichier a plus de 100 000 lignes, ce qui devrait être de 100 000 éléments dans le tableau, mais lorsque je lance le
print_r($lines);
exit;
le tableau ne contient que 7280 éléments.
Donc je suis curieux, WTF? Est-il une limite sur le montant des clés d'un tableau peut avoir? Je suis en cours d'exécution du présent localement sur un dual-core 2.0 Ghz avec 2 go de RAM (Vista & IIS si); donc je suis un peu confus comment un fichier de 4 mo de jeter des résultats de ce genre.
Edit:
J'ai probablement dû mentionné que j'avais déjà mis memory_limit à 512 MO en php.ini ainsi.
- Si vous voulez vérifier le nombre d'éléments dans le tableau avec le comte, est-il aussi seul rapport 7280?
- (connexe), tables de hachage
Vous devez vous connecter pour publier un commentaire.
Darryl Hein,
Ouais, il n'y a rien dans les journaux d'erreur. J'ai même augmenté les rapports d'erreur et toujours rien de pertinent à print_r().
En réponse à Jay:
J'ai couru
et j'obtiens un résultat de 105,546 mais encore print_r() affiche uniquement les 7280.
La prise de Rob Walker est un conseil, j'en boucle sur tous les éléments du tableau, et en fait elle contenait tous les résultats. Cela me mène à croire que le problème est avec print_r() elle-même, au lieu d'une limite à la taille du tableau.
Une autre chose étrange est que je l'ai essayé sur un de mes REHL serveurs et le résultat a été comme il se doit. Maintenant, je ne veux pas blâmer ceci sur Windows/IIS, mais là vous allez.
Avec ce qui précède à l'esprit, je pense que cette question devrait être ré-intitulé comme il n'est plus pertinent pour les tableaux, mais print_r.
Edit: Comme l'a dit Rob, si votre application est en cours d'exécution hors de la mémoire, les chances sont qu'il n'a même pas le
print_r
ligne. C'est un peu mon intuition, mais si il est d'un problème de mémoire, les éléments suivants pourraient vous aider.Prendre un coup d'oeil dans le php.fichier ini pour cette ligne, et peut-être l'augmenter de 16 ans ou plus.
Si vous n'avez pas accès au php.ini (par exemple, si ce qui se passait sur un serveur partagé), vous pouvez la fixer avec un
.htaccess
fichier comme ceciApparemment, certains hôtes ne vous permettra pas de le faire si.
Est-il possible qu'il y est une limite inhérente à la sortie de print_r. Je vous suggère de regarder pour la première et de la dernière ligne dans le fichier pour voir s'ils sont dans le tableau. Si vous ont été frapper une limite de mémoire de l'insertion dans le tableau que vous ne serais jamais arrivée à le print_r ligne.
Deux suggestions:
Compter le nombre d'éléments dans le tableau et voir si oui ou non le tableau est le nombre correct d'entrées (donc d'éliminer ou d'identifier des
print_r()
comme le coupable)Vérifier l'entrée... une chance que les fins de ligne dans le fichier sont à l'origine du problème? Par exemple, il est un mélange de différents types de fins de ligne? Voir la page de manuel de
file()
et de la note sur leauto_detect_line_endings
paramètre, mais il est peu probable que ce soit lié à mac les fins de ligne.Je crois qu'il est basé sur la quantité de mémoire disponible est défini dans le php.fichier ini.
chaque fois ive exécuter de mémoire en PHP, j'ai reçu un message d'erreur indiquant que fait. Donc, je voudrais aussi dire que si vous êtes à court de mémoire, alors le script n'arrivait pas à la
print_r()
essayez d'activer
auto_detect_line_endings
en php.ini ou en utilisantini_set('auto_detect_line_endings', 1)
. Il peut y avoir quelques fins de ligne que windows ne veut pas comprendre & cette option ini pourrait aider. plus d'infos sur cette option ini peut être trouvé iciVous devez utiliser
count
pour compter le nombre d'éléments dans un tableau, pasprint_r
. Que faire si la sortie de ce grand tableau a été abandonnée en raison de délais d'attente ou autre chose? Ou certains bug/feature dansprint_r
?PHP
print_r
fonction a des limites. Cependant, même si vous n'avez pas "voir" le tableau d'ensemble imprimé, tout est là. J'ai eu du mal avec ce même problème lors de l'impression des objets de données volumineux.Il rend le débogage difficile, si vous devez voir le tableau d'ensemble, vous pouvez créer une boucle pour imprimer toutes les lignes.
Qui devrait vous permettre de voir toutes les lignes sans limitation.
Je vais être d'accord avec Cory. Je suis penser que votre PHP est probablement configuré par défaut de mémoire de 8 MO, ce qui 4 MO x 2 est déjà plus. La raison pour le x2 est parce que vous devez charger le fichier, puis de créer le tableau vous devez avoir le fichier en mémoire à nouveau. Je suis juste deviner, mais ce serait plus logique.
Êtes-vous sûr que PHP n'est pas l'enregistrement d'une erreur?
Si vous êtes à la sortie de quelque chose comme Internet Explorer, vous voulez vous assurer qu'il peut afficher toutes les informations que vous êtes en essayant de le mettre là. Je sais qu'il y a une limite à une page html, mais je ne suis pas sûr de ce qu'il est.