Pull to refresh

Comments 171

ПХП великая вещь, у меня на домашнем сервере пхп-скрипт пингует яндекс и в случае проблем перезагружает adsl-модем.
Давно хотел написать такой же, но лень — великая вещь. Поделитесь скриптом)
Так там писать-то особо и нечего, особенно если модем D-Link:
<?

exec('ping avangard-dsl.ru', $c);

$c = implode('', $c);

$c = iconv('cp866', 'windows-1251', $c);

if(!strpos($c,'TTL'))
{
echo 'reboot';
$fp = fopen('http://192.168.1.1/rebootinfo.cgi', 'r');
fclose($fp);

}
else echo 'ok';
sleep(3);

?>

Запускается это всё, планировщиком раз в 10 минут, батником вида:
php.exe -f reboot.php
а как же логин на модем?
на модемы d-link логин не нужен.
Это на какие не нужен? У меня старичок dsl-500t — требует
Логин можно включить, а можно выключить ;)
Вы бы лучше включили пароль и почитали про CSRF. Мелочь конечно, но вам нужен внезапный ребут? :)
А вот мой по телнету. Требует telnet.class.php

<?php
exec("ping ya.ru", $res);
var_dump($res);

if (count($res) < 11 or strpos($res[4], '192.168.1.1') or strpos($res[10], '100')) {
	include_once 'D:\htdocs\imgate\html\scripts\telnet.class.php';
	define('SERVER_IP', '192.168.1.1');
	define('SERVER_LOGIN', 'root');
	define('SERVER_PASS', 'pass');

	$telnet = new telnet;
	$telnet->setLog(1, "mylog");
	$telnet->set_host(SERVER_IP);
	$telnet->set_prompt("login: "); 
	$telnet->connect(); 
	$telnet->wait_prompt(); 
	$telnet->write(SERVER_LOGIN);


	$telnet->set_prompt("Password: "); 
	$telnet->wait_prompt(); 
	$telnet->write(SERVER_PASS);

	$telnet->set_prompt("# "); 
	$telnet->wait_prompt(); 
	$telnet->write("reboot");

	sleep(5);

	$telnet->disconnect();
}
UFO just landed and posted this here
Я б ещё добавил «Bash же!», но куда там… :)
UFO just landed and posted this here
Вообще это все писалось под винду, а так да… ваши замечания учту, если понадобится на никсах.
Если это линукс — тогда у pppoe-звонилок из коробки есть опции передозвона в случае отсутствия adsl. Например:

