exec w PHP i wykorzystywanie komend unixowych

1

Często przyłapuję się w PHP , że robię coś takiego:

  • zrzucam jakieś tam dane do plik.txt
  • wywołuję bezpośrednio shella,np. exec('cat plik.txt |egrep -Ev "^$"|egrep "*large*"|sort |uniq > plik2.txt'); , ładuję przetworzone dane do plik2.txt
  • plik2.txt np. ładuję linia po linii w PHP, np.
    foreach(file('plik2.txt') as $line) { echo $line; }
    czy tam np. do arrayów.

w bashu/linuxie wykorzystuję: egrep, cat, head, tail, sort, uniq, sed, awk, cut
(i w sumie tyle, ale te komendy mam opanowane i bardzo szybko mielę coś przy pomocy pipe |)

wiem, że to zachowanie łamie wszelkie konwenanse, że uzależnia efekt od tego czy akurat na serwerze unixowym są komendy dostępne, że wychodzę poza ekosystem PHP, że debuger, że testerzy.... no ale tak po prostu niejednokrotnie jest mi szybciej.

  1. korzystacie z zewnętrznych procesów exec(), shell_exec() w swoim PHP?
    nie mówię cały czas, ale z lenistwa czasami...
  2. jak takie zachowanie w ogóle jest odbierane? raczej ma być "czyste PHP" czy można trochę pomieszać z unixem?

u nas to przechodzi, ale na forach różne już rzeczy o tym wyczytałem i ludzie raczej są do tego negatywnie nastawieni

0

Wszystko zależy od specyfiki problemu, bo jeżeli mam wynajdywać koło na nowo to bym rozważył.
Osobiście takiej sztuczki użyłem raz albo dwa razy, celem obejścia bugów PHP.
Osobiście bym jednak unikał, chociażby dlatego, że php to najczęściej spotykany język na shared hostingach, gdzie takie rzeczy jak exec będą zablokowane.

Swoją drogą czy wiesz, że w PHP nie da się sensownie nasłuchiwać linijka po linijce stdout i stderr jednocześnie? Być może jakimiś hackami efekt jest osiągalny, niemniej mi się nie udało, a wszelkie materiały jakie znalazłem na ten temat były błędne.

0
dzek69 napisał(a):

Wszystko zależy od specyfiki problemu, bo jeżeli mam wynajdywać koło na nowo to bym rozważył.
Osobiście takiej sztuczki użyłem raz albo dwa razy, celem obejścia bugów PHP.
Osobiście bym jednak unikał, chociażby dlatego, że php to najczęściej spotykany język na shared hostingach, gdzie takie rzeczy jak exec będą zablokowane.

Swoją drogą czy wiesz, że w PHP nie da się sensownie nasłuchiwać linijka po linijce stdout i stderr jednocześnie? Być może jakimiś hackami efekt jest osiągalny, niemniej mi się nie udało, a wszelkie materiały jakie znalazłem na ten temat były błędne.

Ok dzięki, czyli kolejne przypuszczenie że lepiej nie opuszczać ekosystemu PHP bo "różnie może być na serwerach". Mnie akurat argument o "shared hostingach" niedotyczy (nie wiem nawet jak to działa), bo albo VPSy albo swoje serwery, albo firmowe - ale zawsze SSH dla unixa, a prawie zawsze dostęp do roota.

Jak to z tym stdout i stderr nie wiem do końca, może sprawdzę dzisiaj, ale wiem że da się normalnie zrzucać do plików wszystko z poziomu shella, a później zczytywać pliki z poziomu PHP (akurat funkcje odczytujące zawartość z plików są bardzo wygodne).

1 użytkowników online, w tym zalogowanych: 0, gości: 1