Запросы документов CouchDB между датой начала и дата окончания

Моим любимым решением является использование Zend Framework 2. Он также рассматривает свойства $_SERVER HTTP_X_FORWARDED_FOR, HTTP_CLIENT_IP, REMOTE_ADDR, но объявляет класс для установки некоторых доверенных прокси и возвращает один IP-адрес, а не массив. Я думаю, что это самое близкое к нему решение:

class RemoteAddress
{
    /**
     * Whether to use proxy addresses or not.
     *
     * As default this setting is disabled - IP address is mostly needed to increase
     * security. HTTP_* are not reliable since can easily be spoofed. It can be enabled
     * just for more flexibility, but if user uses proxy to connect to trusted services
     * it's his/her own risk, only reliable field for IP address is $_SERVER['REMOTE_ADDR'].
     *
     * @var bool
     */
    protected $useProxy = false;

    /**
     * List of trusted proxy IP addresses
     *
     * @var array
     */
    protected $trustedProxies = array();

    /**
     * HTTP header to introspect for proxies
     *
     * @var string
     */
    protected $proxyHeader = 'HTTP_X_FORWARDED_FOR';

    // [...]

    /**
     * Returns client IP address.
     *
     * @return string IP address.
     */
    public function getIpAddress()
    {
        $ip = $this->getIpAddressFromProxy();
        if ($ip) {
            return $ip;
        }

        // direct IP address
        if (isset($_SERVER['REMOTE_ADDR'])) {
            return $_SERVER['REMOTE_ADDR'];
        }

        return '';
    }

    /**
     * Attempt to get the IP address for a proxied client
     *
     * @see http://tools.ietf.org/html/draft-ietf-appsawg-http-forwarded-10#section-5.2
     * @return false|string
     */
    protected function getIpAddressFromProxy()
    {
        if (!$this->useProxy
            || (isset($_SERVER['REMOTE_ADDR']) && !in_array($_SERVER['REMOTE_ADDR'], $this->trustedProxies))
        ) {
            return false;
        }

        $header = $this->proxyHeader;
        if (!isset($_SERVER[$header]) || empty($_SERVER[$header])) {
            return false;
        }

        // Extract IPs
        $ips = explode(',', $_SERVER[$header]);
        // trim, so we can compare against trusted proxies properly
        $ips = array_map('trim', $ips);
        // remove trusted proxy IPs
        $ips = array_diff($ips, $this->trustedProxies);

        // Any left?
        if (empty($ips)) {
            return false;
        }

        // Since we've removed any known, trusted proxy servers, the right-most
        // address represents the first IP we do not know about -- i.e., we do
        // not know if it is a proxy server, or a client. As such, we treat it
        // as the originating IP.
        // @see http://en.wikipedia.org/wiki/X-Forwarded-For
        $ip = array_pop($ips);
        return $ip;
    }

    // [...]
}

Смотрите полный код здесь: https://raw.githubusercontent.com/zendframework/zend-http/master/src /PhpEnvironment/RemoteAddress.php

16
задан Erk 9 July 2010 в 22:09
поделиться

3 ответа

Я искал то же самое и наткнулся на этот вопрос. С CouchDB 2.0 или выше у Вас есть возможность использования Запросы Манго , который включает больше - чем и меньше.

запрос манго А мог быть похожим:

"selector": {
   "effectiveDate": {
      "$gte": "2000-04-29T00:00:00.000Z",
      "$lt": "2020-05-01T00:00:00.000Z"
   }
}
1
ответ дан 30 November 2019 в 23:05
поделиться

Используйте startkey и endkey. Таким образом, вы можете определить диапазон дат во время выполнения запроса, не замедляя его.

0
ответ дан 30 November 2019 в 23:05
поделиться

Просто создайте карту следующим образом:

function (doc) {emit(doc.timestamp, 1)}

затем запросите представление с помощью:

?descending=true&limit=10&include_docs=true // Get the latest 10 documents

Представление будет отсортировано от самого старого к последнему, поэтому убывание = true меняет порядок .

Если вам нужен конкретный диапазон.

?startkey="1970-01-01T00:00:00Z"&endkey="1971-01-01T00:00:00Z"

даст вам все в 1970 году.

Они должны помочь:

8
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: