Метод PHP, CURL, WebDAV и SEARCH - PullRequest
       23

Метод PHP, CURL, WebDAV и SEARCH

3 голосов
/ 08 декабря 2010

Как бы я воссоздал следующий оператор curl в PHP?

curl http://www.example.com/path/to/folder/ -X SEARCH -d @dasl.xml

Вот то, что у меня есть, и файл "dasl.xml" - это то, что сбивает меня с толку.

$ch = curl_init("http://www.example.com/path/to/folder/");
$fp = fopen("webdav.xml", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "SEARCH");
curl_exec($ch);
curl_close($ch);
fclose($fp);

Файл dasl.xml содержит XML для запроса WebDAV. Есть ли вариант, который я могу использовать, чтобы передать этот файл? Или есть способ передать содержимое файла в виде строки или чего-то еще?

Я получаю сообщение об ошибке:

DaslStatement: 267 - Ошибка синтаксического анализатора SAX Преждевременный конец файла.

Спасибо за помощь.

Обновление:

Вот пример файла dasl.xml:

 <d:searchrequest xmlns:d="DAV:">
  <d:basicsearch>
    <d:select>
      <d:prop><d:getcontentlength/></d:prop>
    </d:select>
    <d:from>
      <d:scope>
        <d:href>/container1/</d:href>
        <d:depth>infinity</d:depth>
      </d:scope>
    </d:from>
    <d:where>
      <d:gt> 
        <d:prop><d:getcontentlength/></d:prop>
        <d:literal>10000</d:literal>
      </d:gt>
    </d:where>
    <d:orderby>
      <d:order>
        <d:prop><d:getcontentlength/></d:prop>
        <d:ascending/>
      </d:order>
    </d:orderby>
  </d:basicsearch>
</d:searchrequest>

Больше информации о DASL здесь: http://greenbytes.de/tech/webdav/rfc5323.html и [http://www.webdav.org/dasl/][2]

1 Ответ

0 голосов
/ 31 января 2014

Вы можете использовать file_get_contents с пользовательским контекстом.Таким образом, вам не нужно CURL для этого.Нечто похожее на это:

$url = 'http://www.example.com/path/to/folder/';
$body = file_get_contents('dasl.xml');
$context = stream_context_create(array(
    'http' => array(
      'method' => 'SEARCH',
      'header' => 'Content-type: application/x-www-form-urlencoded',
      'content' => $body,
    )
));

$response = file_get_contents($url, false, $context);
...