Публикация по FTP

 

На фоне заморочек с отсылкой почты средствами МТ4

хотелось бы отметить великолепную и гибкую работу функции SendFTP()

-

Предварительные настройки терминала.

Начнём с вкладки Меню-Сервис-Настройки-Публикация,

где разрешим собственно публикацию выставлением птички в чекбоксе "Разрешить".

Что и куда вводить хорошо видно на рисунке, лишь добавлю несколько замечаний.

- Если не указывать номер счёта, то публикаций отчёта не будет,

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

! окно выбора периода обновления относится только к публикации отчёта!

- В поле FTP сервер как правило не вызывает затруднений что туда вписать

- Поле FTP каталог, ну здесь несколько особенностей, пробуйте это не сложно из вариантов:

0:/ или / или httpd или каталог название домена domen.net

так мы попадём в корневую папку на сервере, однако посоветую указать путь к папке "заглушке"

имеющую внутри два обязательных для своей роли файла: .htaccess и на всяк пожарный index.html

На рисунке указан именно такой путь... тем самым обезопасив себя от неконтролируемой публикации...

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

-

Вы спросите: а как-же публикация отчёты?

Да просто, из советника или скрипта !

Плюс в том, что этот отчёт может иметь нестандартный формат...

- Логин и Пароль тоже не проблема.

- Пассивный режим. Его включение позволяет работать практически со всеми серверами...

- Кнопка "Тест". Очень полезная кнопка!

Вот собственно и всё по настройкам...

Использование SendFTP()

//+------------------------------------------------------------------+
int start()
  {
SendFTP( "services\Text.txt", "httpd/publ/"); 
GetLastError();
   return(0);
  }
//+------------------------------------------------------------------+

Разберём на примере самого простого скрипта осуществляющего отправку указанного файла.

Функция имеет в своих свойствах два параметра:

- путь к файлу относительно папки ..\MetaTrader 4\experts\files\

В которой вы можете завести свои папки, которые и вклюсаете в путь

(лидирующий слеш указывать не надо !!! )

на примере выше, файл находится тут: ..\MetaTrader 4\experts\files\services\Text.txt

Если же файл находится в папке \files то указываем просто его имя и всё...

- путь на сервере указывается относительно его корня, лидирующий и закрывающий слеши

не влияют на правильность, т.е. пути:

/httpd/publ/ или httpd/publ/ или httpd/publ или /httpd/publ

будут абсолютно одинаковы, за исключением редчайшего случая когда сервер

не слешит автоматом завершение адреса...

Этой темой попытался расширить кругозор применения возможностей МТ4.

Чего не хватает? или не заметил в свойствах...

Это передача на сервер не файла, точнее не копирования а формирования.

Проясню...

Допустим имеется некая текстовая информация в переменной TXT, а на сервер

передаем с указанием имени файла, например так:

SendFTP(TXT, "httpd/put/"+nameFile);

где вдобавок есть переменная nameFile позволяющая динамично менять имя,

например по дате, номеру счёта и т.д...

 
kombat:

Чего не хватает? или не заметил в свойствах...
Это передача на сервер не файла, точнее не копирования а формирования.

Ну, так пишем функцию с входными параметрами TXT и FIleName и пользуем ее ;)

 
komposter:
kombat:

Чего не хватает? или не заметил в свойствах...
Это передача на сервер не файла, точнее не копирования а формирования.

Ну, так пишем функцию с входными параметрами TXT и FIleName и пользуем ее ;)

А подробнее?

-

Верно ли понял что пишем функцию которая пишет файл который потом копируем на сервер?

Смысл? тем более это таки и не проблема реализовать... ;)

-

А вот заслать инфу напрямую, без промежуточного файла, который мы по сути просто копируем,

этого хочется видеть...

Например:

int start()
  {
SendFTP(MarketInfo(Symbol(),MODE_SPREAD), "httpd/publ/spread.html"); 
GetLastError();
   return(0);
  }
// скрипт НЕ для работы !!!

на сервере бы появился файл spread.html

в котором записана посланая инфа, в данном случае величина спреда, например 3

-

Попутно. Решил таки и вопрос почты...

https://www.mql5.com/ru/forum/52554

Оказалось всё проще простого:

после ввода\смены данных в настройках

надо обязательно перезагрузить терминал!

 
kombat:

Верно ли понял что пишем функцию которая пишет файл который потом копируем на сервер?
Смысл? тем более это таки и не проблема реализовать... ;)

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

Хотя, было бы удобно создавать/редактировать/удалять файлы прямо на сервере. Но тут может встать вопрос безопасности.

 

ок!

разложим по полочкам...

Основное: терминал своим внутренним клиентом копирует файл на сервер фтп.

Это уже есть, и работает отлично. Проверено.

-

А вот что предложено по расширению функции SendFTP()

1. Добавить третий парамер "имя файла на сервере"

где любое строковое значение будет флагом что на сервер терминал будет копировать

виртуальный файл с указаным в этом парамере именем... а в первом парамете находится переменная

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

0, NULL и пустое значение это флаг терминалу на простое копирование файла из первого параметра.

Напрмер:

// обычное копирование, как это сейчас
SendFTP("имяфайла.тхт", "путь/на/сервер/фтп")
// предложение по развитию фукционала
SendFTP(TXT, "путь/на/сервер/фтп", "имяфайла.тхт")

2. Серверу фтп же без разницы откуда идёт копирование...

напрямую с диска источника или с виртуального диска виртуальный файл. ;)))

Причина обращения: