https://github.com/rryqszq4/ngx-php/blob/master/docs/zh-cn/osx_install.md
$ docker build -t nginx-php7 .
$ : "app.conf: Create nginx config"
$ docker run -p 80:80 -v $PWD/app.conf:/etc/nginx/conf.d/default.conf nginx-php7
worker_processes auto;
events {
worker_connections 102400;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
client_max_body_size 64k;
client_body_buffer_size 64k;
php_ini_path /usr/local/php/etc/php.ini;
server {
listen 80;
server_name localhost;
default_type 'application/json; charset=UTF-8';
location /php {
content_by_php_block {
echo "hello ngx-php";
}
}
location = /ngx_request {
content_by_php_block {
echo ngx_request_document_uri();
}
}
# curl /ngx_get?a=1&b=2
location = /ngx_get {
content_by_php_block {
echo "ngx_query_args()\n";
var_dump(ngx_query_args());
}
}
# curl -d 'a=1&b=2' /ngx_post
location = /ngx_post {
content_by_php_block {
echo "ngx_post_args()\n";
var_dump(ngx_post_args());
}
}
location = /ngx_sleep {
content_by_php_block {
echo "ngx_sleep start\n";
yield ngx_sleep(1);
echo "ngx_sleep end\n";
}
}
location = /ngx_socket2 {
default_type 'application/json;charset=UTF-8';
content_by_php_block {
$fd = ngx_socket_create();
yield ngx_socket_connect($fd, "httpbin.org", 80);
$send_buf = "GET /get HTTP/1.1\r\n
Host: httpbin.org\r\n
Connection: close\r\n\r\n";
yield ngx_socket_send($fd, $send_buf, strlen($send_buf));
$recv_buf = "";
yield ngx_socket_recv($fd, $recv_buf);
var_dump($recv_buf);
yield ngx_socket_close($fd);
}
}
location = /ngx_var {
set $a 1234567890;
content_by_php_block {
$a = ngx_var_get("a");
var_dump($a);
}
}
# set content-type of response headers
location = /ngx_header {
content_by_php_block {
ngx_header_set("Content-Type", "text/html; charset=UTF-8");
}
}
# run a php file
location = /php {
content_by_php_block {
include "name_of_php_file.php";
}
}
# run any php file in root
location = / {
content_by_php_block {
include ngx_var_get("uri");
}
}
}
}
Using the perl of Test::Nginx module to testing, searching and finding out problem in ngx-php.
Ngx-php test ...
nginx version: nginx/1.22.1
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configure arguments: --prefix=/home/runner/work/ngx-php/ngx-php/nginx --with-ld-opt=-Wl,-rpath,/usr/lib --add-module=../third_party/ngx_devel_kit --add-module=..
/home/runner/work/ngx-php/ngx-php
t/001-hello.t ..................... ok
t/002-ini.t ....................... ok
t/003-error.t ..................... ok
t/004-ngx_request.t ............... ok
t/005-ngx_log.t ................... ok
t/006-ngx_sleep.t ................. ok
t/007-ngx_socket.t ................ ok
t/008-ngx_exit.t .................. ok
t/009-ngx_query_args.t ............ ok
t/010-ngx_post_args.t ............. ok
t/011-ngx_constants.t ............. ok **Синтаксис:** body_filter_by_php — `<код на языке PHP>`
**Контекст:** http, server, location, location if
**Фаза:** output-body-filter
body_filter_by_php_block
------------------------
**Синтаксис:** body_filter_by_php_block — `{код на языке PHP}`
**Контекст:** location, location if
**Фаза:** output-body-filter
php_keepalive
-------------
**Синтаксис:** php_keepalive — `<размер>`
**По умолчанию:** 0
**Контекст:** http, server
В PHP устанавливается размер пула соединений вышестоящего сервера.
php_set
-------
**Синтаксис:** php_set — `$переменная` — `<код на языке PHP>`
**Контекст:** http, server, location, location if
**Фаза:** loading-config
Устанавливает обработчик PHP для указанной переменной.
php_socket_keepalive
--------------------
**Синтаксис:** php_socket_keepalive — `<размер>`
**По умолчанию:** 0
**Контекст:** http, server
php_socket_buffer_size
----------------------
**Синтаксис:** php_socket_buffer_size — `<размер>`
**По умолчанию:** 4k
**Контекст:** http, server, location, location if
Nginx API для PHP
-----------------
* [ngx_exit](#ngx_exit)
* [ngx_query_args](#ngx_query_args)
* [ngx_post_args](#ngx_post_args)
* [ngx_log_error](#ngx_log_error)
* [ngx_request_method](#ngx_request_method)
* [ngx_request_document_root](#ngx_request_document_root)
* [ngx_request_document_uri](#ngx_request_document_uri)
* [ngx_request_script_name](#ngx_request_script_name)
* [ngx_request_script_filename](#ngx_request_script_filename)
* [ngx_request_query_string](#ngx_request_query_string)
* [ngx_request_uri](#ngx_request_uri)
* [ngx_request_server_protocol](#ngx_request_server_protocol)
* [ngx_request_remote_addr](#ngx_request_remote_addr)
* [ngx_request_server_addr](#ngx_request_server_addr)
* [ngx_request_remote_port](#ngx_request_remote_port)
* [ngx_request_server_port](#ngx_request_server_port)
* [ngx_request_server_name](#ngx_request_server_name)
* [ngx_request_headers](#ngx_request_headers)
* [ngx_var_get](#ngx_var_get)
* [ngx_var_set](#ngx_var_set)
* [ngx_header_set](#ngx_header_set)
* [ngx_header_get](#ngx_header_get)
* [ngx_header_get_all](#ngx_header_get_all)
* [ngx_redirect](#ngx_redirect)
* [ngx_cookie_get_all](#ngx_cookie_get_all)
* [ngx_cookie_get](#ngx_cookie_get)
* [ngx_cookie_set](#ngx_cookie_set)
ngx_exit
--------
**Синтаксис:** ngx_exit(int $status) : void
**Параметры:**
- `status: int`
**Контекст:** rewrite_by_PHP*, access_by_PHP*, content_by_PHP*
Завершает текущий запрос и возвращает код состояния HTTP.
ngx_query_args
--------------
**Синтаксис:** ngx_query_args(void) : array или ngx::query_args(void) : array
**Параметры:**
- `void`
**Контекст:** rewrite_by_PHP*, access_by_PHP*, content_by_PHP*
Ассоциативный массив переменных, переданных текущему скрипту через параметры URL (также известные как строка запроса). Вместо официальной константы PHP $_GET.
ngx_post_args
-------------
**Синтаксис:** ngx_post_args(void) : array или ngx::post_args(void) : array
**Параметры:**
- `void`
**Контекст:** rewrite_by_PHP*, access_by_PHP*, content_by_PHP*
Ассоциативный массив переменных, передаваемых текущему скрипту с помощью метода HTTP POST при использовании application/x-www-form-urlencoded или multipart/form-data в качестве типа содержимого HTTP в запросе. Вместо официальной константы PHP $_POST.
ngx_log_error
-------------
**Синтаксис:** ngx_log_error(int $level, string $log_str) : void или ngx_log::error(int $level, string $log_str) : void
**Параметры:**
- `level: int`
- `log_str: string`
**Контекст:** rewrite_by_PHP*, access_by_PHP*, content_by_PHP*
ngx_request_method
------------------
**Синтаксис:** ngx_request_method(void) : string или ngx_request::method(void) : string
**Параметры:**
- `void`
**Контекст:** rewrite_by_PHP*, access_by_PHP*, content_by_PHP*
Метод запроса, который использовался для доступа к странице, например «GET», «POST», «PUT», «DELETE» и так далее.
ngx_request_document_root
-------------------------
**Синтаксис:** ngx_request_document_root(void) : string или ngx_request::document_root(void) : string
**Параметры:**
- `void`
**Контекст:** rewrite_by_PHP*, access_by_PHP*, content_by_PHP*
Корневой каталог документа. **ngx_var_get**
**Синтаксис:** `ngx_var_get(string $key) : string` или `ngx_var::get(string $key) : string`.
**Параметры:**
- `key: string`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
Получает переменные в конфигурации nginx.
**ngx_var_set**
**Синтаксис:** `ngx_var_set(string $key, string $value) : void` или `ngx_var::set(string $key, string $value) : void`.
**Параметры:**
- `key: string`;
- `value: string`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
Устанавливает переменные в конфигурации nginx.
**ngx_header_set**
**Синтаксис:** `ngx_header_set(string $key, string $value) : bool`.
**Параметры:**
- `key: string`;
- `value: string`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
Задаёт информацию заголовка HTTP-ответа.
**ngx_header_get**
**Синтаксис:** `ngx_header_get(string $key) : string`.
**Параметры:**
- `key: string`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
Извлекает информацию заголовка HTTP-ответа.
**ngx_header_gets**
**Синтаксис:** `ngx_header_gets(void) : array`.
**Параметры:**
- `void`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
Возвращает полную информацию заголовка HTTP-ответа.
**ngx_redirect**
**Синтаксис:** `ngx_redirect(string $uri, int $status) : bool`.
**Параметры:**
- `uri: string`;
- `status: int`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
Настраивает перенаправление заголовка ответа.
**ngx_cookie_get_all**
**Синтаксис:** `ngx_cookie_get_all(void) : string`.
**Параметры:**
- `void`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
**ngx_cookie_get**
**Синтаксис:** `ngx_cookie_get(string $key) : string`.
**Параметры:**
- `key: string`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
**ngx_cookie_set**
**Синтаксис:** `ngx_cookie_set(string $data): bool`.
**Параметры:**
- `data: string`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`.
Nginx неблокирующий API для PHP
------------------------------
* [yield ngx_sleep](#ngx_sleep).
* [yield ngx_msleep](#ngx_msleep).
* [ngx_socket_create](#ngx_socket_create).
* [ngx_socket_iskeepalive](#ngx_socket_iskeepalive).
* [yield ngx_socket_connect](#ngx_socket_connect).
* [yield ngx_socket_close](#ngx_socket_close).
* [yield ngx_socket_send](#ngx_socket_send).
* [yield ngx_socket_recv](#ngx_socket_recv).
* [yield ngx_socket_recvpage](#ngx_socket_recvpage).
* [ngx_socket_recvsync](#ngx_socket_recvsync).
* [ngx_socket_clear](#ngx_socket_clear).
**ngx_sleep**
**Синтаксис:** `yield ngx_sleep(int seconds)`.
**Параметры:**
- `secodes: int`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
Приостанавливает выполнение программы на заданное количество секунд.
**ngx_msleep**
**Синтаксис:** `yield ngx_msleep(int milliseconds)`.
**Параметры:**
- `milliseconds: int`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
Приостанавливает выполнение программы на заданное количество миллисекунд.
**ngx_socket_create**
**Синтаксис:** `ngx_socket_create(int $domain, int $type, int $protocol) : resource`.
**Параметры:**
- `domain: int`;
- `type: int`;
- `protocol: int`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
Создаёт и возвращает ресурс сокета, также называемый конечной точкой связи. Типичное сетевое соединение состоит из двух сокетов, один из которых выполняет роль клиента, а другой — роль сервера.
**ngx_socket_iskeepalive**
**Синтаксис:** `ngx_socket_iskeepalive(void) : bool`.
**Параметры:**
- `void`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
**ngx_socket_connect**
**(yield ngx_socket_connect(resource $socket, string $address, int $port)) : bool**.
**Параметры:**
- `socket: resource`;
- `address: string`;
- `port: int`.
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
Инициирует подключение к адресу с использованием ресурса сокета socket, который должен быть действительным. **Создание ресурса сокета с помощью ngx_socket_create()**
ngx_socket_close
----------------
**Синтаксис:** `(yield ngx_socket_close(resource $socket)) : bool`
**Параметры:**
- `socket: resource`
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
Функция ngx_socket_close() закрывает ресурс сокета, указанный в параметре socket. Эта функция специфична для сокетов и не может быть использована для других типов ресурсов.
**Отправка данных с помощью функции ngx_socket_send**
ngx_socket_send
---------------
**Синтаксис:** `(yield ngx_socket_send(resource $socket, string $buf, int $len)) : int`
**Параметры:**
- `socket: resource`
- `buf: string`
- `len: int`
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
Функция ngx_socket_send() отправляет len байт из buf на сокет, указанный в socket.
**Получение данных с помощью функции ngx_socket_recv**
ngx_socket_recv
---------------
**Синтаксис:** `(yield ngx_socket_recv(resource $socket, string &$buf, int $len)) : int`
**Параметры:**
- `socket: resource`
- `buf: string`
- `len: int`
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
Функция ngx_socket_recv() получает len байт данных в buf из сокета. Функция ngx_socket_recv() может использоваться для сбора данных из подключённых сокетов.
Переменная buf передаётся по ссылке, поэтому она должна быть указана как переменная в списке аргументов. Данные, считанные из сокета функцией ngx_socket_recv(), будут возвращены в buf.
**Чтение данных с использованием функции ngx_socket_recvpage**
ngx_socket_recvpage
-------------------
**Синтаксис:** `(yield ngx_socket_recvpage(resource $socket, string &$buf, int &$rc)) : int`
**Параметры:**
- `socket: resource`
- `buf: string`
- `$rc: int`
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
**Синхронное чтение данных с помощью функции ngx_socket_recvsync**
ngx_socket_recvsync
-------------------
**Синтаксис:** `ngx_socket_recvsync(resource $socket, string &$buf, int $len) : int`
**Параметры:**
- `socket: resource`
- `buf: string`
- `len: int`
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
**Закрытие сокета и очистка буфера с помощью функции ngx_socket_clear**
ngx_socket_clear
----------------
**Синтаксис:** `ngx_socket_recv(resource $socket) : bool`
**Параметры:**
- `socket: resource`
**Контекст:** `rewrite_by_php*, access_by_php*, content_by_php*`
Эта функция закрывает ресурс сокета и является блокирующей, но обеспечивает высокую производительность.
**Константы Nginx**
Nginx предоставляет различные константы, которые могут быть использованы в коде. Эти константы включают версии, логирование, статус и HTTP-коды.
* **Версионные константы:**
* NGINX_VAR — NGINX;
* NGINX_VERSION — 1.12.2;
* NGX_HTTP_PHP_MODULE_VERSION — 0.0.21;
* NGX_HTTP_PHP_MODULE_NAME — ngx_php.
* **Логирование:**
* NGX_OK — 0;
* NGX_ERROR — -1;
* NGX_AGAIN — -2;
* NGX_BUSY — -3;
* NGX_DONE — -4;
* NGX_DECLINED — -5;
* NGX_ABORT — -6.
* **Статус:**
* NGX_LOG_STDERR — 0;
* NGX_LOG_EMERG — 1;
* NGX_LOG_ALERT — 2;
* NGX_LOG_CRIT — 3;
* NGX_LOG_ERR — 4;
* NGX_LOG_WARN — 5;
* NGX_LOG_NOTICE — 6;
* NGX_LOG_INFO — 7;
* NGX_LOG_DEBUG — 8.
* **HTTP-коды:**
* NGX_HTTP_CONTINUE — 100;
* NGX_HTTP_SWITCHING_PROTOCOLS — 101;
* NGX_HTTP_PROCESSING — 102;
* NGX_HTTP_OK — 200;
* NGX_HTTP_CREATED — 201;
* NGX_HTTP_ACCEPTED — 202;
* NGX_HTTP_NO_CONTENT — 204;
* NGX_HTTP_PARTIAL_CONTENT — 206;
* NGX_HTTP_SPECIAL_RESPONSE — 300;
* NGX_HTTP_MOVED_PERMANENTLY — 301;
* NGX_HTTP_MOVED_TEMPORARILY — 302;
* NGX_HTTP_SEE_OTHER — 303;
* NGX_HTTP_NOT_MODIFIED — 304;
* NGX_HTTP_TEMPORARY_REDIRECT — 307;
* NGX_HTTP_PERMANENT_REDIRECT — 308;
* NGX_HTTP_BAD_REQUEST — 400;
* NGX_HTTP_UNAUTHORIZED — 401;
* NGX_HTTP_FORBIDDEN — 403;
* NGX_HTTP_NOT_FOUND — 404;
* NGX_HTTP_NOT_ALLOWED — 405;
* NGX_HTTP_REQUEST_TIME_OUT — 408;
* NGX_HTTP_CONFLICT — 409;
* NGX_HTTP_LENGTH_REQUIRED — 411;
* NGX_HTTP_PRECONDITION_FAILED — 412. **NGX_HTTP_REQUEST_ENTITY_TOO_LARGE | 413**
**NGX_HTTP_REQUEST_URI_TOO_LARGE | 414**
**NGX_HTTP_UNSUPPORTED_MEDIA_TYPE | 415**
**NGX_HTTP_RANGE_NOT_SATISFIABLE | 416**
**NGX_HTTP_CLOSE | 444**
**NGX_HTTP_NGINX_CODES | 494**
**NGX_HTTP_REQUEST_HEADER_TOO_LARGE | 494**
**NGX_HTTPS_CERT_ERROR | 495**
**NGX_HTTPS_NO_CERT | 496**
**NGX_HTTP_TO_HTTPS | 497**
**NGX_HTTP_CLIENT_CLOSED_REQUEST | 499**
**NGX_HTTP_INTERNAL_SERVER_ERROR | 500**
**NGX_HTTP_NOT_IMPLEMENTED | 501**
**NGX_HTTP_BAD_GATEWAY | 502**
**NGX_HTTP_SERVICE_UNAVAILABLE | 503**
**NGX_HTTP_GATEWAY_TIME_OUT | 504**
**NGX_HTTP_INSUFFICIENT_STORAGE | 507**
*Авторские права и лицензия*
Copyright (c) 2016-2020, rryqszq4 rryqszq@gmail.com All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )