LINUX.ORG.RU
ФорумTalks

Писать прикладные скрипты на PHP — это извращение?


0

1

Время от времени встречаю такую фигню: кто-то использует локальный веб-сервер с php-cgi для того, чтобы выполнить задачу, которая никак не связана с веб-программированием, например раскидать файлы по директориям, переконвертировать логи в другой формат и тд, а запускает их заходя по URL типа http://localhost/script.php .

Зачем так делать? Это нормально или стоит тем, кто так делает, посоветовать изучить какой-нибудь другой язык кроме PHP?

★★★★★

Последнее исправление: Xenius (всего исправлений: 1)

Зачем так делать? Это нормально или стоит тем, кто так делает, посоветовать изучить какой-нибудь другой язык кроме PHP?

Зачем человеку изучать для решения задачи новый ЯП, если он может решить её быстро на уже изученном?

Napilnik ★★★★★
()
Ответ на: комментарий от ncrmnt

Хотя субъективно bash и прочие стандартные утилиты здесь дадут результат быстрее. Исключение - офтопик с его убогим коммандлайном.

Вот именно в оффтопике коммандная линия проще и функциональнее, а чего она не сможет, проще добиться бинарниками. А в баше понапишут такой лажи, что потом не разобрать что оно творит и как посмотреть промежуточный результат не ломая код. Баш для простых скриптиков, писать на нём сложную логику - извращение. Синтаксис баша заточен под дописывание скрипта прямо во время его выполнения, такое не всегда надо.

Napilnik ★★★★★
()
Ответ на: комментарий от Napilnik

o'rly? я тебе открою секрет - то, что в линуксах решается однострочником на баше за 2 секунды - под виндами решается .net'овской апликухой с гуем, которую писать с нуля минумум час. powershell и cygwin только частично спасают, так как многого нет.

ncrmnt ★★★★★
()
Ответ на: комментарий от stels

Все скрипты пишу на php+bash, запускаю с консоли. PHP очень удобен для мелких скриптиков.

А баш там зачем? И чем PHP лучше нормальных (не заточенных на веб) скриптовых языков для этих самых скриптиков? Пример кода можно сразу?

Xenius ★★★★★
() автор топика
Ответ на: комментарий от ncrmnt

powershell и cygwin только частично спасают, так как многого нет.

А чего конкретно нет — можно несколько примеров? А то я не пробовал на этом писать.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

В смысле что скрипты пишу на баше и пхп а не на обоих сразу. Код показывать стыдно. я знаю что я быдлокодер да и он почти весь специфичен, большая часть обскриптовка всяких умных сетевых железяк.

stels ★★★
()
Ответ на: комментарий от stels

пхп лучше своей простотой, он очень прост.

Чем он прост? Я пробовал на него смотреть, показался сложным по сравнению с Tcl, Lua и Python. Если сравнивать синтаксис.

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

powershell - своя особая атмосфера, про него молчу. А cygwin тормозит на некоторых операциях здорово. Например если make входит в другой каталог, задержка очень ощутимая. Может не быть некоторых утилит под него собрано, а-ля bin2hex, того что не каждый день нужно. Но выбирая между cygwin и powershell, выберу первое не глядя.

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

За две секунды только пустой файл создашь. А потом будешь долго ковыряться по интернетам и справочникам чтобы замутить конструкцию, обычную для компилируемых бинарников, гуй для которых не обязателен.

Napilnik ★★★★★
()
Ответ на: комментарий от ncrmnt

bin2hex

Этой у меня вообще нет, но судя по всему аналог xxd или hexdump

Но выбирая между cygwin и powershell, выберу первое не глядя.

А есть ещё какие-то причины выбрать cygwin кроме того, что ты юниксовый шелл лучше знаешь и что скрипты будут потом работать и в нормальных ОС?

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

За две секунды только пустой файл создашь. А потом будешь долго ковыряться по интернетам и справочникам чтобы замутить конструкцию, обычную для компилируемых бинарников, гуй для которых не обязателен.

Пример задачи?

А две секунды — это гипербола, наверное. Скорее 2 минуты, если логика не совсем тривиальная.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

дело привычки. Для меня написать однострочник вида:

# ls *.JPG| while read line; do convert $line -resize 50% $line.png; rm $line; done

делается моментально, задумываясь и не подсматривая в документацию. И очень облегчает жизнь.

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

ls *.JPG| while read line;

Чем тебя for line in *.JPG не устраивает? К тому же ты забыл кавычки вокруг «$line»

Xenius ★★★★★
() автор топика
Ответ на: комментарий от ncrmnt

а если пробелы в именах файлов?

Вот именно, твой while read и сфелится. А ещё в именах файлов могут быть переводы строки (\n)

Вообще тогда уж можно применить

find . -maxdepth 1 -iname '*.JPG' -exec convert {} -resize 50% {}.png \; -delete 

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 3)
Ответ на: комментарий от Xenius

Пример задачи?

Ты код в бинарниках с навороченными циклами, кучей переменных и прыжками по коду видел? Когда натыкаешься на такое в баше

set -e

if [ ! -x updatepofiles.exe ]; then
  ./build_tools.bat
fi

if [ "@"$FPCTARGET == "@" ]; then
  FPCTARGET=`fpc -iTP`-`fpc -iTO`
  if [ $FPCTARGET == "-" ]; then
    FPCTARGET=""
  fi
fi

RSTFILES=(
  ".. fpg_constants fpgui"
#  "ideintf objinspstrconsts"
#  "components/codetools codetoolsstrconsts"
#  "lcl lclstrconsts"
)  

for idx in ${!RSTFILES[@]}; do
  LINE=(${RSTFILES[idx]})
  RSTDIR=${LINE[0]}  
  RSTFILE=${LINE[1]}  
  POFILE=${LINE[2]:-$RSTFILE}
   
#  RST=`find $RSTDIR/{units,lib}/$FPCTARGET -name $RSTFILE.rst | xargs ls -1t | head -1`;
  RST=`find $RSTDIR/{units,lib} -name $RSTFILE.rst | xargs ls -1t | head -1`;

  if [ "@"$RST != "@" ]; then
    echo $RSTDIR/languages/$POFILE.po
#    rstconv -c UTF-8 -i $RST -o $RSTDIR/languages/$POFILE.po
    rstconv -i $RST -o $RSTDIR/languages/$POFILE.po
    ./updatepofiles.exe $RSTDIR/languages/$POFILE.po
  fi
done

# generate new include files from the updated .po files.
./generateincfiles.exe ..

exit 0
то долго чешешь репу и гадаешь, как же оно эти файлы генерирует и как обрабатывает данные. А если бы код был написан процедурно на том языке, который обрабатывает данный скрипт, то разобраться было бы намного проще. Тут в линуксе запускаются батники у которых конец строки #10 а не #13#10 как полагается, и попробуй этот баг исправь, как отгребёшь новые. А потом тут же в линуксе, запускаются сгенерённые *.exe файлы, кроссплатформенность, блин.

Napilnik ★★★★★
()
Ответ на: комментарий от Xenius

как раз while read не сфейлится, проверено и неоднократно. А переводы строки в именах файлов я не встречал никогда в жизни... хотя повидал я многое.

find тоже годная альтернатива этому, кстати будет работать немного быстрее.

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

Понятно после того как сам такой говнокодище наваяешь раз 10, а до этого от указания номеров линий войдёшь в бесконечный цикл.

Napilnik ★★★★★
()
Ответ на: комментарий от Napilnik

то долго чешешь репу и гадаешь, как же оно эти файлы генерирует и как обрабатывает данные. А если бы код был написан процедурно на том языке, который обрабатывает данный скрипт, то разобраться было бы намного проще.

Насчёт «намного проще» сомневаюсь, в принципе понятно, что это какая-то фигня от free pascal compiler которая генерирует po-файлы. И к тому же есть set -x с помощью которой можно сразу увидеть конечную команду.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

Ты просто не видел настоящего говнокода на шелле, который иногда приходится разбирать. И поверь мне, бывает код, который может поставить в ступор и без сложных конструкций. Вот наглядный пример из стоковой прошивки DNS-327L:

#!/bin/sh

echo "hardware init"

# enable usb power
mem_rw -w -t 1 -o 0x18100 -v 0x2010

#for SPI clock
mem_rw -w -t 1 -o 0x1100c -v 0xfb

#/* hardware request phy */
mem_rw -w -t 1 -o 0x184e0 -v 0xa8a

mem_rw -w -t 2 -o 22 -v 0x2
mem_rw -w -t 2 -o 25 -v 0x77
mem_rw -w -t 2 -o 24 -v 0x5747
mem_rw -w -t 2 -o 22 -v 0

# modify for hw sata eye
mem_rw -w -t 1 -o 0xA2834 -v 0xc92a
mem_rw -w -t 1 -o 0xA283c -v 0xaa2b

mem_rw -w -t 1 -o 0xA4834 -v 0xc92a
mem_rw -w -t 1 -o 0xA483c -v 0xaa2b

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

как раз while read не сфейлится, проверено и неоднократно.