Аргх, хабр запостил раньше :-(

«lcp-echo-interval 10»
«lcp-echo-failure 6»
Сцуко-adsl-модем бывает виснет так, что помогает только перезагрузка. Да и вникать в тонкости каждой железки не было времени, а PHP-скриптом это было сделано за 5 минут.
Тоже в свое время пинговал яндекс но после отказался — пинги идут, а торенты стоят. А после обновления прошивки, rebootinfo.cgi стал просить логин пароль от админки — и что-то совсем отказался :))) лень… да и виснуть часто перестал
А что за модем, что за прошивка? Я на dsl-2640U так нормальной прошивки и не нашёл :(
Железка DSL-2640U_BRU_D, прошивал с офф-сайта. Сей девайс отпахал у меня года два, буквально пару месяцев назад он умер, сильно умер — осмотр электроники ничего не дал.

В замен взял DIR-320 + ADSL модем из уценки за 200 рублей. А после НГ вообще перелез на локалку, ADLS оставил в резерве. Но надо отдать должное DSL-2640U трудился 24/7 — 2 года. Но девайс кривоватый. Хотя DIR-320 на последней оф. прошивке тоже приходится ресетить (раз в неделю), но дарит надежду то, что не добрался до прошивки от Олега…

Я помниться еще провел подстройку торрент клиента — Transmission on NAS. Чтобы и без того мегабитный канал не забивать кучей соединений. И вроде как модему тоже полегчало. Попробуй покрутить настройки, девайсы дешевые и при большом объеме пропускаемых через себя данный тупят.
а версию прошивки не помните?
Через несколько часов буду дома, посмотрю что скачивал последнее.
DSL-2640U_3.12_6338_19_RU_1.24_20100607.img — судя по всему, на ней модем работал с лета, незадолго до кончины поставил 1.25. Все качал с офф. ФТП.
Спасибо. Меня (начинающего (близится год) пользователя Linux) вот как раз всё чаще подпирает некоторые задачи автоматизировать в виде скриптов. При этом языки с не-C-подобным синтаксом я как-то плохо перевариваю. Пока думал остановиться на Groovy или разобраться с tcsh, но Вы вот тоже идейку подкинули вполне.
Ну раз вы такой зацикленный на С, то пишите всё на С! В чём же дело? Ведь всё то же самое вполне можно реализовать на вашем любимом языке. Зачем себя утруждать учить что-то новое? Подумаешь, так весь мир делает — главное, что у вас аллергия на С-неподобные языки.
Это всего лишь дело вкуса, уважаемый. Так же и с естественными языками — кому-то нравятся романские языки, кому-то германские, например. Думаю сегодня мы можем себе позволить выбирать по душе, возможностей и единомышленников достаточно и там и там.

Более того, возможно (а возможно и нет), программисту (как и человеку любой другой профессии) как раз следует выбирать нравящиеся ему направления и развиваться именно в них, практикуя их, так сказать, к месту и не к месту (выражаясь менее экстравагантно — применяя их для решения широкого спектра практических задач, в т.ч. тех, для которых это не слишком популярно).
ваше последнее утверждение эквивалентно пользе стрельбы из пушки по воробьям, если задачу сокращения птичьего народа доверят артиллеристу :)
Цикл «исходники-работающая программа» на php несколько короче чем на c. Потому (одна из причин) лет 10 назад я и перешёл с c(++) на php. Сейчас для CLI и GUI скриптов потихоньку (если есть время) перехожу на python, но если сроки решения задачи важнее чем условная «правильность», то выбора кроме php нет — синтаксис C я уже забыл почти, а библиотеки современные и не знал никогда.
у вас же совсем другая история. Если нужно решить задачу администрирования типа представленной в этой заметке, то с вашей стороны было бы лучше всего взять питон. По ходу дела и изучите в интересной вам области, и больше подходит.
ИМХО, нужно по возможности использовать разные инструменты, руководствуясь большей приспособленностью инструмента под конкретную задачу. Вот ПХП для задач администрирования в консоли и маленьких системных скриптов подходит очень слабо.
Честно, не заметил большей приспособленности Python под маленькие (однопоточные, интерфейс stdin/stdout/stderr) CLI утилиты, чем PHP. По моему опыту область где Python наголову разбивает PHP — это GUI приложения, в CLI они, по-моему, равноправны, в вебе PHP обходит python (по крайней мере если не рассматривать сторонние библиотеки и считать мастхэв сторонний веб-сервер типа апача или инжиникса)
а на мой вкус Питон для таких задач больше подходит, хотя тут можно спорить.
А вот в смысле наличия почти всех библиотек сразу в поставке у Питона по сравнению с ПХП я точно уверен. Например, работа с почтовыми серверами и сообщениями в ПХП без доустановки сторонних пакетов весьма затруднена, а у Питона сразу всё есть.
Во-первых, есть куча GUI утилит, например, kochizz.sourceforge.net/ либо www.debianhelp.co.uk/apacheweb.htm
Во-вторых, есть куча консольных уже готовых отлично отлаженных и функциональных скриптов.
В-третьих, ваше решение для консоли выглядит, мягко говоря, неубедительно. Очень уж PHP тускло выглядит в администрировании. Сейчас основа для linux это sh/perl/python, на которых написано почти всё внутри linux и у которых есть уже устоявшиеся решения для типичных проблем, лучше брать эти языки, чем писать таких вот «монстриков». Подумайте, почему за всё время существования php так никто и не «догадался» использовать его для административных задач. На это есть масса причин, которые хорошо обсосаны и растолкованы на просторах интернета.

Собственно, решение написать свой велосипед похвально, развивает кругозор и всё такое, но вот выбор инструмента — нет.
По поводу готовых утилит, знал только о Rapache, который не работает в последних версиях Ubuntu.
Да, возможно PHP не лучший инструмент в данной нише, но для моей задачи, думаю, более чем подходит.
Глупость — это пытаться одним только молотком закручивать гайки и есть лапшу.
Мудрость — это пытаться выбрать правильный инструмент для каждой задачи.
Умный программист/администратор должен знать несколько языков-инструментов для широкого круга задач, знать как их применить и когда, а не пытаться одной отвёрткой собрать.

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

Развивайте кругозор изучением новых инструментов и решений, вместо топтания на месте и написанием «монстров».
Чтобы написать вспомогательный скрипт обязательно учить новый язык?
Подписаться под кодексом джедая и повесить на стенку портрет Столлмана =)
В контексте данного поста — да. И пользы куда больше, и время не зря потеряно. Не стоит утрировать цели данного поста, здесь показана банальная работа с файлами из документации, которую в состоянии осилить любой умеющий читать по-русски. Дык в чем смысл поста? Если показать, как пхп работает с потоками ввода/вывода, то зачем? Если показать конфиги апача, то они нисколечки не показаны. Если показать, как ваять скрипты для системы, то лучше взять действительно подходящий инструмент. Цель определяет средства.
ну почему. тем кто не знает что пых умеет работать в консольком режиме — самое оно :)
Глупость — это для решения небольшой задачи учить новый язык.
Мудрость — это сделать быстро и качественно решение, которое будет работать.

Возможно, для системного администратора и имеет смысл знать несколько консольных языков, для среднестатистического программиста — достаточно одного-двух. И уж явно консольная задача не будет стимулом учить, например, python.
А было бы полезно поучить если не несколько тяжкий классический (ba-)sh, то хотя бы стройный Python… Насколько знаю действительно хороших программистов — все с удовольствием пробуют новые языки, даже в — или особенно в них — небольших личных задачах.
я бы даже сказал — небольшие задачи для личного пользование есть отличный способ стартонуть в других языках. я так все вспомогательные утилитки пытаюсь писать на том чего полохо знаю, ведь реальная боевая задача ставит вопросы, до котороых просматривая кукбук сам не додумаешься, да и оптимальность и производительность не критична, можно безответственно гавнокодить :)
Я не хочу холиварить, и никоим образом не хочу обидеть питон, но относительно данного случая возможности питона и пхп на равне. А учитывая что автор знает пхп, то для данного случая пхп выгодней.
«Данный случай» — это небольшие вспомогательные скрипты? Я бы поспорил. Для Питона или Руби тематических либ бездна, да и стандартная библиотека весьма и весьма решает.

А ту-у-у-у-ут…

Скажем, надо мне множество картиночек распихать по куче url. Потоков нетуть. Процессы есть в своей наипримитивнейшей форме, но, к сожалению, никаких либ, упрощающих работу с ними, тоже нетуть. «Доктор, будем резать по живому.» (с)
Есть курл, есть неблокирующие сокеты, зачем процессы?
Я специально подчеркнул что учитывая что автору уже известен пхп поэтому в данной ситуации ему выгодней писать на пхп.
Насчет «автору уже известен» — это фиг с ним, не аргумент для программиста вообще. Это ж не на ассемблер скакнуть надобно, а в такой же интерпретируемый язык.

Вы писали с неблокирующими сокетами? Основная проблема такого отхода — проблемная отладка и неудобная без тредов или процессов обработка результатов запросов. Тем более незачем использовать низкий уровень (в частности, неблокирующих) сокетов во вспомогательных скриптах. Мы ж не в эпоху C живем!

Резонно такие штуки использовать где-нибудь, где важна производительность — точно не в мелких скриптах. Да и… Вообще-то, процессы форкать можно и в php, просто это неудобно.

Или вот, еще задача. Стоит у вас славный 4-хядерный зверь. Или даже восьмиядерник, что не редкость на серверах. А надо 200 000 картинок конвертировать. Что будете делать без толковой работы с процессами и тредами? В один поток..?
Если че процессы работают в той же чески где и основная программа, форкать надо для многоядерных.
За серьезный аргумент я принял бы «стандартная библиотека весьма и весьма решает», если действительно решает, например если стандартная библиотека pyton/ryby может парсить параметры cli типа "--port=8080" всё остальное весьма и весьма субъективно. В частности php такой же интерпретируемый императивный язык с динамической типизацией, как и python/ruby. Это не LISP, не FORTH, мышление менять не надо, а многие конструкции с одного языка на другой переносятся практически вообще без правки (говорю это, написав на php :) скрипт для переноса с php на python — 90% абстрактного ООП кода переносится безошибочно с одноэтажными регулярками, правда рекурсивными, проблема с библиотеками стандартными — проще посмотреть два мана, чем описывать все соттвествия библиотек и, тем более, реализовывать отсутсвующие ).
По-моему, только плохие программисты начинают изучать новые языки и библиотеки, когда дедлайн на носу :)

Тут, конечно, не тот случай, скрипт чисто для себя. Но в свое время я выбрал именно php для решения подобных задач, не выбрал c(++), потому как компилируемый язык для таких задач не удобен, имхо, а других интерпретируемых императивных я тогда и не знал, даже не знал о том, что они существуют (кроме бэйсика :) )… Вернее вру, знал, что есть Perl и даже видел его, но вот выбрал php для веба сначала, а потом и для «админских» скриптов.Тупо временной отрезок от задумки до «релиза» при любой задаче заведомо короче на php, чем на любом другом языке.
*для меня короче: для человека знающего и python, и ruby на одном уровне судить не берусь.
Действительно, в дедлайн любая каша сойдет неоттестированная сойдет :-D Кстати говоря, в этом, пожалуй, и заключается главное отличие корпоративных продуктов от разрабатывамых сообществом. В последних никто никуда не торопится…

Ну… Думаю, как человек, знающих как Питон, так Руби, вы должны понимать, где кроются архитектурные проблемы php: это и плохая наследственность (начинался-то язык как своего рода продвинутый шаблонизатор), и стандартная библиотечка для обобщенных задач не слишком подходит, и всякие другие нехорошие практики в наличии (как насчет именования методов глобальных функций, м?).

Соответственно, изучение подходящего языка может в результате, не с первой, разумеется, попытки дать свои плоды.

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

> Именование методов глобальных функций…

Это вы о чём?
А вот о чем.

array_key_exists('b', $b); 


… вместе с тем:

property_exists($c, 'd');


Вот и запоминай закономерности как хочешь. Или, если откровенно — нету этих самых закономерностей в природе. Есть яичница-болтунья из deprecated и не очень функций, которая меняет формат со всякой версией языка.

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

Но пример простой, показательный и сразу в голову приходит.
>>Подумайте, почему за всё время существования php так никто и не «догадался» использовать его для административных задач.
>>На это есть масса причин, которые хорошо обсосаны и растолкованы на просторах интернета.

А мужики-то и не знают :)
У нас уже лет 7 php используется вместо sh/perl/python на серверах — очень удобно для веб-программистов, можно использовать любимые фреймворки, один и тот же код для веб-приложений и серверных нужд, не нужно разбираться в незнакомом редко используемом bash.
редко используемый баш? я тут кучу открытий в каментах для себя сделал…
UFO just landed and posted this here
я так чую скоро automake на говнопых перепишут. надо линусу идею подкинуть, make menuconfig тоже на php-cli замутить…
опять же сейчас добрый кусок линуксовых утилит пишется на питоне, что не плюс для линукса в плане производительности
Для скриптового языка Питон достаточно шустрый благодаря сохранению байт-кода в файлы .pyc и .pyo. Это избавляет интерпретатор от перекомпиляции кода модулей при каждом запуске.
UFO just landed and posted this here
Не поверите, кешеры храняк код пхп в памяти, и этот код имеет на много больший отклик чем бакт код в файлах pyc. Apc может работать с php-cli. Сравнивать пхп с питоном не буду, я не вкурсе.
да тут вообще топик отрытий )
Я Вас не заставляю переписывать все текущие скрипты на пхп, у пхп своя ниша — веб. Я просто констатирую факты.
кешер, кстати, насколько медленнее насколько рабоатет flock на чтение байткода. вообще самый быстрый код — на лиспе, давайте на нем вебпанельки писать? )
Неужели в этом топике хоть кто-то сказал что надо писать ТОЛЬКО на «мой любимый язык» потому что он быстрей итп, нет, это не так, но если человеку понадобилась панелька, он написал ее на том что знал, и понял что для таких базовых задач его яп очень можно использовать. Я тоже писал скрипты для автоматизации рутины на пхп и на питоне, они подходят для этого не хуже шела, но при условии что я их уже знаю.
Вероятно вас это шокирует, но python где-то от 2-3 до 20-30 раз быстрее bash-а.
а по причине объема библиотек и биндингов. кросплатформенности так же.
так я не и не что это плохо :) это коммент был на слегка неадекватное сообщение. пишите на чем вам хочется и к чему душа лежит — а если не нравится то что есть, ищите другое или переписывайте сами
неверные советы даете :)
сначала смотрите что можно использовать, потом только переписываете и если только совсем косяк — пишите свое.
ну я это и имел в виду, просто чуть чуть сложно написал, мысль про переписывание начинается после тире :)
UFO just landed and posted this here
можно и не хамить кстати :)
можем комитами в symfony померяться для важности. есть шанс, что проиграете.
я как бы неплохо ориентируюсь в теме, и лезть с PHP в такие штуки — глупо.
Комиты в симфони — показатель крутости и важности? Мне, например, на много приятней подсказывать маленьким библиотечкам на их ошибки, чем делать комиты в проекты с огромным сообществом. Я хуже от этого? Со скриптовыми языками лезть в скриптовые автоматизации очень даже не глупо, что я на шеле напишу пару ифов, пару форов, обратобаю аргв и запишу результат в файл, что на пхп, что на питоне, это не суть важно, это «тупые задачи» их можно писать на чем угодно.
не влезайте в чужой спор, пожалуйста. если вы не заметили, develop7 очень значимый в Росии спец по symfony… как и я в Латвии.
Это не показатель давить комитами.
UFO just landed and posted this here
Блин, какой же я не крутой из-за того что не использую симфони и не лажу в его ядре, и не вижу что можно было бы изменить… Какие же не крутые и другие разработчики которые не используют симфони и не комитят измнения туда, какие же не крутые разработчики высоконагруженных проэктов потому что не комитят в симфони код… Ну я думаю вы поняли ироничность моих слов =)
UFO just landed and posted this here
UFO just landed and posted this here
а зачем переписывать cpan'овскую Apache::Template просто потому что ты знаешь только PHP?
это был такой толстый троллинг.
UFO just landed and posted this here
почему проект не может состоять из работающих кусочков на разных языках?

