Jump to content

Faila satira nolasīšana un apstrāde ar php


DMG
 Share

Recommended Posts

Sveiki visiem!

 

Man ir nepieciešams kāds padoms sasitībā ar faila satura nolasīšanu un apstrādi ar php. Doma ir tāda, ka vēlos php failos atrast konkrētas funkcijas un ja tādas tiek atrastas tad izvadīt kādu paziņojumu. Šobrīd esmu apstājies pie funkcijas file_get_contents, kura nolasa faila saturu un funkciju preg_match, kura ar regulāro izteiksmi konstatē vai nolasītajā saturā atrodas manis meklētā funkcija. Ar to it kā problēmu nav, taču man ir vēlme iegūt arī informāciju par rindiņu, kurā ir tikusi konstatēta šī funkcija. Un te nu rodas problēma, kuras risinājumu nevaru pagaidām izdomāt. Zinu, ka ar php iespējams lasīt failu rindiņu pa rindiņai un šādi iegūt rindiņas ciparu, taču droši vien nevienam nav noslēpums, ka bieži vien funkcijas mēdz dalīt vairākās rindiņās, kas nozīmēs ka mana regulārā izteiksme īsti nenostrādās. Tāpat es varētu meklēt tikai un vienīgi funkcijas nosaukumu nevis nosaukumu, iekavas un semikolu (piemēram, /dl[\n\r\s\t]*\(.*\)[\n\r\s\t]*;/is), taču tādi īsi vārdi kā dl var parādīties vairākās vietās un nebūt ne sasitībā ar funkciju, bet vienkārši kā kāda vārda sastāvdaļa. Domāju problēma ir skaidra un labprāt dzirdētu kādu padomu, kā to varētu atrisināt, lai varu izvadīt precīzu ziņojumu, ka tajā rindiņā ir tikusi atrasta tāda un tāda funkcija.

Link to comment
Share on other sites

Леший

Ja tādā veidā tu gribi pārbaudīt, vai funkcija eksistē, tad tu to dari nepareizi.

IZmanto php un method_exists. Var arī nečakarēties ar pārbaudēm, un izmantot __call() un __callStatic() maģijas.

Link to comment
Share on other sites

Stop tas jau darbojas gadījumos, ja fails ir iekļauts, bet man doma ir pāraudīt vairākus desmitus failu, kas nav iekļauti pa tiešo. Bez tam ja es tagad kādus 20 failus iekļaušu ar include, tas var izraisīt tikai kļūdu, jo man nav garantijas, kas tajos failos ir uzrakstīts un tiek izsaukts. Man ir tikai nepieciešama manis interesējošā informācija par viņiem. Un man neinteresē vai funkcija eksistē un ir kaut kur definēta. Es jau meklēju funkcijas, kuras ir iebūvētas pašā php. Man tikai interesē zināt vai manis pārbaudītajos failos šīs funkcijas tiek izsauktas un kurā rindiņā. Kaut vai tā pati dl() funkcija, kuru sen kā nevajadzētu lietot. Vēlos zināt vai viņa kādā no pārbaudītajiem failiem tiek lietot vai nē. Es varu protams darbināt katru failu atsevišķi un skatīties vai būs kļūdas paziņojums, bet vēlos izveidot ātrāku veidu kā to izdarīt.

Labots - DMG
Link to comment
Share on other sites

Kā būtu ar kādu paskaidrojumu? Ko man dod komandas izpildīšana, ja vēlos failu pārbaudīt? Jebkurā gadījumā es nevēlētos refrešot lapu līdz beidzot man vairs neizmet kļūdas ziņojumu. Vēlētos, lai man vispār neko neizmet, bet izvada manis meklēto funkciju sarakstu ar rindiņām par visiem failiem. Citādāk, ja izvadīs kļūdas, man nāksies viņas visas izlabot pirms uzzināšo to cik daudz darba tajā ir jāiegulda.

Labots - DMG
Link to comment
Share on other sites

Леший
es nevēlētos refrešot lapu līdz beidzot man vairs neizmet kļūdas ziņojumu. Vēlētos, lai man vispār neko neizmet, bet izvada manis meklēto funkciju sarakstu ar rindiņām par visiem failiem. Citādāk, ja izvadīs kļūdas, man nāksies viņas visas izlabot

Zini, šo izlasīju un sapratu, ka problēma ir daudz nopietnāka.

Uzraksti ar cli vajadzīgu grep rindu, notestē, tad pildi ar exec, saņemsi atbildi, kuru jau varēsi izmantot.

Link to comment
Share on other sites

Hmm ok es saprotu kas ir exec, bet kā tas līmējas kopā ar konkrētā faila pārbaudi, kurš nav iekļūts manā php es gan nesaprotu. Nav īsti sanācis neko ar tām funkcijām darīt. Vari kādu paraugu iedot, kā to visu izmantot, lai saprotu ideju? Bez tam es kaut kā neredzu, kā šī komanda man ļautu iegūt manis interesējošās rindiņas ciparu.

Labots - DMG
Link to comment
Share on other sites

Pēc idejas teksta fails ir liels strings ar \n un \n\r pa vidu katras rindiņas beigās.

1. sastādi masīvu kur ir rindiņas sākuma un beigu pozīcija failā

2. Ja regexp var uzrakstīt tad preg_match_all ar PREG_OFFSET_CAPTURE atgriezīs atgriež masīvu matches ar indeksiem. skat preg_match_all dokumentāciju

3. atrodi masīvā kurā rindiņā ir šis indekss. un manuprāt viss

Link to comment
Share on other sites

O tā funkcija token_get_all tiešām sniedz visu man vajadzīgo informāciju. Pietam uzreizi atkrīt iespēja, ka funkcijas vārds ir kāda teksta sastāvdaļa vai iekļauts komentāros.

Paldies, tagad ir ar ko darboties.

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...