Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Сишная setenv и массивы _GET и _POST в PHP


Автор: exceilence 22.6.2009, 05:57
Вопрос в следующем, 
как php интерпретатор заполняет массивы _GET и _POST?  Как он узнает какие переменные куда положить?

Какие переменные окружения я должен выставить, чтобы он мог их проанализировать и заполнить эти массивы?

Пишу HTTP-сервер и это проблему решить не могу. Надеюсь кто-нибудь из стриков подскажет.
В переменные окружения положил
Код

            setenv( "QUERY_STRING", cheader->query, 0 );
            setenv( "REQUEST_METHOD", cheader->method, 0 );
            setenv( "REQUEST_URI", cheader->request_uri, 0 );
            setenv( "SCRIPT_NAME", cheader->script_name, 0 );
            sprintf( tmp_str, "%u", cheader->content_length );
            setenv( "CONTENT_LENGTH", tmp_str, 0 );


Автор: MAKCim 22.6.2009, 16:02
тут надо либо доки php читать, либо эксперименты проводить
например, запускаем трассировку апача (через strace) и делаем простой запрос на php'ый скрипт
в логах смотрим, как он был вызван (что было передано в execve)

Автор: exceilence 26.6.2009, 03:15
Ну что ж, пацанчики, 

Буду писать пока так, как написано в статье... может масивчики заполнит php интерпретатор:
"
При вызове CGI-программы все, что поступило в теле запроса, подается программе на стандартный ввод, а все, что находится в URL после вопросительного знака, помещается в переменную окружения QUERY_STRING. Веб-сервером данные запроса никак не интерпретируются и не преобразуются, эти задачи возложены на CGI-программу.

CGI-программа выдает содержимое ответа (как правило, HTML-контент) на свой стандартный вывод, который перехватывается веб-сервером с тем, чтобы отослать эти данные клиенту. Предварительно CGI-программа должна напечатать заголовок "Content-Type" и отделить его от данных пустой строкой. Например, вывод CGI-программы, генерирующей HTML, может выглядеть следующим образом:

Content-Type: text/html

<HTML>
  <BODY>
    <H1>Hello, world</H1>
  </BODY>    
<HTML>  
"



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

Морковным цветом напсано, что сервер никаким боком не трогает POST данные. 
И при этом просто подаёт на стандартный ввод программе.
Но!  Как интерпретатор успевает заполнить массив?  
Я не писал ниодного скрипта на php, которая бы читала со стандартного ввода, хотя потенциально есть у него такая возможность. Может интерпретатор и пользуется этим и всё съедает сам? 

Вот такие пироги для размышления.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)