[ UPDATED – 11.01.2009 ]
Почти съм убеден, че повечето от Вас, които пишете скриптове за управление/конфигуриране на компютри под Windows използват VBScript. Защо? Защото го има от мноооого отдавна, защото има купища информация за него в Интернет, заедно с безброй примерии защото е почти “прост” за използване … даже прекалено? Нека си признаем – като скриптов език не е нищо особено. Основните му предимства са три (според мен!):
- вграден е в операционната система от Windows 95/98 насам;
- лесно се инстанциират ActiveX/COM обекти (дефакто в това му е силата…но и слабото място);
- подписване на скрипта с цифров сертификат (codeSigning);
А недостатъците…
- не може лесно да се включи друг .vbs файл/библиотека с Ваши функции/процедури. В най-лесния вариант трябва да размножавате един и същи код във всеки нов .vbs файл.
[http://www.source-code.biz/snippets/vbscript/5.htm ]
[http://msdn.microsoft.com/en-us/library/342311f1(VS.85).aspx ] - бавен! Мисля, че това се дължи на факта, че VBScript е нетипизиран език, което е свързано с редица проверки от страна на интерпретатора. Подобно на типа Variant в Delphi:
“…But use with care – there are penalties in performance, potentials for run time errors and poor code clarity when using Variants…” – [ http://www.delphibasics.co.uk/RTL.asp?Name=Variant] - тотална липса на вградена функционалност за елементарни неща, като:
- директно извличане/изчисляване на милисекунди (налага се при някои SQL заявки)
- хеш функции (имплементацията е ръчна.Пример MD5:[http://userpages.umbc.edu/~mabzug1/cs/md5/md5.asp ] )
- други
т.е. налага се в сравнително прост скрипт от 10-20 реда да добавиш още 100 реда допълнителен код за реализиране на липсите.
Разбира се, можете да използвате ActiveX/COM обекти с подобна функционалност, но те обикновено са платени 😉
В такива моменти се замисляш: “Ееех, да беше поне като PHP…” 🙂
Предимството при PHP е необятната функционалност. В такава среда пишеш 10-те реда код, които ти трябват, за да свършиш работата, която искаш. Останалото се намира в десетките библиотеки, ти само го използвашт.е. не откриваш топлата вода 🙂 .
А защо да не използваме PHP скриптове под Command Prompt?!?
Много хора са свикнали да свързват PHP с Web страници и сървъри. И сигурно са прави -той е направен за това. Аз обаче ще се възползвам от една малко позабравена подробност. PHP идва в три варианта:
- CGI – php-cgi.exe –old style CGI вариант. Когато даден потребител отвори страницата index.php (примерно!) Web сървъра стартира php.exe и му подава необходимитепараметри през променливите на средата (environment variables)
[ http://en.wikipedia.org/wiki/Common_Gateway_Interface].
Следва обработва PHP кода и връщане резултантната страница, която потребителят вижда в Web браузъра си
- CLI (Command Line Interpreter)– php.exe/php-win.exe – изпълним конзолен файл. При подаване на пътя до .php файл като параметър през command prompt, php.exe го интерпретира и извежда резултата на стандартния изход.
Между другото, виждал съм много статии за това как да настроите IIS и PHPв CGI вариант, в които грешно сеизползва php.exe. И следват купчина коментари, че web страниците зависвали. И има защо. php.exe НЕ връща никакви хедъри, защото е CLI, а php-cgi.exe връща. Пример:
[code]D:\Programs\PHP>php-cgi.exe
еcho “Hello!”;^Z
X-Powered-By: PHP/5.2.8
Content-type: text/htmlHello![/code]
А Вашият браузър изчаква заточно тези хедъри, последвани от празен ред, за да разбере какво точно му подава Web сървъра.”Изчаква”-нето на браузъра потребителят вижда като упоменатото забиване 🙂
Запомнихте ли? При IIS и PHP като CGI вариант използвайте php-cgi.exe 😉
- ISAPI – обикновено .dll библиотека, която Web сървъра зарежда при стартирането си. Останалото е почти като при CGI варианта.
“…изпълним конзолен файл…” и “…при подаване на пътя до .php файл като параметър…” – ключът от палатката!
Защо Web сървъра да може да стартира един файл и да му подава параметри, а аз да не мога? Мога разбира се! Дефакто правим същото при стартиране на .vbs файл:
cscript.exe someScript.vbs
Аналогията с PHP е пълна:
php.exe somePhpScript.php
Позволявам си да запиша php.exe без пълния път до него, защото съм си го добавил в променливата %path% на Windows, което всъщност си е задължително за нормалната му инсталация.
Ако искате да изпълнявате скриптовете си с конкретна версия/инсталация на php укажете пълния път при извикването на php.exe.
Ето какво имам предвид:
- имам инсталирано PHP;
- конфигуриралсъм коректно PHP-то;
- направил съмси тестов PHP файл със следното съдържание:
[code]<?php
echo “Hello World!”;
?>[/code]
- в Command Prompt записвам следното:
[code]php.exe e:\www\phpTestFile.php[/code]
Резултатът:
[singlepic=127]
Забравете HTML таговете в PHP сорса. Те няма да Ви трябват – все пак Command Prompt не е Web браузър 🙂
[Примерна задачка-закачка]:
[code]Да се изведат имената на файловете от папката C:\Dev-Cpp\bin иMD5 сумата на тяхното съдържание[/code]
Решението в 10 реда:
[code]<?
path = “C:\\Dev-Cpp\\bin\\”;
$dir_handle = @opendir($path) or die(“Unable to open $path”);
while ($file = readdir($dir_handle))
{
if (is_file($path.$file))
echo “FILE: “.strtoupper(md5_file($path.$file)).” | $file\n”;
}
closedir($dir_handle);
?>[/code]
Изпълнявам този php скрипт по познатия вече начин:
[code]php.exe e:\www\fileList.php[/code]
И в прозореца на Command Prompt виждам резултата:
[singlepic=128]
Страхотийка – хем цъкаш PHP за Web, хем за скриптинг 🙂
Както сЪ вика: От всеки Web-ер ->script-ер 🙂 🙂 🙂
Неудобството при използване на този подход е, че трябва предварително да инсталирате PHP на компютрите, където ще изпълнявате .php скриптовете. Вариантите са няколко:
-
Сваляте си php.xyz.installer.msi и го разпространявате по машините чрез групова политика или SMS (Software Management Server)
-
Сваляте си само архив на PHP (без инсталатор), разархивирате го и го разпространявате с добрите стари и верни .CMD или.VBS скриптове:)
Текуща версия на PHP в двата варианта (ZIP и MSI) можете да намерите тук: [http://www.php.net/downloads.php ]
“The power is yours … use it!”
Интересна статийка 🙂
Разгледах и инфо в Интернет…Благодаря Ви за линковете
Забелязах и идейките за използването на`php -r`
Интересна е опцийката -r примерче( и не само това 🙂 ) за използване 🙂
% php -r ‘echo “Hello teacher!\n”;’
Hello teacher!
Ето и една бърза математическа закачка:
% php -r ‘echo sqrt(150).”\n”;’
12.247448713916
Може ли да намерим колко седмици има в годината?!?!
%$ php -r ‘echo date(“W”) . “\n”;’
26
Може да разберем кога се пада и 24 май 🙂
% php -r ‘echo date(“l”, strtotime(“2009-05-24”)) . “\n”;’
🙂 🙂 🙂
Може ли да генерираме и случаен номер за изпитване в училище 🙂 :Л) 🙂
% php -r ‘echo rand(0, 100) . “\n”;’
38
Та такива ми ти работи
Още веднъж благодаря за статията и подсещането !!!!
Лек, доходен ден и за вас
Случайно попаднах на този пост реших да се занимая с малко апологетика на vbs/wsh/js
Не е проблем да се включи код с външен файл ако се използва .wsf файл – https://msdn.microsoft.com/en-us/subscriptions/downloads/15x4407c(v=vs.84).aspx – дори е възможно включването на jscript (!) код (който в повечето случаи предпочитам – най -голямото предимство на vbscript e подаването по референция – http://webcoder.info/reference/vbsvsjs.html).С jscript могат да се адресират и проблемите с времето в милисекунди,скороста и донякъде hash функции.Колкото до checksums единственият вграден алгоритъм в Windows e с командата MAKECAB (но не е MD5) – все пак по-малък “разход” е ползването на външен скрипт отколкото инсталирането на нов скриптов език .Също доста ползвана е хибридизацията с .bат файлове – http://www.dostips.com/forum/viewtopic.php?p=33963 . (което може да стане лесно и с php стига да позволява изпълнението на файл с разширение различно от .php) .
Въпреки ,че вече си има powershell който скоро ще стане единственият смислен скриптов език под уиндоус.