Что нового

[Время, дата] чтение значений с сайта или локально

retwyware

Новичок
Сообщения
10
Репутация
0
Версия AutoIt: 3.
3.3.14.5
Описание:
Всем привет. Мне нужно, чтобы таймер обратного брал значения времени с моего сайта из файла .ini и сохранял при закрытии эти значения на сервере, а после повторного запуска, считывал данные и продолжал отсчет с этого же значения времени.

Ну и чтобы это время выводилось в label и после истечения этого времени показывался бы messagebox
Примечания:
Если невозможно так сделать, то хотя бы локально, чтобы брались значения из ini файла рядом со скриптом
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
Local $iMaxTime = 10, $sIniPath = @ScriptDir & "\timer.ini"
Local $hGUI = GUICreate("timer", 100, 50)
Opt("GUIOnEventMode", 1)
$hLabel = GUICtrlCreateLabel($iMaxTime, 5, 5, 25, 25)
GUISetOnEvent(-3, "_onclose")
GUISetState(@SW_SHOW, $hGUI)
$iMaxTime = Int(IniRead($sIniPath, "timer", "sec", $iMaxTime))
While 1
	IniWrite($sIniPath, "timer", "sec", $iMaxTime)
	GUICtrlSetData($hLabel, $iMaxTime)
	If $iMaxTime <= 0 Then ExitLoop
	Sleep(1000)
	$iMaxTime = $iMaxTime - 1
WEnd
GUIDelete($hGUI)
MsgBox(0, "таймер", "время вышло!", 30)

Func _onclose()
	Exit
EndFunc


Доступ к сайту как осуществляться будет, через FTP или через API скрипт, например, на PHP?
 
Автор
R

retwyware

Новичок
Сообщения
10
Репутация
0
alex33 сказал(а):
Код:
Local $iMaxTime = 10, $sIniPath = @ScriptDir & "\timer.ini"
Local $hGUI = GUICreate("timer", 100, 50)
Opt("GUIOnEventMode", 1)
$hLabel = GUICtrlCreateLabel($iMaxTime, 5, 5, 25, 25)
GUISetOnEvent(-3, "_onclose")
GUISetState(@SW_SHOW, $hGUI)
$iMaxTime = Int(IniRead($sIniPath, "timer", "sec", $iMaxTime))
While 1
	IniWrite($sIniPath, "timer", "sec", $iMaxTime)
	GUICtrlSetData($hLabel, $iMaxTime)
	If $iMaxTime <= 0 Then ExitLoop
	Sleep(1000)
	$iMaxTime = $iMaxTime - 1
WEnd
GUIDelete($hGUI)
MsgBox(0, "таймер", "время вышло!", 30)

Func _onclose()
	Exit
EndFunc


Доступ к сайту как осуществляться будет, через FTP или через API скрипт, например, на PHP?
Я не знаю, если вам не трудно, то сделайте вариант, который по вашему мнению проще. И спасибо за локальный вариант =)


Добавлено:
Сообщение автоматически объединено:

retwyware сказал(а):
alex33 сказал(а):
Код:
Local $iMaxTime = 10, $sIniPath = @ScriptDir & "\timer.ini"
Local $hGUI = GUICreate("timer", 100, 50)
Opt("GUIOnEventMode", 1)
$hLabel = GUICtrlCreateLabel($iMaxTime, 5, 5, 25, 25)
GUISetOnEvent(-3, "_onclose")
GUISetState(@SW_SHOW, $hGUI)
$iMaxTime = Int(IniRead($sIniPath, "timer", "sec", $iMaxTime))
While 1
	IniWrite($sIniPath, "timer", "sec", $iMaxTime)
	GUICtrlSetData($hLabel, $iMaxTime)
	If $iMaxTime <= 0 Then ExitLoop
	Sleep(1000)
	$iMaxTime = $iMaxTime - 1
WEnd
GUIDelete($hGUI)
MsgBox(0, "таймер", "время вышло!", 30)

Func _onclose()
	Exit
EndFunc


Доступ к сайту как осуществляться будет, через FTP или через API скрипт, например, на PHP?
Наверно через ftp, я просто не хочу много вашего времени тратить
 

alex33

Скриптер
Сообщения
1,457
Репутация
186

Через FTP будет не безопасно, т.е. логин и пароль для доступа будут, по сути, в открытом доступе и каждый может этим воспользоваться, даже если скрипт скомпилирован, и нанести вред сайту. Так что лучше через скрипт. Самый распространенный - это PHP. Для этого, для сохранения значения можно будет использовать не ini файл, а просто обычный файл, иначе придется еще парсер ini прикручивать (PHP таких удобных Ini* функций не имеет).
Короче. Создаете у себя на сайте файл timer.php со следующим кодом: форум заменяет [ на &#91; это [
PHP:
<?php
$sPath = __DIR__ . '/timer_sec1.txt';
if(isset($_GET['sec'])&&is_numeric($_GET['sec'])) {
	$hFile = fopen($sPath, 'c') or die('error1');
	flock($hFile, LOCK_EX) or die('error2');
	ftruncate($hFile, 0) or die('error3');
	fwrite($hFile, $_GET['sec']) or die('error3');
	flock($hFile, LOCK_UN) or die('error5');
	fclose($hFile) or die('error6');
	print('ok');
} else {
	if(!file_exists($sPath)){
		print('0');
		exit();
	}
	print(file_get_contents($sPath));
}
Теперь у себя на компьютере .au3 скрипт: (test.ru на свой сайт замени)
Код:
Global $sTimerUrl = "http://test.ru/timer.php"
Global $iMaxTime
Local $bData = InetRead($sTimerUrl, 3) ; получаем (читаем) текущее значение
If @error Then Exit MsgBox(16, "", "Нет доступа к Интернет / к сайту", 30)
$iMaxTime = Int(BinaryToString($bData))

OnAutoItExitRegister("_saveTimer")
Local $hGUI = GUICreate("timer", 100, 50)
Opt("GUIOnEventMode", 1)
$hLabel = GUICtrlCreateLabel($iMaxTime, 5, 5, 25, 25)
GUISetOnEvent(-3, "_onclose")
GUISetState(@SW_SHOW, $hGUI)
While 1
	GUICtrlSetData($hLabel, $iMaxTime)
	If $iMaxTime <= 0 Then ExitLoop
	Sleep(1000)
	$iMaxTime = $iMaxTime - 1
WEnd
GUIDelete($hGUI)
MsgBox(0, "таймер", "время вышло!", 30)

Func _saveTimer()
	Local $bData = InetRead($sTimerUrl&"?sec="&$iMaxTime, 3) ; сохранение при выходе
	If @error Or BinaryToString($bData) <> "ok" Then MsgBox(16, "", "Ошибка сохранения. Нет доступа к Интернет / к сайту"&@CRLF&BinaryToString($bData), 30)
EndFunc
Func _onclose()
	Exit
EndFunc
 
Автор
R

retwyware

Новичок
Сообщения
10
Репутация
0

Всё работает, но таймер почему то показывает диалог через 1 секунду, не реагируя на изменение максимального времени
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Ну как это не реагируя. Время максимальное установили? /timer.php?sec=60 , например?


Добавлено:
Сообщение автоматически объединено:

Или нужно чтобы прямо во время отсчёта можно было менять макс. время?
 
Автор
R

retwyware

Новичок
Сообщения
10
Репутация
0
alex33 сказал(а):
Ну как это не реагируя. Время максимальное установили? /timer.php?sec=60 , например?


Добавлено:
Сообщение автоматически объединено:

Или нужно чтобы прямо во время отсчёта можно было менять макс. время?




Все, все. Я накосячил, спасибо)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я уж видел ваше письмо на почту. Только адрес, скорее всего, временный tempmail?


Добавлено:
Сообщение автоматически объединено:

А зачем Вам такой таймер? Как и где хотите его использовать? Почему не подошел локальный вариант?
 
Автор
R

retwyware

Новичок
Сообщения
10
Репутация
0
alex33 сказал(а):
Я уж видел ваше письмо на почту. Только адрес, скорее всего, временный tempmail?


Добавлено:
Сообщение автоматически объединено:

А зачем Вам такой таймер? Как и где хотите его использовать? Почему не подошел локальный вариант?




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