на тему юзанья — а куда придумали dbus тот же? unix sockets?

кстати, второй комментарий к статье вообще был про непериваривание c-подобного синтаксиса. я так прямо и похоронил ruby вместе с vhdl.

заканчивая тему могу прдложить автору консервным ножом нарезать хлеб, а простым открыть тушенку. неблагодарное дело.
UFO just landed and posted this here
тролинг не кончался, война не начиналась :P
UFO just landed and posted this here
не могу придумать аргумент почему пых хуже шела перла и питона для написания тулзов. Я не защищаю пых, мне просто интересно, может действительно так и есть? Растолкойте вкратце так как просторы интернета почемуто не отвечают
Примитивный парсер аргументов getopt() (по сравнению с питоном например) (кстати, даже он в скрипте из поста не используется)
Примитивная работа с пайпами/подпроцессами (по сравнению с башем)
С юникодом не очень дружит

Наверное еще что то можно вспомнить
Можно без проблем воспользоваться небольшим framework'ом. К тому же если речь идёт о реальном проекте, то framework, скорее всего, используется. Отлично, например, себя зарекомендовали symfony tasks.
а у питона нет убодств для веба — для этого придумали джангу, и что? срать на питон? ну смешные ей-богу :) халиваааааар!!!
у питона есть wsgi для веба. А фреймворки и в PHP есть
так и я к тому же — питон язык скриптовый и консольный, его допиляли для работы с веб, и он прекрасно справляется с этим. Руби аналогично. PHP изначально делался как язык для веб, и его допиляли для работы с консолью, что в этом страшного? Если тот же си допилять до нормальной работы с веб (и кажется гдето я про такие фреймворки читал) — то он тоже будет абсолютно адекватным, если даже не более адекватным, решением для веб. Где я не прав?
Афаик, python не допиляли до нормальной работы с вебом, допиляли, максимум, стандартные библиотеки, плюс куча различных фреймворков на их базе (или без оной, внутрях не ковырялся). В тоже время, php нормально поддерживает CLI (я писал CLI приложения на php ещё когда php4 не пахло — утрируя, намного удобнее писать разовые утилитки чем что на хорошо знакомом C, чем что на плохо знакомом интерпретаторе .CMD/.BAT) и намного лучше поддерживает веб чем python (который на уровне языка его практически никак не поддерживает).
>Примитивная работа с пайпами/подпроцессами (по сравнению с башем)
пайпы в баше скорее необходимость, ввиду минималистичности языка. В пыхе куча встроенных функций, делать пайпы из десятка программ тут не нужно. Хотя в принципе можно при желании. А чем вам работа с подпроцессами в баше нравится? Вроде ничего такого жутко удобного я там не припоминаю.
Простите, а чем питоновский парсер лучше? Я думал они оба украдены из си
В питоне я говорил о модулях типа optparse или argparse. Умеют валидацию, типизацию, автоматическую генерацию "--help" как минимум
Я не пытаюсь тролить но параметры обычно это строка либо число, так вот, на сколько нужна более гибкая и совершенная валидация если мне нужно получить либо строку либо число (обычно)? Генерация хелпа это да, хорошо, но надо для этого его вбить туда. А здесь просто получение значения по ключу, для 80% задач этого с головой хватает.
>Очень уж PHP тускло выглядит в администрировании. Сейчас основа для linux это sh/perl/python