Если есть пробелы в конце или начале имени файла — сфейлится

Xenius ★★★★★
() автор топика
Ответ на: комментарий от ncrmnt

Нужно просто man mem_rw прочитать и будет всё просто. Другое дело, что его я сходу не нашел в поиске.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

Нет его. mem_rw это костыль от dlink'а, который взаимодействует с их драйвером /dev/REG (их реализация /dev/mem с поэтессами) на который нема сырцов, и пишет из юзерспейса физическую память и адреса регистры какого-то PHY (еще не все расшифровал). А то, что расшифровал уже резко позволило снизить температуру чипа на 10 градусов в среднем.

ncrmnt ★★★★★
()
Ответ на: комментарий от Xenius

Насчёт «намного проще» сомневаюсь, в принципе понятно, что это какая-то фигня от free pascal compiler которая генерирует po-файлы

Это фигня от клепателя формочек, которая генерирует файлы с переводом интерфейса. Вот только несколько авторов не всё там доделали и поэтому, это уравнение с несколькими неизвестными. Очень весело разбираться в забористом коде чужого языка чтобы понять что надо доделать в твоём.

И к тому же есть set -x с помощью которой можно сразу увидеть конечную команду.

И к тому же set --help грит что команда неправильная а man set выдаёт нечто невразумительное, из которого вот так сразу не поймёшь что вообще делает эта команда. Поэтому, если бы вместо скрипта был процедурный код на паскале, который пользователям формошлёпа уже должен быть знаком, то искать в интернете и справочниках фичи баша было не надо.

Napilnik ★★★★★
()
Ответ на: комментарий от ncrmnt

Вот именно здесь говнокода и не заметил. Просто ввод в утилиту цифровых данных значения которых ты не знаешь. Для монитора тоже есть утилита, которая управляет яркостью-контрастность похожим образом. Когда-то тыкал наугад, к счастью ничего не сгорело.

Napilnik ★★★★★
()
Ответ на: комментарий от Napilnik

И к тому же set --help грит что команда неправильная а man set выдаёт нечто невразумительное, из которого вот так сразу не поймёшь что вообще делает эта команда.

set — это shell builtin и искать его надо в man bash, или help set, или info bash. Вообще, для гнутых утилит лучше info смотреть, а не man, там подробнее.

Очень весело разбираться в забористом коде чужого языка чтобы понять что надо доделать в твоём.

Ничего особенно забористого в этом коде не увидел, разве что, писать windows-зависимый код на bash — это как-то странно.

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

или help set

Оказывается виндовый/досовский способ здесь тоже действует. Только там он был информативнее и с переводом, просмотрел списочек и краткое представление имеешь. Видимо подразумевается, что по одному хелпу весь баш не изучишь:) Так что не за что ругать тех, кто дополняет его пыхом или ещё чем.

Napilnik ★★★★★
()
Ответ на: комментарий от Napilnik
$ help help
help: help [-dms] [pattern ...]
    Display information about builtin commands.
    ...
Xenius ★★★★★
() автор топика
Ответ на: комментарий от ncrmnt

cygwin только частично спасают, так как многого нет.

И чего же нет в cygwin?

xtraeft ★★☆☆
()
Ответ на: комментарий от ncrmnt

Может не быть некоторых утилит под него собрано, а-ля bin2hex, того что не каждый день нужно.

Ну так собери, это же опенсорс.

xtraeft ★★☆☆
()
Ответ на: комментарий от Xenius

тебе - конечно незачем. Мне иногда сложно на баш резко переключиться, да и опции к курлу, либо запись в базу проще сделать из пыха.

alexmaru
()
Ответ на: комментарий от xtraeft

Да и банальные действия на пхп делать легче, чем на баше.

А если сравнить с нормальными языками, например Tcl? Или на худой конец Python — который как тот же PHP, но не настолько крив?

Кстати, что конкретно на PHP делать проще чем на баше, кроме как выдавать вебстраничку? Желательно сразу с кодом.

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 4)
Ответ на: комментарий от Xenius

ну давай, покажи мне на баше аналог compose, с готовыми библиотеками, которые не надо компилить.

А так - против питона и прочего - никто против и не говорит, просто привычный синтаксис. Если у тебя есть с этим проблемы и нервы - не перекладывай на других, что-ли.

Опять же, возвращаясь к главному вопросу вначале топика - дёргать php ради системных задач через веб-сервер - это дико-дико плохо.

alexmaru
()
Последнее исправление: alexmaru (всего исправлений: 1)
Ответ на: комментарий от alexmaru

