Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.14;
Скачать: CL | DM;

Вниз

Как запустить пакетный (командный) файл (.bat, .cmd) из php ?   Найти похожие ветки 

 
SP   (2009-04-08 12:55) [0]

сабж...
нужно запустить bat (или cmd) файл из php, и нужна возможность отслеживание выполняется ли он или уже выполнился, чтобы не запускать несколько экземпляров одновременно.


 
test ©   (2009-04-08 13:13) [1]

Взводить переменную в коде? На конец выполнения батника предпринимать действие чтобы php получило событие?


 
Фыва   (2009-04-08 13:35) [2]

А батничек будет классический:
@format c:


 
SP   (2009-04-08 13:38) [3]

Попробовал запускать через shell_exec()
Но скрипт тогда приостанавливается пока не выполнится батник...
Хотя можно и так оставить. Тогда слежение за выполнением можно и так сделать:


> Взводить переменную в коде?


Вот еще 2 вопроса есть:
1. Можно ли весь вывод в консоль запихнуть в переменную, чтобы я мог ее вывести на страничке?

2. Что касается:

> Взводить переменную в коде?

подскажите как это проще реализовать.
Хотелось бы просто создавать и удалять файлик, или может еще какой-нить способ есть. Но с ПХП я не особо дружу и не знаю как это сделать.
Могу конечно сделать такой флажок в БД (есть под руками Oracle), но ИМХО это как из пушки по воробьям.


 
SP   (2009-04-08 13:41) [4]


> Фыва   (08.04.09 13:35) [2]
>
> А батничек будет классический:
> @format c:


Почему всегда здесь у всех какие-то нехорошие подозрения возникают?

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


 
@!!ex ©   (2009-04-08 13:48) [5]

> [4] SP   (08.04.09 13:41)
> А вот через веб-сервер могло бы получиться неплохо...

Ну так и сделай свой Web Server, повесь его на каком ниьт порту и пускай они к нему обращаються.
А ты на сервере получая запрос уже вообще можешь делать чего хочешь.

P.S.
На готовых компонентах вебсервер пишется за 10 минут. Проверено. Сейчас пользуюсь самописным веб интерфейсом для Download Master.


 
SP   (2009-04-08 13:57) [6]


> Ну так и сделай свой Web Server, повесь его на каком ниьт
> порту и пускай они к нему обращаються.
> А ты на сервере получая запрос уже вообще можешь делать
> чего хочешь.


Если на Дельфи - то написать могу...
Но у меня уже стоит Апач и ПХП. Хотелось бы воспользоваться тем, что имеется.

Как создать и удалить файл нашел
вот пока не могу найти как проверить или файл существует.


 
test ©   (2009-04-08 13:57) [7]

SP   (08.04.09 13:38) [3]
dir c:\ >>dir.txt


 
SP   (2009-04-08 14:03) [8]


> вот пока не могу найти как проверить или файл существует.


Уже нашел... Вроде работает...


> test ©   (08.04.09 13:57) [7]
>
> SP   (08.04.09 13:38) [3]
> dir c:\ >>dir.txt


хм... а в переменную нельзя никак?
хотя в принципе и в файл пойдет...


 
Anatoly Podgoretsky ©   (2009-04-08 14:41) [9]

> SP  (08.04.2009 13:41:04)  [4]

A PHP зачем?


 
test ©   (2009-04-08 14:42) [10]

SP   (08.04.09 14:03) [8]
По умолчанию он пишет в стандартный вывод, можно перенаправить хоть куда, но обычно в файл скидывают так проще с ним работать, хоть на prn или con ))


 
Ega23 ©   (2009-04-08 14:44) [11]


> Но у меня уже стоит Апач и ПХП. Хотелось бы воспользоваться
> тем, что имеется.


У тебя такая хитрая конфигурация апача, которая не позволяет зпускать cgi?  :)))


 
SP   (2009-04-08 16:18) [12]


> У тебя такая хитрая конфигурация апача, которая не позволяет
> зпускать cgi?  :)))


Не работал я никогда с cgi

Кстати возникла новая проблема:

if (file_exists("flag.flg"))
  { echo "Нельзя запускать ";}
  else
  {
   $h=fopen("flag.flg","w+");
   fclose($h);
   $mycmd="post_start.cmd";
   shell_exec($mycmd);
   if (unlink("flag.flg"))
       { echo "Файл удален"; }
        else
       { echo "Ошибка при удалении файла"; };
   };


Если апач работает под системной учетной записью, то все нормально запускается, но тоже под SYSTEM. И этот cmd не может создать папку на на расшареном ресурсе другого сервера.
Если же запускаю апач от другого пользователя (с правами администратора), то cmd-шка из ПХП вообще не хочет запускаться.


 
Ega23 ©   (2009-04-08 16:23) [13]


> Не работал я никогда с cgi


cgi - суть прогрмма, которой на вход подают Request, а она выдаёт Responce


 
Ega23 ©   (2009-04-08 16:24) [14]

Судя по тому, что у тебя windows, программа пишется за 5 минут на тех же Delphi.


 
Ega23 ©   (2009-04-08 16:26) [15]

Очень примитивная cgi:

program CgiVars;
{$APPTYPE CONSOLE}
{$E cgi}
uses
 Windows;

const
  VarList: array [1..17] of string [30] =
    ("SERVER_NAME", "SERVER_PROTOCOL",
    "SERVER_PORT", "SERVER_SOFTWARE",
    "GATEWAY_INTERFACE", "REQUEST_METHOD",
    "PATH_TRANSLATED", "HTTP_REFERER",
    "SCRIPT_NAME", "PATH_INFO",
    "QUERY_STRING", "HTTP_ACCEPT",
    "REMOTE_HOST", "REMOTE_USER",
    "REMOTE_ADDR", "REMOTE_IDENT",
    "HTTP_USER_AGENT");

 var
  I: Integer;
  ReqVar: string;
  VarValue: array [0..200] of Char;

begin
 writeln("Content type: text/html");
 writeln;
//  writeln("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//RU">");
 writeln("<HTML><HEAD>");
 writeln("<TITLE>CGI Variables</TITLE>");
 writeln("</HEAD><BODY>");
 writeln("<H1>CGI Variables</H1>");
 writeln("<HR><PRE>");

 for I := Low (VarList) to High (VarList) do
  begin
  ReqVar := VarList[I];
  if (GetEnvironmentVariable (PChar(ReqVar),
  VarValue, 200) > 0) then
  else
  VarValue := "";
  writeln (VarList[I] + " = " + VarValue);
  end;
 writeln("</PRE></BODY></HTML>");
end.


 
SP   (2009-04-08 17:32) [16]


> Ega23 ©   (08.04.09 16:26) [15]
>
> Очень примитивная cgi:


Хм. Попробовал. понравилось.
Спасибо.


 
Jeer ©   (2009-04-08 17:47) [17]

Мне, вот просто, инетересно.
Ведь с cgi почти все и начиналось, практически.
Не соврать, 12 лет назад писалась масс серверных cgi-приложений.
Ну да, еще был "начальный" ASP от Микрософт.

Перезагрузка второго поколения "пепси" ?


 
Ega23 ©   (2009-04-08 17:58) [18]


> Перезагрузка второго поколения "пепси" ?


Не знаю. Я с веб-прогрммированием только последний год как знаком. Кк раз cgi и fastcgi в голом виде


 
12   (2009-04-08 18:04) [19]

>> Кк раз cgi и fastcgi в голом виде
А мне вообще сложно представить, зачем больше надо


 
SP   (2009-04-08 19:34) [20]

Кстати, а можно ли заставить сервер выдавать в браузер информацию "насильно" после определенных writeln ?
Что-то типа пхп-шного flush.
Ибо отрабатывается эта cgi долго, и было бы неплохо таким образом показывать ход выполнения.


 
atruhin ©   (2009-04-08 19:54) [21]

> [18] Ega23 ©   (08.04.09 17:58)
> Кк раз cgi и fastcgi в голом виде

А что используешь для FastCGI? Какие библиотеки?


 
Ega23 ©   (2009-04-08 20:04) [22]


> Кстати, а можно ли заставить сервер выдавать в браузер информацию
> "насильно" после определенных writeln ?


Нет. Насколько я понимаю - нет. У тебя связь Брузер-сервер создётся каждый раз на запрос. Зпрос - httpRequest. Ушёл на сервер. Всё, что GET - передалось в CGI через пременные оружения. Всё, что POST - передлось в CGI через stdIn. Дальше сервер ждёт, когда этот зпрос будет обработан. Обработался - выдл ответ (в стандарте HTTP). Долго обрабатывется - выдал ответ в стандарте HTTP - по тймауту (настраивается на сервере). И всё.
Т.е. web-сервер, по существу, очень тупая вещь. Получил запрос, проверил его на соответствие стандарту - передал обработку куда-то по URI, дождался ответ, оттранслировал его браузеру. Браузер проверил ответ на соответствие стандарту и дальше сделал что-то.


 
Ega23 ©   (2009-04-08 20:08) [23]


> А что используешь для FastCGI? Какие библиотеки?


Я нашёл в сети некую библиотечку libfcgi.dll (с интерфейсным pas-файлом) и модуль для Apache 2.2 (mod_fastcgi-2.4.6-AP22.dll) c описанием, как это в http.conf прикрутить.
А дальше у меня крутился полноценный FastCGI-сервер, всякие коннекты, логика и т.п. В браузер выдвал всё через JSON (крайне удобный формат, учитывая функцию eval() в JavaScript)


 
SP   (2009-04-08 20:21) [24]


> Нет. Насколько я понимаю - нет. У тебя связь Брузер-сервер
> создётся каждый раз на запрос. Зпрос - httpRequest. Ушёл
> на сервер. Всё, что GET - передалось в CGI через пременные
> оружения. Всё, что POST - передлось в CGI через stdIn. Дальше
> сервер ждёт, когда этот зпрос будет обработан. Обработался
> - выдл ответ (в стандарте HTTP). Долго обрабатывется - выдал
> ответ в стандарте HTTP - по тймауту (настраивается на сервере).
>  И всё.
> Т.е. web-сервер, по существу, очень тупая вещь. Получил
> запрос, проверил его на соответствие стандарту - передал
> обработку куда-то по URI, дождался ответ, оттранслировал
> его браузеру. Браузер проверил ответ на соответствие стандарту
> и дальше сделал что-то.


Запросы меня не интересуют. Меня интересует именно ответ. Ибо cgi ответ отсылает по частям... И хотелось бы чтобы браузер имел возможность так же и принимать его...А получается что сервер видимо накапливает где-то себе в буфере, а потом выдает (правда тоже частями, но эти части уж больно паскудными получаются).


 
antonn ©   (2009-04-08 22:18) [25]


> Перезагрузка второго поколения "пепси" ?

где тут перезагрузка? человеку показали пример, ему понравилось, не факт что он примет на вооружение (хотя бы из-за того, что на юнихах не пашет, да и на дешевых хостингах доступ к шелу ограничен). А когда дойдет очередь до обработки, то окажется, что пхп и перл выруливают по удобству и скорости разработке, совсем незначительно уступая в скорости (в контексте примера). там еще надо посмотреть как cgi запускается, а то подключатся куча клиентов и память выжрут.
Поколение пепси уже в 16 лет клепает свои сайты и свободно ориентируется в ООП, тогда так поколение "допепси" все это делало в уме и в тетрадках в клеточку в куда меньших объемах.


 
test ©   (2009-04-08 23:25) [26]

antonn ©   (08.04.09 22:18) [25]
Читать только не умеет и не любит.


 
antonn ©   (2009-04-08 23:38) [27]

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


 
Игорь Шевченко ©   (2009-04-08 23:43) [28]

antonn ©   (08.04.09 22:18) [25]


> Поколение пепси уже в 16 лет клепает свои сайты и свободно
> ориентируется в ООП, тогда так поколение "допепси" все это
> делало в уме и в тетрадках в клеточку в куда меньших объемах.
>