а мсье точно сможет технически это обосновать? Чего такого есть в других скриптовых языках и чего сильно не хватает в пыхе.
А зачем в администрировании использовать язык, который для этого никак не предназначен?
так я и спрашиваю, в чем технически это выражается, что может оправдать время, затраченное на изучение нового языка. А мыслить только шаблонами — плохо, от этого мозги засыхают.
UFO just landed and posted this here
Например, более эффективное и быстрое решение сложных задач. Возьмём Python: быстр и прост в изучении; высокая скорость разработки; лаконичный синтаксис; стандартная библиотека содержит много полезностей + сторонние библиотеки, помогающие в администрировании; инструментарий для управления пакетами (easy_install).
это у вас какой-то маркетинговый текст вышел. Все, что вы написали про питон, в целом характерно и для пхп.
нет, РНР отличается. Лаконичный синтакс — не для задач администрирования!
Стандартная библиотека содержит много полезностей? Только для веба.
Какие сторонние либы, помогающие в администрировании вы можете назвать для РНР?
Ну давайте возьмём пример — скрипт для просмотра новых конфигов, вырезает пустые строки, комментарии и пробелы в начале строки

#!/usr/bin/perl
while ()
{ chomp;
s/^\s//;
next if /^#/;
next if /^$/;
print "$_\n";
}

а теперь напишите мне столь же короткий и изящный код на РНР
UFO just landed and posted this here
while () { s/^\s+|\s+$//g; say unless /^[#$]/; }
ваш код явно не на РНР, поэтому я просто не понял, к чему он?
более короткий и изящный.
кстати, ой.
while () { s/^\s+|\s+$//g; say unless /^[#$]/; }
вот.
UFO just landed and posted this here
Программист, который не понимает данный код — хороший?
UFO just landed and posted this here
>а теперь напишите мне столь же короткий и изящный код на РНР

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

В обратку: напишите мне на перле функцию, проверяющую доступность определенной страницы (url). Без сторонних костылей.
на перле я бы обязательно скачал и подключил сторонний модуль. Поэтому предпочёл бы решить данную задачу на питоне. И решение будет менее изящным чем на ПХП, скорее всего. Но тема ж не про веб, а про админство.
>на перле я бы обязательно скачал и подключил сторонний модуль. Поэтому предпочёл бы решить данную задачу на питоне. И решение будет менее изящным чем на ПХП, скорее всего
ну вот видите, и все пролетели. Нет идеального инструмента для всего.

>Но тема ж не про веб, а про админство.
так и я про него. Или админу грех работать с HTTP? :)
UFO just landed and posted this here
питон тоже для веба нулячий, написали под него целую надстройку в виде Джанги и других фрейвворков- и щас любители питона срут в пхп что он не консольный. Ясен пень — пых же для веба писался — а для консоли ему надо цеплять такой же фреймворк как питону для веба :) это же все холивар, смыслу раскидываться такими заявами?
В принципе для простых (не требующих сложной «бизнес-логики») задач администрирования, имхо, php справляется не хуже Си/Си++/Перла/Питона/Руби/Джава/C#/Basic при использовании только стандартных библиотек. Это мнение на основе опыта 10-летнего опыта разработки на php, 10-летнего опыта на Си и Бэйсике и поверхностного знакомства с остальными. По сути, для задач администрирования (с которыми я встречался, только под windows, под linux/bsd я предпочитаю решать задачи в баше ручками, в целях самообразования) все эти языки одинаковы, извращаться над «бизнес-логикой» не приходится, те же циклы, условия и т. п., а недавно php и goto стал поддерживать :) )
  1. Так нельзя обрабатывать аргументы, есть специальная функция/модуль getopt() в нормальных языках
  2. Проверка после «Add $server_alias to your /etc/hosts? (Y/N) [Y]:», должна посылать при корявом вводе
  3. Забыл выполнить apache2ctl configtest в конце
  4. Конфиг нужно генерировать с помощью шаблонов, а не просто подстановкой переменной
  5. Зачем проверять наличии директории и прав записи на неё… просто записать и если не получиться то поймать исключение
  6. Конциг для скрипта нужно делать отдельным файлом(ini,yaml,xml,...)
  7. Предварительно нужно замести конфиги в систему контроля версий, и после тоже не помешает
Для пыха тоже есть getopt встроенный. И более навороченный в PEAR.
В старых версиях пхп getopt не работал в windows, только начиная с 5.3 работает.
Потому что php не всегда лежит в /usr/bin
Ну не env'ом же искать программы по PATH?!
Вообще-то именно это многими рекомендованный способ — php, perl, ruby, bash — для всяких высокопортабельных применений…
В принципе это можно и на баше написать, чтобы не зависеть от языка
UFO just landed and posted this here
я понимаю, но баш знаю очень-очень плохо
когда-то подобный скрипт практически целый день писал
а здесь же справился буквально за 10 минут
Я тоже в баше совсем не разбирался, теперь более менее понятен.
Да, он не так удобнен, но зато расширяется кругозор
Вот 2 статьи для введения в bash: tux-the-penguin.blogspot.com/2010/12/bash-ii.html
Выучи баш и перестань городить велосипеды

