1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Передать post параметры php скрипта

Тема в разделе "WASM.NETWORKS", создана пользователем who_know777, 4 апр 2021.

  1. who_know777

    who_know777 New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2021
    Сообщения:
    5
    Доброго времени суток!

    Скачал архив с php интерпертатором, с официального сайта.

    Передаю через командную строку имя php скрипта
    для выполнения, скрипт выполняется. Передаю get параметры, все ок.

    Не могу понять, как отправлять и получать post параметры.

    Код (Text):
    1.  
    2. var
    3.   s: string;
    4. begin
    5.   s := Path('php\php.exe ');
    6.   s := s + Path('index.php');
    7.   s := s + //передаем параметры get
    8.   TextToWebBrowser(WebBrowser1, GetDosOutput(s));
    9. end.
    10.  
    11. function Path(s: string): string;
    12. begin
    13.   Result := PathAppend(ExtractFilePath(paramstr(0)), s);
    14. end; //Path
    15.  
    16. function PathAppend(path, str: string): string;
    17. begin
    18.   if path[Length(path)] <> '\' then path := path + '\';
    19.   result := path + str;
    20. end; //PathAppend
    21.  
    22. procedure TextToWebBrowser(WB: TWebBrowser; Text: string);
    23. var            
    24.   V: OleVariant;
    25.   Document: IHTMLDocument2;
    26. begin
    27.    if WB.Document = nil then WB.Navigate('about:blank');
    28.    while WB.Document = nil do Application.ProcessMessages;
    29.    Document := WB.Document as IHtmlDocument2;
    30.    V := VarArrayCreate([0, 0], varVariant);
    31.    V[0] := Text;
    32.    Document.Write(PSafeArray(TVarData(v).VArray));
    33.    Document.Close;
    34. end; //TextToWebBrowser
    35.  
    36. function GetDosOutput(DosApp: String): string;
    37. const
    38.   ReadBuffer = 2400;
    39. var
    40.   Buffer: PChar;
    41.   BytesRead: DWord;
    42.   Apprunning: DWord;    
    43.   start: TStartUpInfo;  
    44.   ReadPipe, WritePipe: THandle;
    45.   Security: TSecurityAttributes;
    46.   ProcessInfo: TProcessInformation;
    47. begin
    48.   result := '';
    49.  
    50.   with Security do
    51.   begin
    52.     nlength := SizeOf(TSecurityAttributes);
    53.     binherithandle := true;
    54.     lpsecuritydescriptor := nil;
    55.   end;
    56.  
    57.   if Createpipe(ReadPipe, WritePipe, @Security, 0) then
    58.   begin
    59.     Buffer  := AllocMem(ReadBuffer + 1);
    60.     FillChar(Start,Sizeof(Start),#0);
    61.     start.cb          := SizeOf(start);
    62.     start.hStdOutput  := WritePipe;
    63.     start.hStdInput   := ReadPipe;
    64.     start.dwFlags     := STARTF_USESTDHANDLES +
    65.                          STARTF_USESHOWWINDOW;
    66.     start.wShowWindow := SW_HIDE;
    67.  
    68.     if CreateProcess(nil,
    69.           PChar(DosApp),
    70.           @Security,
    71.           @Security,
    72.           true,
    73.           NORMAL_PRIORITY_CLASS,
    74.           nil,
    75.           nil,
    76.           start,
    77.           ProcessInfo)
    78.     then
    79.     begin
    80.       repeat
    81.         Apprunning := WaitForSingleObject(ProcessInfo.hProcess, 100);
    82.         Application.ProcessMessages;
    83.       until (Apprunning <> WAIT_TIMEOUT);
    84.       repeat
    85.         BytesRead := 0;
    86.         ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil);
    87.         Buffer[BytesRead]:= #0;
    88.        //OemToAnsi(Buffer,Buffer);
    89.         result := result + String(Buffer);
    90.       until (BytesRead < ReadBuffer);
    91.     end;
    92.     CloseHandle(ProcessInfo.hProcess);
    93.     CloseHandle(ProcessInfo.hThread);
    94.     CloseHandle(ReadPipe);
    95.     CloseHandle(WritePipe);  
    96.     FreeMem(Buffer);
    97.   end;
    98. end;
    99.  
     
  2. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.212
    Надо веб-сервер поднять (или тот, что встроен в РНР), или какой-то апач, или самому создавать сокет и т.д.
    получать через php://input или как там его, либо формировать пост-параметры.
     
  3. asmlamo

    asmlamo Active Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.616
    Ставь на вируталку уже готовую сборку для WEB типа Денвера или XAMPP или Vertrigo.

    Там и Апач уже настроенный и PHP и MySQL.

    http://vertrigo.sourceforge.net/?lang=ru

    И уже там делай отладку.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.011
    Я чет смотрю этот кодец на Дельфи, я понимаю, что ТС пытается сделать, но я не понимаю, зачем это может быть нужно. Может, это возможно передать интерпретатору через _POST переменную окружения, я вполне вероятно путаю что-то, но мне казалось, что так можно было делать. То есть интерпретатор подцеплял переменные окружения, не? И да, стоит наверное объяснить, что это, и для чего нужно, и почему именно из Дельфи?
     
  5. asmlamo

    asmlamo Active Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.616
    Не понял у тебя код на Паскале ? Это Дельфи ???
    --- Сообщение объединено, 5 апр 2021 в 15:11 ---
    Для нормальной работы из Дельфи по http нужно работать через HTTP Client API типа
    TNetHTTPClient и им подобные.

    А не через пайпы. Хотя в дельфях не силен ....
     
    Последнее редактирование: 5 апр 2021 в 15:12
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.011
    Не-не, он зачем то запускает именно пхпшный интерпретатор и пытается туда данные передать, как будто это на сервере запущенно. Может он пытается какой-то скрипт пхпшный тестировать или фаззить или анализировать, пока не понятно. Но для решения задачи, нужно бы понять, что это и для чего, сейчас это кажется очень странным.
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.328
    Очень странная задачка. Для пэхопэ разница между параметрами в get и post - то, в каком "ассоциативном массиве данных" они лежат. $_GET и $_POST. Очевидно ключем -B можно сформировать такой массив с нужным содержимым перед обработкой файла:
     
  8. who_know777

    who_know777 New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2021
    Сообщения:
    5
    >>он зачем то запускает именно пхпшный интерпретатор и пытается туда данные передать, как будто это на сервере запущенно. - Да. Так и есть.

    Попытаюсь объяснить, что это, и для чего нужно.

    У меня есть несколько проектов на php, которые я время от времени
    запускаю на портативном веб сервере Open Server'e, или Denver ( Apache + PHP).

    Я понимаю, что то что я сейчас пишу, выглядит как полная ахинея.
    Первое, что я сделал - задал себе вопросы "а нафига это нужно?" и "нужно ли?"

    Для того чтобы убедиться, запустил веб сервер на localhost, потом в своем exe загрузил localhost в WebBrowser,
    в интерфейсе добавил несколько новых элементов, которые нельзя сделать на php, и понял что в моем случае must have.

    В php скриптах каждый модуль независим, и вряд ли будут
    проблемы со ссылками(я не использую PhpMyAdmin и СУБД).

    И да, я понимаю что эта задача выглядит немного странно.

    Основная трудность в этом:

    В моем проекте есть форма, которая передает данные методом post:
    Код (Text):
    1. echo '<form class = "page" action = "index.php" method = "post">';
    Когда нажимаем Submit, скрипт принимает эти параметры таким образом:

    Код (Text):
    1. if(isset($_POST['submit']))
    2.     {
    3.         $filename = $_POST['filename'];
    4.         if(!empty($filename))
    5.         {
    6.             $content = trim($_POST['content']);
    7.             if(!empty($content)) file_put_contents($filename, $content);
    8.         }
    9.     }
    10.  
    Вопрос как обработать отправку и принятие данных формы именно в моей программе?

    Технически это 100% возможно.
     
    Последнее редактирование: 6 апр 2021 в 23:15
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.011
    Я на самом деле так и не уловил суть, но что могу предложить попробовать сделать. Вероятно, что через некоторые костыли можно заимбеддить интерпретатор в нативное приложение на Дельфи. Я не знаю насчет самого PHP, но была легковесная версия именно для эмбеддинга, называлась PH7. Может быть ее будет достаточно, или же ты нагуглишь способ заимбеддить сам пхпшный интерпретатор. Сделать это именно за счет эмбеддинга упростит взаимодействие с интерпретатором, ты сможешь создавать произвольные объекты для среды, исполняющей пхпшный код.

    Просто то, как ты сейчас передаешь GET-параметры работает только благодаря твоему везению, вряд ли ты найдешь способ передачи POST-данных каким-нить таким способом. Но если такой способ есть, то про него скорее всего знают на форуме или в мейлинг листе разработчиков интерпретатора PHP, а не тут.
     
  10. asmlamo

    asmlamo Active Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.616
    Вопрос как обработать отправку и принятие данных формы именно в моей программе?

    Твоя прога Дельфях клиент ? Которая шлет GET и POST скрипту на серваке ?
    Если это так то работай по HTTP через HTTP Client API типа
    TNetHTTPClient и им подобные.

    Забудь про пайпы ....

    Компонент TNetHTTPRequest – запрос

    Компонент TNetHTTPRequest предназначен для обработки HTTP-запросов. Для его работы необходимо определить клиент, то есть задать свойство компонента:
    property Client: TNetHTTPClient read GetClient write SetClient;
    Компонент реализует те же HTTP-методы, что и TNetHTTPClient: GET, POST, PUT и так далее. Вместе с этим, TNetHTTPRequest расширяет работу TNetHTTPClient.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.011
    Да нет там сервака в принципе, что ты заладил?
     
  12. asmlamo

    asmlamo Active Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.616
    Как нет ?
    А это что:
    У меня есть несколько проектов на php, которые я время от времени
    запускаю на портативном веб сервере Open Server'e, или Denver ( Apache + PHP).
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.011
    Читай внимательно.