PHP pour effectuer une recherche dans un fichier txt et l'écho de l'ensemble de la ligne
À l'aide de php, je suis en train de créer un script qui va chercher dans un fichier texte et de saisir l'ensemble de la ligne et de l'écho.
J'ai un fichier texte (.txt) intitulé "numorder.txt" et, dans ce fichier texte, il y a plusieurs lignes de données, avec de nouvelles lignes à venir dans toutes les 5 minutes (à l'aide de cron job). Les données ressemble à:
2 aullah1
7 name
12 username
Comment pourrais-je aller sur la création d'un script php qui va chercher les données "aullah1" et prenez ensuite la totalité de la ligne et l'écho? (Une fois fait l'écho, il doit afficher "2 aullah1" (sans guillemets).
Si je n'ai pas expliquer quelque chose clairement et/ou si vous souhaitez m'expliquer plus en détail, s'il vous plaît commentaire.
- “de nouvelles lignes à venir dans toutes les 5 minutes” – Qui sonne comme un grand nombre de données. Peut-être que vous devriez repenser ce que vous faites et utilisez une base de données au lieu de stocker les valeurs. Sinon, php aura de gros problèmes avec l'augmentation de la taille de ce fichier.
- Hey poke, je vous remercie pour votre réponse et votre préoccupation. 😉 Le fichier ne sera pas vraiment trop grand, enfait je pense que pour le moment c'est seulement d'environ 150 lignes. Bien qu'il n'est mise à jour toutes les 5 minutes, il ne peut être que 1 ligne ou jusqu'à 20 lignes à la fois. À certaines occasions, je peut supprimer les lignes dans l'ordre pour réinitialiser les données. La seule raison pour laquelle je l'ai mentionné que les lignes de mise à jour, est de sorte que lors de la recherche dans le fichier texte, je ne reçois pas une réponse, qui est basé sur lignes. Encore une fois, j'apprécie vraiment votre réponse et vous en remercie. 😉
- double possible de script PHP pour saisir l'ensemble de la ligne
- github.com/skfaisal93/AnyWhereInFiles
Vous devez vous connecter pour publier un commentaire.
Et un en PHP, par exemple, plusieurs lignes correspondants seront affichés:
preg_match_all
?m
drapeau et changéimplode("\n", $matches)
àimplode("\n", $matches[0])
. Testé et cela fonctionne maintenant. Essayez à nouveau 🙂^*.
n'est pas valide regex... ce n'est pas une erreur, donc j'ai roulé en arrière de ce changement.Comme ça. Cette approche permet de rechercher un fichiers de toute taille, (grande taille ne tombent pas en panne le script) et sera de retour TOUTES les lignes qui correspondent à la chaîne que vous souhaitez.
Noter la façon
strpos
est utilisé avec!==
opérateur.foreach
boucle de la$matches
et l'écho de ces résultats avec votre style et de choix.if($handle)
peut avoir unelse
avec indiquant que le fichier ne s'ouvre pas correctement. J'aime cette approche mieux. Juste une question de choix.À l'aide de
file()
etstrpos()
:Lors d'un essai sur ce fichier:
Il sorties:
Mise à jour:
Pour afficher le texte si le texte n'est pas trouvé, utilisez quelque chose comme ceci:
Ici, je suis en utilisant le
$found
variable pour savoir si une correspondance a été trouvée.dirait que vous êtes mieux systeming à
system("grep \"$QUERY\"")
depuis que le script ne sera pas très performant de toute façon. Sinon http://php.net/manual/en/function.file.php vous montre comment faire une boucle sur les lignes et vous pouvez utiliser http://php.net/manual/en/function.strstr.php pour trouver des matchs./^.*$pattern.*\$/
expression est la même pour juste/$pattern/
un sens...
bien qu'il serait probablement mieux de lire ligne par ligne avec fopen() et fread() et utiliser strpos()