ping -n 1 example.com || curl modem/reboot
Опять ошибся веткой, да шо ж такое…
Вот синтаксис баша я худо-бедно выучил (фиг с ним, что он фактически не кроссплатформенный, пишу для себя), но вот в вашем примере вызываются сторонние, по сути, библиотеки, причём curl на, например, debian нужно ручками ставить
Бивис, он назвал курл библиотекой, а баш не кроссплатформенным!

php, небось, уже давно в ядре есть, он-то самый кроссплатформенный, небось.
Ой, покорно прошу прощения, библиотека конечно же libcurl, а curl не фига не библиотека (что для curl нужен libcurl, что для php — забъём для ясности). А баш я назвал не «некроссплатформенным», а «фактически некроссплатформенным».

P.S. Меня зовут не Бивис или вы к кому обращались? Или это персонаж молодежной субкультуыры типа «Василь Иваныча» в советские времена?

UFO just landed and posted this here
все дело происходило на нетбуке. очень не хотелось лишний раз нагружать систему пусть даже чуть-чуть
UFO just landed and posted this here
Извините конечно, но что это за процедурный говнокод?
В if'е ‒ for
в for'e ‒ switch
в switch'e ‒ if

кто вас так писать учил?
if на if'e и if'ом погоняет.

p.s.
в 2-ом листинге ошибка. Там начало скопипастено 2 раза.
простите, но почему нельзя так писать? PHP учил сам, но вот С++ учил в университете и ни разу не слышал никакой критики о подобных конструкциях ни от одного из преподавателей.
switch вместо if использовал потому, что так мне показалось удобней

за ошибку спасибо, исправил
UFO just landed and posted this here
аа, понял. буду иметь ввиду
Может правильней было бы: «Использование PHP из командной строки»?
Исправил на «Программирование в PHP для командной строки»
я использую модуль macro, для стандартных виртуальных хостов сделан шаблон, что-то типа
<Macro Vhost $name $path>
    <VirtualHost *:80>
        ServerName $name
        DocumentRoot $path
        ...
    </VirtualHost>
</Macro>

все что надо — лишь добавить строчку для инициилизации нового хоста
Use Vhost hostname /path/to/wwwroot

что прекрасно делает скрипт на баше
echo "Use Macro $1 $2 >> /path/to/apache/conf"

вызываемый с аргументами
./addvhost <hostname> </path/to/wwwroot>

хоть я и являюсь PHP разработчиком, но предпочитаю использовать его только там, где он действительно нужен
Замечательная статься отлично показывающая что нельзя делать даже в случае угрозы насильственной расправы. Для этих целей существует bash(который есть во всех дистрибутивах) или sh(который есть и в бсд и в линуксах) или python(работаю в основном с RHEL, за deb-based не могу ничего сказать), либо perl, как стандарт.
UFO just landed and posted this here
«Я не очень хорошо пишу скрипты в bash'e, поэтому решил использовать PHP для моей довольно простой задачи, который я, к тому же, знаю довольно неплохо.»

и отсюда вытекает куча проблем. Обновляешь пакеты, там php 5.3 и тут начинается самое веселое занятие :)
что подразумевается под веселым занятием? пых както криво работает?
У меня после обновления php с 5.2 до 5.3 часть скриптов не выполнялась, а отдавался исходник. Если не учитывать, что перестали работать семафоры и еще пара функций.
UFO just landed and posted this here
UFO just landed and posted this here
Скажите, пожалуйста, как мне найти bash в моей WindowsXP?

И какого фига я должен учить (и устанавливать, возможно) ещё один язык для задач, которые я могу решить на «родном» языке (он будет на компе, где я поднимаю виртхост 100%) за 5 минут? Нет, я всё понимаю, что есть языки подходящие лучше для этой задачи, есть для этих языков библиотеки/фреймворки, позволяющие человеку знакомыми с ними решить эту же задачу за 1 минуту. Но вот лично вы можете гарантировать лично мне, что хотя бы пару часов потраченных на знакомство с bash (как, кстати, из баша получить отклик (или убедиться, что отклика нет) от сайта, не используя сторонних утилит типа ping и curl? как файлы по циклу гонять я нашёл в man bash, как им в этих файлах что-то найти, не говоря о замене этого найденного — не нашёл, постоянно ссылки на внешние утилиты типа grep :-( а это контроль зависимостей и т. п.)

Python в deb-based есть, не самый последний, но есть, про rpm-based :) не скажу, про emerge-based, тем более, как-то не возникало мысли проверить :)

> И какого фига я должен учить (и устанавливать, возможно) ещё один язык для задач, которые я могу решить на «родном» языке (он будет на компе, где я поднимаю виртхост 100%) за 5 минут? Нет, я всё понимаю, что есть языки подходящие лучше для этой задачи, есть для этих языков библиотеки/фреймворки, позволяющие человеку знакомыми с ними решить эту же задачу за 1 минуту. Но вот лично вы можете гарантировать лично мне, что хотя бы пару часов потраченных на знакомство с bash (как, кстати, из баша получить отклик (или убедиться, что отклика нет) от сайта, не используя сторонних утилит типа ping и curl? как файлы по циклу гонять я нашёл в man bash, как им в этих файлах что-то найти, не говоря о замене этого найденного — не нашёл, постоянно ссылки на внешние утилиты типа grep :-( а это контроль зависимостей и т. п.)

man unix-way

> Python в deb-based есть, не самый последний, но есть, про rpm-based :) не скажу, про emerge-based, тем более, как-то не возникало мысли проверить :)

Мы не пользуемся deb, Gentoo, Arch и прочим в силу отсутствия вменяемого платного саппорта с поддержкой Oracle. в RHEL/CentOS Anaconda написана на Python. Есть такая вещь как цикл поддержки, пока он не завершится новая версия python мне не будет нужна и мне не придется тестить приложение на совместимость с 2.4-2.7 версиями, т.к. в системе есть только 2.4
volch@localhost$ man unix-way
Нет справочной страницы для unix-way

:)

Видимо, у нас с вами очень разные задачи и очень разный подход к их решению. Я не спорю, вариант «каждой задаче, или даже подзадаче — наиболее подходящий для неё инструмент» в теории является оптимальный, но на практике изучение python/bash/.../любого другого ЯП для написания программы, которая автоматизирует 5 минут ручной работы, которую делаешь раз в месяц, имхо, непродуктивно. Пускай знакомый ЯП делает эту работу за 5 секунд, а не знакомый за 0.01. Но прикиньте что на изучение простейшего синтаксиса, процедуры «сборки» и запуска программы, использования самых примитивных стандартных библиотек (типа посимвольного чтения stdin и записи stdout) нового языка нужно пускай 2 часа, после чего я смогу написать программу за 10 минут (так же как на хорошо знакомом языке). Эти два часа окупятся через 1443 запуска программы, или через 120 лет. Оно того стоит?
Зовите же Бобука скорей на этот вертеп!
А может быть кто-нибудь подскажет как можно завернуть соединение на свой внешний IP-адрес приходили не на модем, а пробрасывались мою машину за ADSL-модемом?
насколько я понял из словесных изворотов вопроса, вам Port Forwarding надо сделать
Мне надо что-бы при обращении из своей локальной сети мой ADSL роутер при обращении на внешний IP-адрес пробрасывал соединение на мой Web-сервер, который кстати уже проброшен во внешний мир. Давайте в личку если можете чем-то помочь если просто языком болтаете лучше не мешайте.
ну после такой постановки вопроса считайте что я просто болтаю языком :)
А каким боком маршрутизация пакетов относится к ПХП и програмированию?
Прочитайте статью еще раз. Посмотрите круг задач которые решает данный скрипт. Уверен найдете некоторую связь.
Не буду разжигать холивар, но данная тема про программирование, а не администрирование и вопрос уровня как это сделать. А Ваш комментарий как раз относится к разделу Вопрос и Ответ.

ЗЫ. конечно можно на пхп написать демон-прокси ;), если это то что Вы спрашивали то тогда правильно формулируйте свой вопрос и к Вам не будет претензий.
Этааа, основы философии Юникс.
www.faqs.org/docs/artu/ch01s06.html

Думаю, поможет прояснить, почему, многие отрицательно отнеслись к практике написания велосипедов на PHP. Это скорее показывает не знание ПХП, а незнание Юникса. Десятки разработчиков годами писали и вылизывали команды и их взаимодействие, для кого спрашивается?:)
В sh нет ничего сложного, всё что он делает — оперирует с уже готовыми утилитами в консоли, Один-два вечера с манами и парочкой HOWTO и всё, ты знаешь весь язык, дальше просто набираешься опыта. И это намного полезнее для общего развития как разработчика в Юникс-среде.

Sign up to leave a comment.

Articles