А еще очень быстро нажимает на кнопки на сотовом телефоне при отправке СМС-сообщений.

Насчет свободного ориентирования в ООП - ты вопросы хотя бы на этом сайте почитай для развеивания иллюзий.


 
antonn ©   (2009-04-08 23:51) [29]

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

PS зато неплохо показывает степень воспитанности, но не "пепси" :)


 
antonn ©   (2009-04-08 23:55) [30]

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

PS просто имхо


 
Игорь Шевченко ©   (2009-04-09 00:06) [31]

antonn ©   (08.04.09 23:51) [29]

Этот сайт довольно типичный.

Но я не к этому, я не зря привел аналогию про сотовые телефоны, которые, как и ООП, кстати, были созданы теми, кто "в тетрадках в клеточку".


 
Ega23 ©   (2009-04-09 09:58) [32]


> Ибо cgi ответ отсылает по частям...


Не отсылает оно по частям.


 
Ega23 ©   (2009-04-09 09:59) [33]

Сделй абсолютно тупую вещь - поставь в середине cgi Sleep(60000). И посмотри каким-нибудь FireBug"ом что тебе в браузер придёт.


 
12   (2009-04-09 10:07) [34]

>> cgi ответ отсылает по частям
отсылает как захочет, по моим наблюдениям

repeat
writeln(\"<br> QQQQQQQQQQQQ\");
until false

и смотрим на постоянно растущий вывод


 
antonn ©   (2009-04-10 00:15) [35]

если включить zlib эффект будет более интересным :)


 
Petr V. Abramov ©   (2009-04-10 00:20) [36]


> Ну и как бы вообще, я дельфи увидел на втором курсе института,
>  а мой сосед которому 15 лет уже пишет какой то блог (ну
> сейчас в смысле).

я тоже увидел дельфи на втором курсе и тоже в 15 лет писал записочки девочкам на бумажках (e-mail) и на заборах (блог)
как одно сдругим связано?


 
antonn ©   (2009-04-10 01:26) [37]

не ведет блог, а пишет его.


 
Petr V. Abramov ©   (2009-04-10 01:52) [38]


> antonn ©   (10.04.09 01:26) [37]

не понимаю разницы между "ведет" и "пишет", но еси под вторым имеется в иду какое-то веб-программирование, то тоже ниче особого, я как раз в 13-14 делал первые шаги в программизме, на СМ-4, а счас это на порядки доступнее.


 
antonn ©   (2009-04-10 01:55) [39]

да, действительно, фигня какая то, че уж там, в 10 лет бейсик по ТМ выучен и полет на луну для МК-54 по памяти набирается.
тему можно закрыть наверное.


 
Плохиш ©   (2009-04-10 02:08) [40]


> SP   (08.04.09 20:21) [24]


> Запросы меня не интересуют. Меня интересует именно ответ.
>  Ибо cgi ответ отсылает по частям...

Приложение cgi ничего никуда не посылает, оно пишет текст в стандартный поток вывода. А ответ посылает веб-сервер, который руководствуется при отправке, как не странно, стандартом, в частности, на размер сетевого пакета.

> 12   (09.04.09 10:07) [34]
>
> >> cgi ответ отсылает по частям
> отсылает как захочет, по моим наблюдениям
>
> repeat
> writeln(\"<br> QQQQQQQQQQQQ\");
> until false
>
> и смотрим на постоянно растущий вывод
>

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



Страницы: 1 2 вся ветка

Текущий архив: 2009.06.14;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.013 c
2-1240600979
kami
2009-04-24 23:22
2009.06.14
Преимущества нескольких соединений (TCP или UDP ) над одним


15-1239175665
Usov
2009-04-08 11:27
2009.06.14
Проблема отображения на сервере параметров с POST запроса


1-1211343260
Julia
2008-05-21 08:14
2009.06.14
TJvInterpreterProgram


11-1201359442
Elec3C
2008-01-26 17:57
2009.06.14
Вопрос по Button у


15-1239189575
VoznikVopros
2009-04-08 15:19
2009.06.14
Как перенести компоненты InterBase без потери функциональности?