Что нового

обмен данными с PHP

Kap

Новичок
Сообщения
8
Репутация
0
Требутеся отсылать и получать данные от PHP интерпретатора. Как проще всего это сделать?

скрипт и интепретатор на одной машине
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Kap [?]
Требутеся отсылать и получать данные от PHP интерпретатора.
Если дело касается только PHP, то думаю это не тот форум куда Вам стоит обращаться. А если требуется автоматизировать процесс при помощи AutoIt (совсем не понятно для чего и Что), то наверно нужно более развернутое объяснение проблемы.
 
Автор
K

Kap

Новичок
Сообщения
8
Репутация
0
Мне нужен обмен данными из AutoIT в php и обратно
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Kap вот вам примеры PHP -> Autoit, Autoit -> PHP аналогично ;)

Что касаемо PHP+Autoit, то мной опробовано два способа передачи данных.

Это просто примеры!!!

Пример: STDIN / STDOUT.

autoit_script.au3
Код:
#include <Constants.au3>

_ReadPHPData()

Func _ReadPHPData()
	$foo = Run(@ScriptDir &"\php_script.exe", "", "", $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
	If ProcessWait("php_script.exe") Then
		$line = StdoutRead($foo)
		MsgBox(0, "PHP+AutoIT", $line)
	EndIf
EndFunc


php_script.php
PHP:
<?php
$stdout = fopen("php://stdout", "w");
$data = "Hello World!";
fwrite($stdout, $data);
fclose($stdout);
?>
Пример: AutoItX3 COM в PHP.

autoit_script.au3
Код:
#include <ButtonConstants.au3>
#include <GuiMenu.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

ObjCreate("AutoItX3.Control")
If @error Then 
	MsgBox(16,"Error!","AutoItX3 not registered!")

	$sMsg = MsgBox(36,"AutoItX3 not registered!","You want to register AutoItX3?")
	If $sMsg = 7 Then Exit

	If FileExists(@ScriptDir & "\AutoItX3.dll") Then
		_RegServ32()
		If Not @error Then MsgBox(64,"Ok!","AutoItX3 Registered!")
	Else
		$s_Dll = FileOpenDialog("Регистрация Dll", @ScriptDir & "\", "DLL (*.dll)")
		If @error Then Exit
		_RegServ32($s_Dll)
		If Not @error Then MsgBox(64,"Ok!","AutoItX3 Registered!")
	EndIf
EndIf

#Region GUI
$Form1 = GUICreate("AutoIt + PHP", 166, 90, (@DesktopWidth - 166) / 2, (@DesktopHeight - 90) / 2, -1, BitOR($WS_EX_TOOLWINDOW,$WS_EX_WINDOWEDGE))
$LText = GUICtrlCreateLabel("TIME:", 14, 19, 33, 17)
$LTimer = GUICtrlCreateLabel("0.0", 50, 19, 103, 17)
$Button = GUICtrlCreateButton("Старт!", 45, 51, 75, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion GUI

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button
			If ControlGetText("AutoIt + PHP", "", $Button) = "Сброс..." Then 
				ControlSetText("", "", $LTimer, "0.0")
				ControlSetText("", "", $Button, "Старт!")
				ContinueLoop
			EndIf
			
			ControlDisable("AutoIt + PHP", "", $Button)
			_Timer()
			
	EndSwitch
WEnd

#Region Function

Func _RegServ32($s_Dll = "AutoItX3.dll")
	DllCall($s_Dll, "long", "DllRegisterServer")
	If @error Then MsgBox(16, Default, @error)
	Return SetError(0)
EndFunc

Func _UnRegServ32($s_Dll = "AutoItX3.dll")
	DllCall($s_Dll, "long", "DllUnregisterServer")
	If @error Then MsgBox(16, Default, @error)
	Return SetError(0)
EndFunc

Func _Timer()
	$s_File = @ScriptDir & "\php_autoitx.exe"
	If Not FileExists($s_File) Then 
		MsgBox(16,"Error!","File time.exe not at directory " & $s_File)
		Exit
	EndIf
	
	Run($s_File)
	ControlSetText("", "0.0", $LTimer, "Ждём...")
EndFunc

#EndRegion Function


php_autoitx.php
PHP:
<?php
$q = 0;
$time_start = microtime(1);
for($i=0; $i < 100001; $i++) {
	$q += 1;
	if($i == 100000)
	{
		$time_end = microtime(1);
		$time = $time_end - $time_start;
		$time = round($time, 2);
		
		$AutoItX3 = new COM("AutoItX3.Control");
		
		if ($AutoItX3->WinExists("AutoIt + PHP"))
		{
			$AutoItX3->WinActivate("AutoIt + PHP");
			$AutoItX3->ControlSetText("AutoIt + PHP", "", "[CLASS:Static; INSTANCE:2]", $time . " секунд");
			$AutoItX3->ControlSetText("AutoIt + PHP", "", "[CLASS:Button; INSTANCE:1]", "Сброс...");
			$AutoItX3->ControlEnable("AutoIt + PHP", "", "[CLASS:Button; INSTANCE:1]");
		}
		
		exit();
	}
}
?>
PHPAutoit_STDIN_STDOUT.zip
PHPAutoItX3.zip
 
Автор
K

Kap

Новичок
Сообщения
8
Репутация
0
Спасибо, но как-то сложно все.
Наверно вопрос не по теме, но если использовать файлы, винт от записи и чтения раз в полсекунды не пострадает? Винда кеширует это дело?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Kap [?]
винт от записи и чтения раз в полсекунды не пострадает
нет. твой комп делает куда больше операций и намного чаще. открой FileMon и ужаснись ;D
Винда кеширует это дело?
AutoIt кэширует по мере возможности, если явно не указана команада WriteFlush.
но как ты хочешь иметь доступ к этому кэшу из под другого процесса? пока данные не окажутся в файле, другой процесс не сможет его прочитать.


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

Тему переношу в общение, ибо философствование в основном :smile:
 
Верх