Отправка файла через HTTP ВСТАВИЛА PHP

Вот краткое описание алгоритма пересечения, представленного в ссылке DuduAlul .

Решение требует использования дерева поиска, способного выполнять диапазонные запросы. Запрос диапазона запрашивает все элементы со значениями между K1 и K2, и это должна быть операция O (R + log N), где N - общее количество элементов дерева, а R - количество результатов.

Алгоритм использует подход развертки:

1) Сортировать все левые и правые края прямоугольника в соответствии с их значением X в список L.

2) Создайте новое пустое дерево поиска диапазона T, для Y упорядочения вершин / низов прямоугольника

3) Создайте новый пустой набор результатов RS уникальных пар прямоугольников

4) Траверс L в порядке возрастания. Для всех V в L:

& nbsp; & nbsp; & V.bsRightEdge ()

& nbsp; & nbsp; & nbsp; & nbsp; T.remove (V.rectangle. top)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; T.remove (V.rectangle.bottom)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; else

& nbsp ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Для всех U в T.getRange (V.rectangle.top, V.rectangle.bottom)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; RS.add (< V.rectangle, U.rectangle>)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Tadd (V.rectangle.top)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; T.add (V.rectangle.bottom)

5) return RS


Сложность по времени составляет O (R + N log N), где R - это фактическое количество пересечений.

- РЕДАКТИРОВАТЬ -

Я только что выяснил, что решение не полностью корректно - тест пересечения в дереве T пропускает некоторые случаи. Дерево должно поддерживать интервалы Y, а не значения Y, и в идеале оно должно быть Interval Tree .

8
задан GrumpyCanuck 7 November 2009 в 01:25
поделиться

4 ответа

Ага! После небольшого «резинового утка» с плюшевой куклой сварливого гнома на моем столе я нашел решение:

        $data = file_get_contents($tmpFile);
         $params = array(
             'http' => array(
                 'method' => 'PUT',
                 'header' => "Authorization: Basic " . base64_encode($this->ci->config->item('ws_login') . ':' . $this->ci->config->item('ws_passwd')) . "\r\nContent-type: text/xml\r\n",
                 'content' => file_get_contents($tmpFile)
             )
         );
         $ctx = stream_context_create($params);
         $response = @file_get_contents($url, false, $ctx);

         return ($response == '');
9
ответ дан 5 December 2019 в 10:42
поделиться

Если в вашем eXist-db включен интерфейс SOAP, есть библиотека с открытым исходным кодом под названием PheXist , которая упростит взаимодействие с базой данных.

0
ответ дан 5 December 2019 в 10:42
поделиться

У меня работает CURL. Вот фрагмент моего кода,

                $handle = curl_init ($server_url);

                if ($handle)
                {
                    // specify custom header
                    $customHeader = array(
                        "Content-type: $file_type"
                    );
                    $curlOptArr = array(
                        CURLOPT_PUT => TRUE,
                        CURLOPT_HEADER => TRUE,
                        CURLOPT_HTTPHEADER => $customHeader,
                        CURLOPT_INFILESIZE => $file_size,
                        CURLOPT_INFILE => $file,
                        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
                        CURLOPT_USERPWD => $user . ':' . $password,
                        CURLOPT_RETURNTRANSFER => TRUE
                    );
                    curl_setopt_array($handle, $curlOptArr);
                    $ret = curl_exec($handle);
                    $errRet = curl_error($handle);
                    curl_close($handle);

РЕДАКТИРОВАТЬ: только что обновил мой код. Я сам не использую аутентификацию, поэтому это не проверялось.

4
ответ дан 5 December 2019 в 10:42
поделиться
function _publish($service, $doc) {
    $params = array(
        'http' => array(
            'method' => 'PUT'));
    $context = stream_context_create($params);
    $fp = fopen($service, 'rb', false, $context);
    $response = fwrite($fp,file_get_contents($doc));
    if ($response === false) {
        return false;
    }
    // Pull out the status code from the header
    $metaData = stream_get_meta_data($fp);
    preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/", $metaData['wrapper_data'][0], $matches);
    $code = end($matches[1]);
    if ($code == 200) {
        return true;
    } else {
        return false;
    }
}

из http://www.littlehart.net/atthekeyboard/2008/01/11/how-to-http-put-a-file-somewhere-using-php/

0
ответ дан 5 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

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