ну давай, покажи мне на баше аналог compose, с готовыми библиотеками, которые не надо компилить.

Что такое compose (в данном случае)?

проблемы и нервы

А причём тут проблемы и нервы?

просто привычный синтаксис

У Perl почти такой же синтаксис как у PHP, а работает быстрее, например.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

с нормальными языками, например Tcl?
Или на худой конец Python — который как тот же PHP, но не настолько крив?

Ты не улавливаешь сути. В таких вещах главное - сделать чтобы работало и неважно на чем (кому на чем удобнее, на том и делают). Если у меня такие скрипты работают на php, зачем мне их переписывать на тикль или питон?

Кстати, что конкретно на PHP делать проще чем на баше, кроме как выдавать вебстраничку? Желательно сразу с кодом.

Да хотя бы работа с сетью - например обертки к курлу. Которые потом очень удобно запускать в кучу потоков через xargs, например.
Вот тебе и php + bash.

xtraeft ★★☆☆
()
Ответ на: комментарий от Xenius

У Perl почти такой же синтаксис как у PHP, а работает быстрее, например.

В реальном мире в некритичных десктопных задачах скорость языка никогда не будет узким местом даже без учета кеширования опкода.

Ты как был фанатиком, так им и остался, похоже.

У Perl почти такой же синтаксис как у PHP

Еще и наркоман, судя по всему.

xtraeft ★★☆☆
()
Последнее исправление: xtraeft (всего исправлений: 1)
Ответ на: комментарий от Xenius

compose

что-то типа apt-get из мира пыха. Сказал compose тра-ля-ля - притащил тебе тра-ля-ля, который умеет указанное, можно тыкать репозитории.

У Perl почти такой же синтаксис как у PHP

и на нём писал, но как-то не прижилось. Да и на скорость для повседневность-скриптов мне как-то вообще никак.

Ну например, есть у меня хрень, чтобы восстановить один сервер на другой, в случае, если ему совсем хана. Один сервер делает копии всех других. Если с одним что-то случается, на первом говоришь «восстановить такой-то», ждёшь, пока оно достанет архив и базы, сравнит и посмотрит, какие базы нужно подключить (роясь по конфигам веба), и рапортует, что всё готово, можно подменять.

На баше это было неудобно исключительно из-за коннекта к базам данных. Остальные языки - пожалуйста.

alexmaru
()
Последнее исправление: alexmaru (всего исправлений: 1)
Ответ на: комментарий от xtraeft

Да хотя бы работа с сетью - например обертки к курлу. Которые потом очень удобно запускать в кучу потоков через xargs, например.

А зачем для curl какие-то обёртки? Что они такого делают, что нельзя сделать просто через вызов бинарника curl с опциями?

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от alexmaru

что-то типа apt-get из мира пыха.
Сказал compose тра-ля-ля - притащил тебе тра-ля-ля, который умеет указанное, можно тыкать репозитории.

Ты сам на свой вопрос и ответил. «библиотеки» для шелла — это установленные программы, а притащить их можно тем же apt, slackpkg или любым другим пакетным менеджером.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

синтаксо-сахар делают. курл --я --ж --тебе --сказал --вот --это --сделать тЫжТыкой смотрисюда.локал

- это смотрится как-то убого.

alexmaru
()

Тоже пишу мелкие скрипты для обработки логов и конвертации на php, но только в том случае, если он необходим для чего-нибудь ещё и уже установлен на сервере. Скрипты вызываю через php-cli.

Мне так привычнее, но т.к. я ленив, то при отсутствии на каком-либо сервере пыха пишу аналогичные скрипты на том что есть вместо того чтобы ставить пых :)

NightOperator ★★★
()
Ответ на: комментарий от Xenius

И что мешает сделать баш-функцию с сахаром?

Неудобно. Тебе до сих пор непонятно, что кому на чем удобнее, на том он и пишет?

xtraeft ★★☆☆
()
Ответ на: комментарий от xtraeft

Тебе до сих пор непонятно, что кому на чем удобнее, на том он и пишет?

Мне не понятно, почему некоторые считают, что им удобнее на PHP, кроме случаев, когда ничего другого нет или когда они так и не изучили ни одного нормального языка.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

Мне не понятно, почему некоторые считают, что им удобнее на PHP, кроме случаев, когда ничего другого нет или когда они так и не изучили ни одного нормального языка.

Зачем мне его изучать, если я не программист, скрипты свою задачу выполняют, а от переписывания на абстрактном «нормальном языке» ни 1 плюса не будет?

xtraeft ★★☆☆
()
Последнее исправление: xtraeft (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.