Вызовите URL-адрес с помощью wget и верните ERRORLEVEL в зависимости от содержимого URL-адреса.

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

Есть две вещи, которые нужно синхронизировать: новые файлы (уже отсортированные) и база данных mySQL. Для этого я пишу скрипт, который экспортирует базу данных в файл дампа с помощью mysqldump и загружает дамп.

Процесс загрузки выполняется с помощью стороннего инструмента под названием ScriptFTP, инструмента автоматизации FTP.

Затем мне нужно запустить сценарий импорта на основе PHP на целевом сервере. В зависимости от значения, возвращаемого этим сценарием, операция ScriptFTP продолжается, и некоторые каталоги переименовываются.

Для этого мне нужен внешний инструмент, так как scriptFTP поддерживает только FTP-вызовы. Я думал о версии wget для Windows.

В scriptFTP я могу выполнить любой пакетный или исполняемый файл, но я могу только проанализировать уровень ошибки, полученный в результате вызова, а не вывод stdout. Это означает, что мне нужно вернуть errorlevel 1, если операция импорта PHP пойдет не так, и errorlevel 0, если все пойдет хорошо. Кроме того, очевидно, мне нужно вернуть положительный уровень ошибки, если соединение со сценарием импорта вообще не может быть установлено.

У меня есть полный контроль над скриптом импорта PHP, и я могу решить, что он делает при ошибке: выводит сообщение об ошибке, возвращает заголовок, что угодно.

Как вы собираетесь запускать wget (или любой другой инструмент для запуска импорта на стороне сервера) и возвращать определенный уровень ошибки в зависимости от того, что возвращает PHP-скрипт?

Лучше всего сейчас я создаю пакетный файл, который выполняет команду wget, сохраняет результат в файле, а пакетный файл возвращает уровень ошибки 0 или 1 в зависимости от содержимого файла. Но я действительно не знаю, как сопоставить содержимое файла с помощью пакетного программирования.


person Pekka    schedule 09.01.2010    source источник
comment
TMHO, использование php-curl было бы лучше, чем wget   -  person Amirshk    schedule 09.01.2010
comment
Я не могу запустить PHP на стороне клиента, только на удаленном сервере. Здесь я ограничен инструментами командной строки.   -  person Pekka    schedule 09.01.2010
comment
Если это сервер Windows, не будет ли проще написать небольшое приложение на C#, которое будет анализировать вывод и возвращать правильный код ошибки?   -  person Amirshk    schedule 09.01.2010
comment
Определенно, но я не говорю на С#, и в последний раз я создавал приложение для Windows на каком-либо языке пять лет назад. :) В этом случае я бы предпочел готовый инструмент, я не против использовать что-то совершенно отличное от wget.   -  person Pekka    schedule 09.01.2010
comment
(проверить Википедию, что такое powershell) (проверить версию Windows) да, я могу использовать Powershell.   -  person Pekka    schedule 09.01.2010


Ответы (1)


Вы можете сделать следующее в powershell:

$a = wget --quiet -O - www.google.com
$rc = $a.CompareTo("Your magic string")
exit $rc
person Amirshk    schedule 09.01.2010
comment
В PowerShell вам даже не нужно wget. Просто используйте System.Ne.WebClient и его метод DownloadString. - person Joey; 10.01.2010
comment
Великолепно, это работает идеально. Большое спасибо. @Johannes Rössel: Спасибо и за этот совет, я его изучу. - person Pekka; 10.01.2010
comment
У меня есть дополнительный вопрос: stackoverflow.com/questions/2044011/, если кто-то хочет взглянуть. - person Pekka; 11.01.2010