array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/', 'REDIRECT_URI' => '/index.php/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/ httpd/unix-directory 6666cd76f96956469e7be39d750cc7d9 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection HTTP/1.1 403 Forbidden http://webdav/file.xml text/xml; charset="utf-8" b0c5faef67f106ef634ad2a82e838b95 Mon, 15 Aug 2005 15:13:00 +0000 19 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/file.bin application/octet-stream; charset="utf-8" 68eab65ab82e7e474811d5d2dd879679 Mon, 15 Aug 2005 15:13:00 +0000 7 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 2 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/', 'REDIRECT_URI' => '/index.php/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/ httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/file.txt text/plain; charset="utf-8" 60c0afeb8f68b1765e13694b5e7c8c3d Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 3 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/', 'REDIRECT_URI' => '/index.php/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/ httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/file.txt text/plain; charset="utf-8" 60c0afeb8f68b1765e13694b5e7c8c3d Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 4 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/file.txt', 'REDIRECT_URI' => '/index.php/collection/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/file.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'Some text content.', 'headers' => array ( 'ETag' => '60c0afeb8f68b1765e13694b5e7c8c3d', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'text/plain; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 5 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.html text/html; charset="utf-8" 3b191a38c8e5d686506677906f3a4cfd Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.xml text/xml; charset="utf-8" 8cc4e8038561985cf9e68ee3e36f8882 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 6 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MKCOL', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/newdir', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 7 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/ httpd/unix-directory 8887bec8c9eca1eafc8f299e0765984f Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 8 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/ httpd/unix-directory 8887bec8c9eca1eafc8f299e0765984f Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 9 => array ( 'request' => array ( 'body' => 'Some text content.', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '18', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/file.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '18', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/newdir/file.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => 'd7d5492acf7f2f11647278924f7586ba', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 10 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/ httpd/unix-directory 8887bec8c9eca1eafc8f299e0765984f Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/newdir/file.txt application/octet-stream d7d5492acf7f2f11647278924f7586ba Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 11 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/newsubdir', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/newsubdir', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/newsubdir', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/newsubdir', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MKCOL', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/newdir/newsubdir', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 12 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/newsubdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/newsubdir/ httpd/unix-directory 1361830dfedbf9efdc5bc1636ffab67c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 13 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/newsubdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/newsubdir/ httpd/unix-directory 1361830dfedbf9efdc5bc1636ffab67c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 14 => array ( 'request' => array ( 'body' => 'Some text content.', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '18', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/newsubdir/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/newsubdir/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/newsubdir/file.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/newsubdir/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '18', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/newdir/newsubdir/file.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '3c9be7330d80dfd9acee27eb9017f47c', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 15 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/newsubdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/newsubdir/ httpd/unix-directory 1361830dfedbf9efdc5bc1636ffab67c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/newdir/newsubdir/file.txt application/octet-stream 3c9be7330d80dfd9acee27eb9017f47c Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 16 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/newsubdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/newsubdir/ httpd/unix-directory 1361830dfedbf9efdc5bc1636ffab67c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/newdir/newsubdir/file.txt application/octet-stream 3c9be7330d80dfd9acee27eb9017f47c Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 17 => array ( 'request' => array ( 'body' => 'Some text content.', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '18', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/newsubdir/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/newsubdir/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/newsubdir/file.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/newsubdir/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '18', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/newdir/newsubdir/file.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '3c9be7330d80dfd9acee27eb9017f47c', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 18 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/newsubdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/newsubdir/ httpd/unix-directory 1361830dfedbf9efdc5bc1636ffab67c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/newdir/newsubdir/file.txt application/octet-stream 3c9be7330d80dfd9acee27eb9017f47c Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 19 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/newdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/newdir/ httpd/unix-directory 8887bec8c9eca1eafc8f299e0765984f Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/newdir/file.txt application/octet-stream d7d5492acf7f2f11647278924f7586ba Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/newdir/newsubdir httpd/unix-directory 1361830dfedbf9efdc5bc1636ffab67c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 20 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.html text/html; charset="utf-8" 3b191a38c8e5d686506677906f3a4cfd Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.xml text/xml; charset="utf-8" 8cc4e8038561985cf9e68ee3e36f8882 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/newdir httpd/unix-directory 8887bec8c9eca1eafc8f299e0765984f Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 21 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.html text/html; charset="utf-8" 3b191a38c8e5d686506677906f3a4cfd Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.xml text/xml; charset="utf-8" 8cc4e8038561985cf9e68ee3e36f8882 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/newdir httpd/unix-directory 8887bec8c9eca1eafc8f299e0765984f Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 22 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/newdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 23 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.html text/html; charset="utf-8" 3b191a38c8e5d686506677906f3a4cfd Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.xml text/xml; charset="utf-8" 8cc4e8038561985cf9e68ee3e36f8882 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 24 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/file.html', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/file.html', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/file.html', 'REDIRECT_URI' => '/index.php/collection/subdir/file.html', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/file.html', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '

Test

', 'headers' => array ( 'ETag' => '3b191a38c8e5d686506677906f3a4cfd', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'text/html; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 25 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/file.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/file.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/file.xml', 'REDIRECT_URI' => '/index.php/collection/subdir/file.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/file.xml', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' ', 'headers' => array ( 'ETag' => '8cc4e8038561985cf9e68ee3e36f8882', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'text/xml; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 26 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.html text/html; charset="utf-8" 3b191a38c8e5d686506677906f3a4cfd Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/file.xml text/xml; charset="utf-8" 8cc4e8038561985cf9e68ee3e36f8882 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 27 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/file.html', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/file.html', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/file.html', 'REDIRECT_URI' => '/index.php/collection/subdir/file.html', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/file.html', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 28 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/file.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/file.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/file.xml', 'REDIRECT_URI' => '/index.php/collection/subdir/file.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/file.xml', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 29 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 30 => array ( 'request' => array ( 'body' => 'eZ component: Webdav, Design, 1.0

eZ component: Webdav, Design, 1.0

Author:Kore Nordmann, Tobias Schlitt
Revision:$Rev$
Date:$Date$
Status:Draft

Scope

The scope of this document is to describe the initial design of a component that provides a WebDAV server, which works with all major other implementations of the WebDAV protocol.

It is currently not planned to also offer a WebDAV client component.

Design overview

Because of the variaty of buggy and incomplete implementations of WebDAV, this component will provide an abstraction to suite the different needs. Beside that, an abstract interface to the backend will be provided.

The main class of this component will provide a fully RFC 2518 compliant implementation of a WebDAV server. An instance of this class retrieves an instance of a handler class, which takes care for performing the requested operations on a backend (for example the filesystem).

Additionally, a collection of classes, which inherit the main class will be provided. Each of this classes will provide a compatibility layer on top of the RFC implementation, which works correctly with one or more "buggy" WebDAV clients. A factory pattern implementation will be provided, which takes automatically care of creating the correct server instance for a client.

Tiers

The component is basically devided into 3 tiers: The top tier, being represented by the main server class. An instance of this class is responsible to dispatch a received request to a correct transport handler, which is capable of parsing the request.

The transport handler level is the second tier. Classes in this tier are responsible to parse an incoming request and extract all relevant information to generate a response for it into a struct object. These struct object is then passed back to the server object.

Based on the request struct object, the server checks the capabilities of its third tier, the used backend handler. If the handler object provides all necessary capabilities to generate a response, it is called to do so. If the server class can perform emulation of not available capabilities and rely on different features of the backend. In case there is no way, the backend can handle the request, the server class will indicate that with an error response.

The way back flows through the 3 tiers back again: The backend handler generates a response object, which is passed back to the main server object, which makes the active transport handler encode the response and sends it back to the client.

Classes

ezcWebdavServer

The ezcWebdavServer class is the main class of the package. It has to be instantiated to create a server instance and provides a method to get the server up and running. An object of this class takes the main controll over serving the webdav service.

Among the configuration of the server instance there must be: A backend handler object, which will be used to serve the received WebDAV requests. A fitting configuration for the backend handler. A collection of transport handlers which can be used to parse incoming requests. General configuration on the bevahiour of the server instance (like locking and stuff).

The backend handler object must extend the base class ezcWebdavBackendHandler and must indicate to the main server, which capabilities it provides. The server class can potentially emulate certain capabilities, if the handler does not provide it. An example here is locking, which can be either performed by the handler itself or the main server class.

Such emulation functionality could possibly be extracted to a third category of classes, which is only loaded by the main server object on-demand.

All configured transport handlers must implement the interface ezcWebdavTransportHandler, which defines the necessary methods.

The standard webdav server contains a list of transport handlers associated with regular expressions which should match the client name to be used. As a fallback the standards compliant transport handler will be used.

Special implementation added by the user will be add on top of the list, to be used at highest priority.

ezcWebdavBackend

All backend handlers for the Webdav component must extends this abstract base class and implement its abstract methods for very basic WebDAV serving. The operations defined for every backend handler to be mandatory are:

  • head()
  • get()
  • propFind()
  • propFetch()

All other WebDAV operations are optional to be implemented by a backend handler and are defined by the handler itself. The additional basic capabilities of backend handlers are indicated by implementing interfaces for the support additional request methods, like put, change, etc.

Additional features, like encryption support will be indicated by returning a bitmask of supported features by the backend handler.

The logical groups of capabilities are:

Put
The put capability indicates, that a handler is capable of handling file uploads via HTTP-PUT method.
Change
This sub class of WebDAV operations defines delete, copy and move operations to be supported by the handler class.
Make collection
The creation of new collections also makes up a capability unit and can optionally be implemented.
Lock
If the hander provides locking facilities on its own, the main server object must not take care about that.
GZIP-Compress
Handlers implementing this facility can deal with GZIP and bzip2 based compression.

If a handler does not support a certain facility and the main server object is not capable of emulating it, the server will respond using a "501 Not Implemented" server error.

ezcWebdavTransport

A class implementing this interface is capable of parsing a raw HTTP request into a struct extending ezcWebdavRequest and generating the HTTP response out of the ezcWebdavResponse struct. One transport handler is usually built to handle the communication with a certain set of specific client implementations.

A transport handler class will be able to parse the incoming HTTP request data into a struct identifying a certain type of request and containg all necessary and unified data, so that a backend handler can repsond to it.

The backend handler will then create a corresponding response object, which will be encoded back into HTTP data by the transport handler and send to the client by the server.

Each request type will come with its own struct classes to represent request and response data for the request. Beside the structured HTTP data, the structs can contain any additional information that must be transferred between server, transport handler and backend handler.

All struct classes representing either a request of response of the server will extend the abstract base classes ezcWebdavRequest and ezcWebdavResponse.

An example of this structure is: ezcWebdavGetRequest and ezcWebdavGetResponse

These 2 classes will be used to serve GET requests. Beside the usual request information - like URI, date and headers - the request object will contain information about partial GET mechanisms to use and what else is important. The backend handler will return an instance of ezcWebdavGetResponse if the request was handled correctly, or a corresponding ezcWebdavErrorResponse object, if the request failed.

The main server instance will know about available clients and will have a regular expression for each of them, to identify the clients it communicates to by matching the regualr expression against the client name provided in the HTTP headers.

ezcWebdavPathFactory

This class is meant to calculate the path of the requested item from the backend based on the given path by the webdav client. The resulting path string is absolute to the root of the backend repository.

This class is necessary to calculate the correct path when a server uses rewrite rules for mapping directories to one or more webdav implementations. The basic class uses pathinfo to parse the requested file / collection.

Request: /path/to/webdav.php/path/to/file Result: /path/to/file

You may want to provide custome implementations for different mappings so that rewrite could be used by the webserver to access files.

Request: /images/path/to/file Rewritten: /path/to/dav_images.php/path/to/file Result: /path/to/file

The factory class is necessary, because the paths contained in the request body will match the same scheme like the original request path, but not be rewritten by the webserver, so that the user may extend the path factory to fit his own purposes.

Example code

The following snippet shows the API calls necessary to get a WebDAV server up and running.

    <?php

    $server = new ezcWebdavServer();

    // Server data using file backend with data in "path/"
    $server->backend = new ezcWebdavBackendFile( \'/path\' );

// Optionally register aditional transport handlers
    //
    // This step is only required, when a user wants to provide own
    // implementations for special clients.
    $server->registerTransportHandler(
            // Regular expression to match client name
            \'(Microsoft.*Webdav\\s+XP)i\',
            // Class name of transport handler, extending ezcWebdavTransportHandler
            \'ezcWebdavMicrosoftTransport\'
    );
    $server->registerTransportHandler(
            // Regular expression to match client name
            \'(.*Firefox.*)i\',
            // Class name of transport handler, extending ezcWebdavTransportHandler
            \'ezcWebdavMozillaTransport\'
    );

    // Serve requests
    $server->handle();
', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '18675', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test.html', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test.html', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test.html', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test.html', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '18675', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/put_test.html', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '42fa6b3c46b3066e7ce125d5c114877b', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 31 => array ( 'request' => array ( 'body' => 'This is an UTF-8 test file ========================== This file contains a variaty of Unicode characters to test with the eZ Webdav component. Greek letters ------------- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ ϕ χ ψ ω Mathematical characters ----------------------- ℂ ℕ ℚ ℝ ℤ ∀ ∁ ∂ ∃ ∄ ∅ ∈ ∉ ∋ ∌ ∎ ∎ ∏ ∐ ∑ + − ∓ ∕ ∖ ∗ ∘ √ ∛ ∜ ∝ ∞ ∣ ∤ ∧ ∨ ∩ ∪ ∫ ∬ ∭ = ≔ ≕ ≙ ≝ ≠ ≡ ≢ < > ≤ ≥ ≪ ≫ ≮ ≯ ≰ ≱ ≺ ≻ ≼ ≽ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊕ ⊖ ⊗ ⊙ ⊚ ⊛ ⊜ ⊝ ⊢ ⊣ ⊤ ⊥ ⊧ ⊬ ⊶ ⊷ ⊻ ⊼ ⊽ ‰ ‱ ', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '740', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_utf8_content.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_utf8_content.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_utf8_content.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_utf8_content.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '740', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/put_test_utf8_content.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '03f21d9964e17d45d71164e30d8bbab5', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 32 => array ( 'request' => array ( 'body' => 'This is an UTF-8 test file ========================== This file contains a variaty of Unicode characters to test with the eZ Webdav component. Greek letters ------------- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ ϕ χ ψ ω Mathematical characters ----------------------- ℂ ℕ ℚ ℝ ℤ ∀ ∁ ∂ ∃ ∄ ∅ ∈ ∉ ∋ ∌ ∎ ∎ ∏ ∐ ∑ + − ∓ ∕ ∖ ∗ ∘ √ ∛ ∜ ∝ ∞ ∣ ∤ ∧ ∨ ∩ ∪ ∫ ∬ ∭ = ≔ ≕ ≙ ≝ ≠ ≡ ≢ < > ≤ ≥ ≪ ≫ ≮ ≯ ≰ ≱ ≺ ≻ ≼ ≽ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊕ ⊖ ⊗ ⊙ ⊚ ⊛ ⊜ ⊝ ⊢ ⊣ ⊤ ⊥ ⊧ ⊬ ⊶ ⊷ ⊻ ⊼ ⊽ ‰ ‱ ', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '740', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_öüäß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_öüäß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_öüäß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '740', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/put_test_öüäß.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => 'd2a20cb330bba15d6ead72369a42fa83', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 33 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test.html application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_utf8_content.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 34 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test.html application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_utf8_content.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 35 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test.html application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_utf8_content.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 36 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test.html', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test.html', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test.html', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test.html', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MOVE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/collection/subdir/put_test_renamed.xml', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/put_test.html', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 37 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_utf8_content.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 38 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_utf8_content.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 39 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_öüäß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_öüäß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_öüäß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MOVE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/collection/subdir/put_test_non_utf8.txt', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/put_test_öüäß.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 40 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_utf8_content.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 41 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_utf8_content.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 42 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_utf8_content.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_utf8_content.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_utf8_content.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_utf8_content.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MOVE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/put_test_utf8_content.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 43 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 44 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/collection', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/collection', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/collection', 'REDIRECT_URI' => '/index.php/collection/subdir/collection', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MKCOL', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/collection', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 45 => array ( 'request' => array ( 'body' => 'eZ component: Webdav, Design, 1.0Kore Nordmann, Tobias Schlitt$Rev$$Date$DraftContentsScopeDesign overviewTiersClassesezcWebdavServerezcWebdavBackendezcWebdavTransportezcWebdavPathFactoryExample code
ScopeThe scope of this document is to describe the initial design of a component that provides a WebDAV server, which works with all major other implementations of the WebDAV protocol.It is currently not planned to also offer a WebDAV client component.
Design overviewBecause of the variaty of buggy and incomplete implementations of WebDAV, this component will provide an abstraction to suite the different needs. Beside that, an abstract interface to the backend will be provided.The main class of this component will provide a fully RFC 2518 compliant implementation of a WebDAV server. An instance of this class retrieves an instance of a handler class, which takes care for performing the requested operations on a backend (for example the filesystem).Additionally, a collection of classes, which inherit the main class will be provided. Each of this classes will provide a compatibility layer on top of the RFC implementation, which works correctly with one or more "buggy" WebDAV clients. A factory pattern implementation will be provided, which takes automatically care of creating the correct server instance for a client.
TiersThe component is basically devided into 3 tiers: The top tier, being represented by the main server class. An instance of this class is responsible to dispatch a received request to a correct transport handler, which is capable of parsing the request.The transport handler level is the second tier. Classes in this tier are responsible to parse an incoming request and extract all relevant information to generate a response for it into a struct object. These struct object is then passed back to the server object.Based on the request struct object, the server checks the capabilities of its third tier, the used backend handler. If the handler object provides all necessary capabilities to generate a response, it is called to do so. If the server class can perform emulation of not available capabilities and rely on different features of the backend. In case there is no way, the backend can handle the request, the server class will indicate that with an error response.The way back flows through the 3 tiers back again: The backend handler generates a response object, which is passed back to the main server object, which makes the active transport handler encode the response and sends it back to the client.
Classes
ezcWebdavServerThe ezcWebdavServer class is the main class of the package. It has to be instantiated to create a server instance and provides a method to get the server up and running. An object of this class takes the main controll over serving the webdav service.Among the configuration of the server instance there must be: A backend handler object, which will be used to serve the received WebDAV requests. A fitting configuration for the backend handler. A collection of transport handlers which can be used to parse incoming requests. General configuration on the bevahiour of the server instance (like locking and stuff).The backend handler object must extend the base class ezcWebdavBackendHandler and must indicate to the main server, which capabilities it provides. The server class can potentially emulate certain capabilities, if the handler does not provide it. An example here is locking, which can be either performed by the handler itself or the main server class.Such emulation functionality could possibly be extracted to a third category of classes, which is only loaded by the main server object on-demand.All configured transport handlers must implement the interface ezcWebdavTransportHandler, which defines the necessary methods.The standard webdav server contains a list of transport handlers associated with regular expressions which should match the client name to be used. As a fallback the standards compliant transport handler will be used.Special implementation added by the user will be add on top of the list, to be used at highest priority.
ezcWebdavBackendAll backend handlers for the Webdav component must extends this abstract base class and implement its abstract methods for very basic WebDAV serving. The operations defined for every backend handler to be mandatory are:head()get()propFind()propFetch()All other WebDAV operations are optional to be implemented by a backend handler and are defined by the handler itself. The additional basic capabilities of backend handlers are indicated by implementing interfaces for the support additional request methods, like put, change, etc.Additional features, like encryption support will be indicated by returning a bitmask of supported features by the backend handler.The logical groups of capabilities are:PutThe put capability indicates, that a handler is capable of handling file uploads via HTTP-PUT method.ChangeThis sub class of WebDAV operations defines delete, copy and move operations to be supported by the handler class.Make collectionThe creation of new collections also makes up a capability unit and can optionally be implemented.LockIf the hander provides locking facilities on its own, the main server object must not take care about that.GZIP-CompressHandlers implementing this facility can deal with GZIP and bzip2 based compression.If a handler does not support a certain facility and the main server object is not capable of emulating it, the server will respond using a "501 Not Implemented" server error.
ezcWebdavTransportA class implementing this interface is capable of parsing a raw HTTP request into a struct extending ezcWebdavRequest and generating the HTTP response out of the ezcWebdavResponse struct. One transport handler is usually built to handle the communication with a certain set of specific client implementations.A transport handler class will be able to parse the incoming HTTP request data into a struct identifying a certain type of request and containg all necessary and unified data, so that a backend handler can repsond to it.The backend handler will then create a corresponding response object, which will be encoded back into HTTP data by the transport handler and send to the client by the server.Each request type will come with its own struct classes to represent request and response data for the request. Beside the structured HTTP data, the structs can contain any additional information that must be transferred between server, transport handler and backend handler.All struct classes representing either a request of response of the server will extend the abstract base classes ezcWebdavRequest and ezcWebdavResponse.An example of this structure is: ezcWebdavGetRequest and ezcWebdavGetResponseThese 2 classes will be used to serve GET requests. Beside the usual request information - like URI, date and headers - the request object will contain information about partial GET mechanisms to use and what else is important. The backend handler will return an instance of ezcWebdavGetResponse if the request was handled correctly, or a corresponding ezcWebdavErrorResponse object, if the request failed.The main server instance will know about available clients and will have a regular expression for each of them, to identify the clients it communicates to by matching the regualr expression against the client name provided in the HTTP headers.
ezcWebdavPathFactoryThis class is meant to calculate the path of the requested item from the backend based on the given path by the webdav client. The resulting path string is absolute to the root of the backend repository.This class is necessary to calculate the correct path when a server uses rewrite rules for mapping directories to one or more webdav implementations. The basic class uses pathinfo to parse the requested file / collection.Request: /path/to/webdav.php/path/to/file Result: /path/to/fileYou may want to provide custome implementations for different mappings so that rewrite could be used by the webserver to access files.Request: /images/path/to/file Rewritten: /path/to/dav_images.php/path/to/file Result: /path/to/fileThe factory class is necessary, because the paths contained in the request body will match the same scheme like the original request path, but not be rewritten by the webserver, so that the user may extend the path factory to fit his own purposes.
Example codeThe following snippet shows the API calls necessary to get a WebDAV server up and running. <?php $server = new ezcWebdavServer(); // Server data using file backend with data in "path/" $server->backend = new ezcWebdavBackendFile( \'/path\' ); // Optionally register aditional transport handlers // // This step is only required, when a user wants to provide own // implementations for special clients. $server->registerTransportHandler( // Regular expression to match client name \'(Microsoft.*Webdav\\s+XP)i\', // Class name of transport handler, extending ezcWebdavTransportHandler \'ezcWebdavMicrosoftTransport\' ); $server->registerTransportHandler( // Regular expression to match client name \'(.*Firefox.*)i\', // Class name of transport handler, extending ezcWebdavTransportHandler \'ezcWebdavMozillaTransport\' ); // Serve requests $server->handle();Local Variables: mode: rst fill-column: 79 End: vim: et syn=rst tw=79
', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '14011', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/collection/put_test.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/collection/put_test.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/collection/put_test.xml', 'REDIRECT_URI' => '/index.php/collection/subdir/collection/put_test.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '14011', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/collection/put_test.xml', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '91f0d1c75dbbaf2736b997fbf1dfc2fb', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 46 => array ( 'request' => array ( 'body' => 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'M7%' . "\0" . '' . "\0" . '6' . "\0" . '' . "\0" . ' ' . "\0" . '' . "\0" . 'put_test.xmlUT ' . "\0" . 'GGUx' . "\0" . 'd' . "\0" . '[is6_tIm$qf\'ut P' . "\0" . '~ ARrnv!(' . "\0" . 'ߖUզ=^~<JMŬuO?> -UϾ{\\Z;]إ5m4[[./ťU|*tzjᅴιl:y' . "\0" . '`WfbI29T>^~* Xq3{1S-RS֦\'dv)dhѭ;{#x|^N?Gg޺p@+:N9-]/Dtl4뿚FLf?B;wu^W :ZldGo竎3NEZHkQmmgWk H?ڴE/n}*l䶑U<̦VO% h*:)<(x_1.Zgk\'O:NCt}RM8[?\'}֑QJԥDާpRFUYD?yt?ulmQ\'/kvLi+x/{ʲ.p G8!Rcj t<(0&5Nx]]S|v@荂AJ;- p!GJD F1)!j7VKȧ+7V;Lj' . "\0" . 'NB*)ݪSoz«XۯHi' . "\0" . '8ʀ aAײ K ]ciK e|t:A x, @aN#+@;ȳC&CVT@7 A' . "\0" . 'Jh}x&CCGbqj' . "\0" . 'R#Bepjj-߭q_QPG S' . "\0" . '. ҪI l@nJXP_g <{zCK\\Y:stTG=Xd#g' . "\0" . '' . "\0" . 'ml(1@Ԋ+ʈ<HX!WW1ʴiLS@}#/טv#b g@gT- \'܊k~=4 *D' . "\0" . 'OE#SІ{ F=AYZ鶏hUHI " H1 #B hPQT*39,ڪty \\gcfTƒJw:+8kIg~Z.V޶MQtp-FA%0Bp y<;O[ՅvX $C4pð8en8tĵk1}gM$\'T7J&S)\\LgH}nw[GzF' . "\0" . 'u1(3AyLM#=0Gnc2UՎ;Tֽz\\JӠ*tȓȅiauB?@OXy[\\cI5˓q\'f`\'zZ/BtWL -zODSf{m|Lr+ ' . "\0" . 'җ S\'G#$L"A"v8:,z&}S`g;2FIn(/0SDGI2IoUCQ#ȸ? ~dAPxvbhRd;Ix#rl4>?~]>ˆbbka+E#!%Q(mu4v30RYUBm?Kcul ܶe|huCxxX6sXE=Ŋy%_ťL/ /fDے=:*,A>x29lZxL{~nx.vi/0wass %{147{]EK|3U; t]4 h !eNPU]X7TpU ! ojc6ܸ rGIR`s_qA{KB7$1Gnkѭ7d' . "\0" . 'X0L2Fhvc]"Q^K=\'RtbwぐcPjJYkqiEkw\\ c@)EIql*NLCWάeGԀ&R14-}' . "\0" . '`O `k̆jS*R W㗀En]ʭcYd^VP/ 5038|I߬ 1eC~Т=qEx)`l:u@vAZji:b!{qW6{ccv f;XoK;Ƴ/ǯ!.V{;W+za' . "\0" . 'x5;zUu/ `A-3[K\'5:ˇk$o/h2~+^Z MMu*;` ;YrJZ|u_m#6%P< ~ `~|, wz̩CpPDbڍ)q ? MD ̎ozZ\'8C,Jm~XG7z \\ kLw:&h壩X~lˏ:0$ʩ0 rx[E @hHgp7|P{' . "\0" . 'Bg' . "\0" . '-' . "\0" . 'ʊɋ*;Knu ϡhD_|`dxPK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'ډM7mh ' . "\0" . '' . "\0" . 'sI' . "\0" . '' . "\0" . ' ' . "\0" . '' . "\0" . 'put_test.htmlUT ' . "\0" . 'GGUx' . "\0" . 'd' . "\0" . '\\6οx;vlvpٝj 0& ' . "\0" . '[VR' . "\0" . ' RTɮ? <<@~"תڔO\'Pej2]nN=//\'?_[^wlŋ^}' . "\0" . ' ⪖(|xDLUbw,,#S?\\4sl+ӂei9}1Ϟe.qUND i(?rR O\'MTfWJMDߞNzHB[Y[zQ,RdJUKgh 6NV,84u-.W_@L tjxޔS 1_VSg,aޕYiitkIo ~GYϕp /ZfUⅼ֙Ƙld)p\'m,pWY;lvH..Oo#BJ;h@|n}7[jMحRNlA +JQ2UХp[%fTd\' MD*m*`" EnW5NZo:T bkvΐy:{L6֙Bh<̓`UaXAb]B8BBn#Lxa<"z"\\6p+~M\'$' . "\0" . '0@2#6\'fPHHt*s@1.t[40I\'h?IGkL[e44g`)8`l+eNbmq!&V' . "\0" . 'i{bki>rv>K966$0eɂr%v Cb' . "\0" . ' T3~G *p"7BF(NclW>ǡ Ɍi rē?r#aN(.: wռnV5ʯ7@/@io*f$EVc0l{:ďсv? P | xy2/sRĐLlÇ ɃnxGc:GF]kgh_b3)dױ/_G`El1 +LJA^=Lvͫ<Hf7Uul0 Pe~Q̔Zct܃?TV8' . "\0" . 'cε ک^ ;hy]`xFZF=' . "\0" . ' %hgSt!CH' . "\0" . 'Rk()$?JJ?J*?7cdu} rvTv#0tntiX| rt$ѐQ X%&!U7J дm-¯!<ѽ5I@.S[HUͰ;ytHoYS8b[A8rwSߣ' . "\0" . 'å1rj 0ϰeu,%|}$nEw=_fm#d}hlCNg\'P? 33\']oO͍vUTDkE_MD ^"|0-ꑗUqM' . "\0" . ' ) XK~p[]Ma%UjۦbmS?ɦlp%E[|ā)y6NZͳ0Dihhޟ\\^S' . "\0" . 'd/Z%e{ D;ѿoiYm#|2 vFQ>b\'2E WaXn3>[Qk5Y>n{' . "\0" . '[%8p پ:Z::4h\'75k%)c%}Q#2DMIMVSt:C}(<3Gk!htk1,qx79Ũn T]' . "\0" . 'ZhҔل8RQ9Uwt]#s 3(VWʹ1j*%%m\'5Jݶj팵v' . "\0" . 'cpwxɼNRlרYkul6{>JN4ЁqouJ;ƼG0wli-5iʉRW Oi\'*,:@.e_+O-.7V8MYkx3GB9r`HH^I~R5l4t{=lΐ"ZSj' . "\0" . ' R(̼at)^ G& #X3# T",u`=$XPc%jϼ<{2:@HM g@S(t ZI)*zPm%@)6Ԫ>X&V"fۛA?@~PZ oKC@ޤJ_,9{+6 nӚ\'zK4Jv,=\\: 5)bU>g_^O\'|;daPb,X3\\BtI6v)' . "\0" . ' bVaQ90oL*:#@gy|%q)caiNVXL$ptaߵ9tyk1M`Q {.^q w)I\'%؁Ӕd&' . "\0" . 'FAa΄2aP' . "\0" . 'UۘI:9^OK@S]\\7!}²%^f"p' . "\0" . 'J#vr?EN#a Ģ X]ҁ)e`gk*6fKԽwk>8zIml&Zp #cH!L(@̢qįBҶګPtCgP!,t=xIVXNn)YBg Q@C/1TFT>mMnDDT7M5("xOjJWC*BI3 PB!~tY´a' . "\0" . 'KGԲNY4' . "\0" . 's+d`h} @GuP+`h@(e<' . "\0" . 'g+,s xEpFr|(F6M\\SOe*9k{=l" _^?a [/p\\u w#A=X]Рh8*Q`kGҏILLjG^H{Ra$Rk0{ r~' . "\0" . '.H249xiY2|Q,8@7u2Llx2e' . "\0" . ';; 5kߗUdr+D ].Xc{v6Ih(H  r ^0)A^B1V6NZ!%qv &k8+IG^ 4XA"H_x廝 o~1pl1ϫjm*~8=!9klhb-򴨘prtiAlzvI{ЎE+6cf4YO":j卍x<4{aBX U_RS%[t6LRXg{*/nOq\\`ˮ)5X9Nwt+Ge/&!yv%aٕ#!9!Fu4Ϳ^=xm𹞋nz>d B#ͯ~jFMg(ÚUt $4]Nq$МE"~L>ʅcON%:]K l 7GBD ݁κ|ߋC\' x# ' . "\0" . '{J9qhÛ[BKq&L.~,NJ}න ;QslMN,v=ZC ]ld^[^+V_YŒ@|Ƞe8{!b yZmfKqv?f藵,5) V&7e; v=SCjk$A*܏ 5  |(аg$pMGmeFkcav8U_^tkܪ;"&C:˧HJvW荥 v˪MŦd\\VrLnLʅlGc>^Uġӊ{MFQFV OZ0߼N P"47ine?,;>xC$HqvP_j[a6kCP%`n5Oz*|˷,NZO*ǦzR{/k_%d#î4;/\'o,@V\\GG5kTwS bGgУOn*px2GwenõBQqH-/  fuU|(nwZ|,l$@r3Mt=780AH3V"+uc >hv5w[d^*d.8\\)>Ck%pZƩC\'b,"1Mz@\\ !HêW۪}D0?M; Cߒ~x}%eyؐub&c' . "\0" . 'N^Ęa039p7HbѲ lxOMp@o BR]"DHq`90,p]R^u]CE9l ƶAUSè0_=>y\\\\͎ǀRWvJ<{hFkhPz\'s^e6i.IO)U#.xb!\\0v7@ E@/5t.´5P+>#L ]\'"f]kxjh' . "\0" . 'nto' . "\0" . '[Ēo' . "\0" . 'hpo`a.Ps޴~XvYmg!}:8>柎UCZ&{?Ak~ /' . "\0" . 'P=j0 r5^wd6lt o=L rFS@|5/Ŋ,3؝' . "\0" . '\'ySDJm-tu1 @}z@;.' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'M7%' . "\0" . '' . "\0" . '6' . "\0" . '' . "\0" . ' ' . "\0" . ' ' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'put_test.xmlUT' . "\0" . 'GUx' . "\0" . '' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'ډM7mh ' . "\0" . '' . "\0" . 'sI' . "\0" . '' . "\0" . ' ' . "\0" . ' ' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'put_test.htmlUT' . "\0" . 'GUx' . "\0" . '' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '(' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . ' ', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '10645', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/collection/put_test.zip', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/collection/put_test.zip', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/collection/put_test.zip', 'REDIRECT_URI' => '/index.php/collection/subdir/collection/put_test.zip', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '10645', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/collection/put_test.zip', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => 'a7396b05849c2e5818d9af2c90beb699', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 47 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/collection/', 'REDIRECT_URI' => '/index.php/collection/subdir/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/collection/ httpd/unix-directory 4830744d2e394ce3c4d5667d7125c862 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/collection/put_test.xml application/octet-stream 91f0d1c75dbbaf2736b997fbf1dfc2fb Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/collection/put_test.zip application/octet-stream a7396b05849c2e5818d9af2c90beb699 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 48 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/collection httpd/unix-directory 4830744d2e394ce3c4d5667d7125c862 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 49 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_non_utf8.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_non_utf8.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_non_utf8.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_non_utf8.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/put_test_non_utf8.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'This is an UTF-8 test file ========================== This file contains a variaty of Unicode characters to test with the eZ Webdav component. Greek letters ------------- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ ϕ χ ψ ω Mathematical characters ----------------------- ℂ ℕ ℚ ℝ ℤ ∀ ∁ ∂ ∃ ∄ ∅ ∈ ∉ ∋ ∌ ∎ ∎ ∏ ∐ ∑ + − ∓ ∕ ∖ ∗ ∘ √ ∛ ∜ ∝ ∞ ∣ ∤ ∧ ∨ ∩ ∪ ∫ ∬ ∭ = ≔ ≕ ≙ ≝ ≠ ≡ ≢ < > ≤ ≥ ≪ ≫ ≮ ≯ ≰ ≱ ≺ ≻ ≼ ≽ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊕ ⊖ ⊗ ⊙ ⊚ ⊛ ⊜ ⊝ ⊢ ⊣ ⊤ ⊥ ⊧ ⊬ ⊶ ⊷ ⊻ ⊼ ⊽ ‰ ‱ ', 'headers' => array ( 'ETag' => '88f535dffe3f6075a0a7461f40325aea', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 50 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/collection/', 'REDIRECT_URI' => '/index.php/collection/subdir/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/collection/ httpd/unix-directory 4830744d2e394ce3c4d5667d7125c862 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/collection/put_test.xml application/octet-stream 91f0d1c75dbbaf2736b997fbf1dfc2fb Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/collection/put_test.zip application/octet-stream a7396b05849c2e5818d9af2c90beb699 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 51 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_renamed.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_renamed.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_renamed.xml', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_renamed.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/put_test_renamed.xml', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'eZ component: Webdav, Design, 1.0

eZ component: Webdav, Design, 1.0

Author:Kore Nordmann, Tobias Schlitt
Revision:$Rev$
Date:$Date$
Status:Draft

Scope

The scope of this document is to describe the initial design of a component that provides a WebDAV server, which works with all major other implementations of the WebDAV protocol.

It is currently not planned to also offer a WebDAV client component.

Design overview

Because of the variaty of buggy and incomplete implementations of WebDAV, this component will provide an abstraction to suite the different needs. Beside that, an abstract interface to the backend will be provided.

The main class of this component will provide a fully RFC 2518 compliant implementation of a WebDAV server. An instance of this class retrieves an instance of a handler class, which takes care for performing the requested operations on a backend (for example the filesystem).

Additionally, a collection of classes, which inherit the main class will be provided. Each of this classes will provide a compatibility layer on top of the RFC implementation, which works correctly with one or more "buggy" WebDAV clients. A factory pattern implementation will be provided, which takes automatically care of creating the correct server instance for a client.

Tiers

The component is basically devided into 3 tiers: The top tier, being represented by the main server class. An instance of this class is responsible to dispatch a received request to a correct transport handler, which is capable of parsing the request.

The transport handler level is the second tier. Classes in this tier are responsible to parse an incoming request and extract all relevant information to generate a response for it into a struct object. These struct object is then passed back to the server object.

Based on the request struct object, the server checks the capabilities of its third tier, the used backend handler. If the handler object provides all necessary capabilities to generate a response, it is called to do so. If the server class can perform emulation of not available capabilities and rely on different features of the backend. In case there is no way, the backend can handle the request, the server class will indicate that with an error response.

The way back flows through the 3 tiers back again: The backend handler generates a response object, which is passed back to the main server object, which makes the active transport handler encode the response and sends it back to the client.

Classes

ezcWebdavServer

The ezcWebdavServer class is the main class of the package. It has to be instantiated to create a server instance and provides a method to get the server up and running. An object of this class takes the main controll over serving the webdav service.

Among the configuration of the server instance there must be: A backend handler object, which will be used to serve the received WebDAV requests. A fitting configuration for the backend handler. A collection of transport handlers which can be used to parse incoming requests. General configuration on the bevahiour of the server instance (like locking and stuff).

The backend handler object must extend the base class ezcWebdavBackendHandler and must indicate to the main server, which capabilities it provides. The server class can potentially emulate certain capabilities, if the handler does not provide it. An example here is locking, which can be either performed by the handler itself or the main server class.

Such emulation functionality could possibly be extracted to a third category of classes, which is only loaded by the main server object on-demand.

All configured transport handlers must implement the interface ezcWebdavTransportHandler, which defines the necessary methods.

The standard webdav server contains a list of transport handlers associated with regular expressions which should match the client name to be used. As a fallback the standards compliant transport handler will be used.

Special implementation added by the user will be add on top of the list, to be used at highest priority.

ezcWebdavBackend

All backend handlers for the Webdav component must extends this abstract base class and implement its abstract methods for very basic WebDAV serving. The operations defined for every backend handler to be mandatory are:

  • head()
  • get()
  • propFind()
  • propFetch()

All other WebDAV operations are optional to be implemented by a backend handler and are defined by the handler itself. The additional basic capabilities of backend handlers are indicated by implementing interfaces for the support additional request methods, like put, change, etc.

Additional features, like encryption support will be indicated by returning a bitmask of supported features by the backend handler.

The logical groups of capabilities are:

Put
The put capability indicates, that a handler is capable of handling file uploads via HTTP-PUT method.
Change
This sub class of WebDAV operations defines delete, copy and move operations to be supported by the handler class.
Make collection
The creation of new collections also makes up a capability unit and can optionally be implemented.
Lock
If the hander provides locking facilities on its own, the main server object must not take care about that.
GZIP-Compress
Handlers implementing this facility can deal with GZIP and bzip2 based compression.

If a handler does not support a certain facility and the main server object is not capable of emulating it, the server will respond using a "501 Not Implemented" server error.

ezcWebdavTransport

A class implementing this interface is capable of parsing a raw HTTP request into a struct extending ezcWebdavRequest and generating the HTTP response out of the ezcWebdavResponse struct. One transport handler is usually built to handle the communication with a certain set of specific client implementations.

A transport handler class will be able to parse the incoming HTTP request data into a struct identifying a certain type of request and containg all necessary and unified data, so that a backend handler can repsond to it.

The backend handler will then create a corresponding response object, which will be encoded back into HTTP data by the transport handler and send to the client by the server.

Each request type will come with its own struct classes to represent request and response data for the request. Beside the structured HTTP data, the structs can contain any additional information that must be transferred between server, transport handler and backend handler.

All struct classes representing either a request of response of the server will extend the abstract base classes ezcWebdavRequest and ezcWebdavResponse.

An example of this structure is: ezcWebdavGetRequest and ezcWebdavGetResponse

These 2 classes will be used to serve GET requests. Beside the usual request information - like URI, date and headers - the request object will contain information about partial GET mechanisms to use and what else is important. The backend handler will return an instance of ezcWebdavGetResponse if the request was handled correctly, or a corresponding ezcWebdavErrorResponse object, if the request failed.

The main server instance will know about available clients and will have a regular expression for each of them, to identify the clients it communicates to by matching the regualr expression against the client name provided in the HTTP headers.

ezcWebdavPathFactory

This class is meant to calculate the path of the requested item from the backend based on the given path by the webdav client. The resulting path string is absolute to the root of the backend repository.

This class is necessary to calculate the correct path when a server uses rewrite rules for mapping directories to one or more webdav implementations. The basic class uses pathinfo to parse the requested file / collection.

Request: /path/to/webdav.php/path/to/file Result: /path/to/file

You may want to provide custome implementations for different mappings so that rewrite could be used by the webserver to access files.

Request: /images/path/to/file Rewritten: /path/to/dav_images.php/path/to/file Result: /path/to/file

The factory class is necessary, because the paths contained in the request body will match the same scheme like the original request path, but not be rewritten by the webserver, so that the user may extend the path factory to fit his own purposes.

Example code

The following snippet shows the API calls necessary to get a WebDAV server up and running.

    <?php

    $server = new ezcWebdavServer();

    // Server data using file backend with data in "path/"
    $server->backend = new ezcWebdavBackendFile( \'/path\' );

// Optionally register aditional transport handlers
    //
    // This step is only required, when a user wants to provide own
    // implementations for special clients.
    $server->registerTransportHandler(
            // Regular expression to match client name
            \'(Microsoft.*Webdav\\s+XP)i\',
            // Class name of transport handler, extending ezcWebdavTransportHandler
            \'ezcWebdavMicrosoftTransport\'
    );
    $server->registerTransportHandler(
            // Regular expression to match client name
            \'(.*Firefox.*)i\',
            // Class name of transport handler, extending ezcWebdavTransportHandler
            \'ezcWebdavMozillaTransport\'
    );

    // Serve requests
    $server->handle();
', 'headers' => array ( 'ETag' => '3f3e5419aff5da5a5f9ef38c571ec272', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 52 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_öäüß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_öäüß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_öäüß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/put_test_öäüß.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'This is an UTF-8 test file ========================== This file contains a variaty of Unicode characters to test with the eZ Webdav component. Greek letters ------------- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ ϕ χ ψ ω Mathematical characters ----------------------- ℂ ℕ ℚ ℝ ℤ ∀ ∁ ∂ ∃ ∄ ∅ ∈ ∉ ∋ ∌ ∎ ∎ ∏ ∐ ∑ + − ∓ ∕ ∖ ∗ ∘ √ ∛ ∜ ∝ ∞ ∣ ∤ ∧ ∨ ∩ ∪ ∫ ∬ ∭ = ≔ ≕ ≙ ≝ ≠ ≡ ≢ < > ≤ ≥ ≪ ≫ ≮ ≯ ≰ ≱ ≺ ≻ ≼ ≽ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊕ ⊖ ⊗ ⊙ ⊚ ⊛ ⊜ ⊝ ⊢ ⊣ ⊤ ⊥ ⊧ ⊬ ⊶ ⊷ ⊻ ⊼ ⊽ ‰ ‱ ', 'headers' => array ( 'ETag' => 'a22ba5f3f6bfe26a62130a37fa15133d', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 53 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/collection/put_test.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/collection/put_test.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/collection/put_test.xml', 'REDIRECT_URI' => '/index.php/collection/subdir/collection/put_test.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/collection/put_test.xml', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'eZ component: Webdav, Design, 1.0Kore Nordmann, Tobias Schlitt$Rev$$Date$DraftContentsScopeDesign overviewTiersClassesezcWebdavServerezcWebdavBackendezcWebdavTransportezcWebdavPathFactoryExample code
ScopeThe scope of this document is to describe the initial design of a component that provides a WebDAV server, which works with all major other implementations of the WebDAV protocol.It is currently not planned to also offer a WebDAV client component.
Design overviewBecause of the variaty of buggy and incomplete implementations of WebDAV, this component will provide an abstraction to suite the different needs. Beside that, an abstract interface to the backend will be provided.The main class of this component will provide a fully RFC 2518 compliant implementation of a WebDAV server. An instance of this class retrieves an instance of a handler class, which takes care for performing the requested operations on a backend (for example the filesystem).Additionally, a collection of classes, which inherit the main class will be provided. Each of this classes will provide a compatibility layer on top of the RFC implementation, which works correctly with one or more "buggy" WebDAV clients. A factory pattern implementation will be provided, which takes automatically care of creating the correct server instance for a client.
TiersThe component is basically devided into 3 tiers: The top tier, being represented by the main server class. An instance of this class is responsible to dispatch a received request to a correct transport handler, which is capable of parsing the request.The transport handler level is the second tier. Classes in this tier are responsible to parse an incoming request and extract all relevant information to generate a response for it into a struct object. These struct object is then passed back to the server object.Based on the request struct object, the server checks the capabilities of its third tier, the used backend handler. If the handler object provides all necessary capabilities to generate a response, it is called to do so. If the server class can perform emulation of not available capabilities and rely on different features of the backend. In case there is no way, the backend can handle the request, the server class will indicate that with an error response.The way back flows through the 3 tiers back again: The backend handler generates a response object, which is passed back to the main server object, which makes the active transport handler encode the response and sends it back to the client.
Classes
ezcWebdavServerThe ezcWebdavServer class is the main class of the package. It has to be instantiated to create a server instance and provides a method to get the server up and running. An object of this class takes the main controll over serving the webdav service.Among the configuration of the server instance there must be: A backend handler object, which will be used to serve the received WebDAV requests. A fitting configuration for the backend handler. A collection of transport handlers which can be used to parse incoming requests. General configuration on the bevahiour of the server instance (like locking and stuff).The backend handler object must extend the base class ezcWebdavBackendHandler and must indicate to the main server, which capabilities it provides. The server class can potentially emulate certain capabilities, if the handler does not provide it. An example here is locking, which can be either performed by the handler itself or the main server class.Such emulation functionality could possibly be extracted to a third category of classes, which is only loaded by the main server object on-demand.All configured transport handlers must implement the interface ezcWebdavTransportHandler, which defines the necessary methods.The standard webdav server contains a list of transport handlers associated with regular expressions which should match the client name to be used. As a fallback the standards compliant transport handler will be used.Special implementation added by the user will be add on top of the list, to be used at highest priority.
ezcWebdavBackendAll backend handlers for the Webdav component must extends this abstract base class and implement its abstract methods for very basic WebDAV serving. The operations defined for every backend handler to be mandatory are:head()get()propFind()propFetch()All other WebDAV operations are optional to be implemented by a backend handler and are defined by the handler itself. The additional basic capabilities of backend handlers are indicated by implementing interfaces for the support additional request methods, like put, change, etc.Additional features, like encryption support will be indicated by returning a bitmask of supported features by the backend handler.The logical groups of capabilities are:PutThe put capability indicates, that a handler is capable of handling file uploads via HTTP-PUT method.ChangeThis sub class of WebDAV operations defines delete, copy and move operations to be supported by the handler class.Make collectionThe creation of new collections also makes up a capability unit and can optionally be implemented.LockIf the hander provides locking facilities on its own, the main server object must not take care about that.GZIP-CompressHandlers implementing this facility can deal with GZIP and bzip2 based compression.If a handler does not support a certain facility and the main server object is not capable of emulating it, the server will respond using a "501 Not Implemented" server error.
ezcWebdavTransportA class implementing this interface is capable of parsing a raw HTTP request into a struct extending ezcWebdavRequest and generating the HTTP response out of the ezcWebdavResponse struct. One transport handler is usually built to handle the communication with a certain set of specific client implementations.A transport handler class will be able to parse the incoming HTTP request data into a struct identifying a certain type of request and containg all necessary and unified data, so that a backend handler can repsond to it.The backend handler will then create a corresponding response object, which will be encoded back into HTTP data by the transport handler and send to the client by the server.Each request type will come with its own struct classes to represent request and response data for the request. Beside the structured HTTP data, the structs can contain any additional information that must be transferred between server, transport handler and backend handler.All struct classes representing either a request of response of the server will extend the abstract base classes ezcWebdavRequest and ezcWebdavResponse.An example of this structure is: ezcWebdavGetRequest and ezcWebdavGetResponseThese 2 classes will be used to serve GET requests. Beside the usual request information - like URI, date and headers - the request object will contain information about partial GET mechanisms to use and what else is important. The backend handler will return an instance of ezcWebdavGetResponse if the request was handled correctly, or a corresponding ezcWebdavErrorResponse object, if the request failed.The main server instance will know about available clients and will have a regular expression for each of them, to identify the clients it communicates to by matching the regualr expression against the client name provided in the HTTP headers.
ezcWebdavPathFactoryThis class is meant to calculate the path of the requested item from the backend based on the given path by the webdav client. The resulting path string is absolute to the root of the backend repository.This class is necessary to calculate the correct path when a server uses rewrite rules for mapping directories to one or more webdav implementations. The basic class uses pathinfo to parse the requested file / collection.Request: /path/to/webdav.php/path/to/file Result: /path/to/fileYou may want to provide custome implementations for different mappings so that rewrite could be used by the webserver to access files.Request: /images/path/to/file Rewritten: /path/to/dav_images.php/path/to/file Result: /path/to/fileThe factory class is necessary, because the paths contained in the request body will match the same scheme like the original request path, but not be rewritten by the webserver, so that the user may extend the path factory to fit his own purposes.
Example codeThe following snippet shows the API calls necessary to get a WebDAV server up and running. <?php $server = new ezcWebdavServer(); // Server data using file backend with data in "path/" $server->backend = new ezcWebdavBackendFile( \'/path\' ); // Optionally register aditional transport handlers // // This step is only required, when a user wants to provide own // implementations for special clients. $server->registerTransportHandler( // Regular expression to match client name \'(Microsoft.*Webdav\\s+XP)i\', // Class name of transport handler, extending ezcWebdavTransportHandler \'ezcWebdavMicrosoftTransport\' ); $server->registerTransportHandler( // Regular expression to match client name \'(.*Firefox.*)i\', // Class name of transport handler, extending ezcWebdavTransportHandler \'ezcWebdavMozillaTransport\' ); // Serve requests $server->handle();Local Variables: mode: rst fill-column: 79 End: vim: et syn=rst tw=79
', 'headers' => array ( 'ETag' => '91f0d1c75dbbaf2736b997fbf1dfc2fb', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 54 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/collection/put_test.zip', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/collection/put_test.zip', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/collection/put_test.zip', 'REDIRECT_URI' => '/index.php/collection/subdir/collection/put_test.zip', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir/collection/put_test.zip', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'M7%' . "\0" . '' . "\0" . '6' . "\0" . '' . "\0" . ' ' . "\0" . '' . "\0" . 'put_test.xmlUT ' . "\0" . 'GGUx' . "\0" . 'd' . "\0" . '[is6_tIm$qf\'ut P' . "\0" . '~ ARrnv!(' . "\0" . 'ߖUզ=^~<JMŬuO?> -UϾ{\\Z;]إ5m4[[./ťU|*tzjᅴιl:y' . "\0" . '`WfbI29T>^~* Xq3{1S-RS֦\'dv)dhѭ;{#x|^N?Gg޺p@+:N9-]/Dtl4뿚FLf?B;wu^W :ZldGo竎3NEZHkQmmgWk H?ڴE/n}*l䶑U<̦VO% h*:)<(x_1.Zgk\'O:NCt}RM8[?\'}֑QJԥDާpRFUYD?yt?ulmQ\'/kvLi+x/{ʲ.p G8!Rcj t<(0&5Nx]]S|v@荂AJ;- p!GJD F1)!j7VKȧ+7V;Lj' . "\0" . 'NB*)ݪSoz«XۯHi' . "\0" . '8ʀ aAײ K ]ciK e|t:A x, @aN#+@;ȳC&CVT@7 A' . "\0" . 'Jh}x&CCGbqj' . "\0" . 'R#Bepjj-߭q_QPG S' . "\0" . '. ҪI l@nJXP_g <{zCK\\Y:stTG=Xd#g' . "\0" . '' . "\0" . 'ml(1@Ԋ+ʈ<HX!WW1ʴiLS@}#/טv#b g@gT- \'܊k~=4 *D' . "\0" . 'OE#SІ{ F=AYZ鶏hUHI " H1 #B hPQT*39,ڪty \\gcfTƒJw:+8kIg~Z.V޶MQtp-FA%0Bp y<;O[ՅvX $C4pð8en8tĵk1}gM$\'T7J&S)\\LgH}nw[GzF' . "\0" . 'u1(3AyLM#=0Gnc2UՎ;Tֽz\\JӠ*tȓȅiauB?@OXy[\\cI5˓q\'f`\'zZ/BtWL -zODSf{m|Lr+ ' . "\0" . 'җ S\'G#$L"A"v8:,z&}S`g;2FIn(/0SDGI2IoUCQ#ȸ? ~dAPxvbhRd;Ix#rl4>?~]>ˆbbka+E#!%Q(mu4v30RYUBm?Kcul ܶe|huCxxX6sXE=Ŋy%_ťL/ /fDے=:*,A>x29lZxL{~nx.vi/0wass %{147{]EK|3U; t]4 h !eNPU]X7TpU ! ojc6ܸ rGIR`s_qA{KB7$1Gnkѭ7d' . "\0" . 'X0L2Fhvc]"Q^K=\'RtbwぐcPjJYkqiEkw\\ c@)EIql*NLCWάeGԀ&R14-}' . "\0" . '`O `k̆jS*R W㗀En]ʭcYd^VP/ 5038|I߬ 1eC~Т=qEx)`l:u@vAZji:b!{qW6{ccv f;XoK;Ƴ/ǯ!.V{;W+za' . "\0" . 'x5;zUu/ `A-3[K\'5:ˇk$o/h2~+^Z MMu*;` ;YrJZ|u_m#6%P< ~ `~|, wz̩CpPDbڍ)q ? MD ̎ozZ\'8C,Jm~XG7z \\ kLw:&h壩X~lˏ:0$ʩ0 rx[E @hHgp7|P{' . "\0" . 'Bg' . "\0" . '-' . "\0" . 'ʊɋ*;Knu ϡhD_|`dxPK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'ډM7mh ' . "\0" . '' . "\0" . 'sI' . "\0" . '' . "\0" . ' ' . "\0" . '' . "\0" . 'put_test.htmlUT ' . "\0" . 'GGUx' . "\0" . 'd' . "\0" . '\\6οx;vlvpٝj 0& ' . "\0" . '[VR' . "\0" . ' RTɮ? <<@~"תڔO\'Pej2]nN=//\'?_[^wlŋ^}' . "\0" . ' ⪖(|xDLUbw,,#S?\\4sl+ӂei9}1Ϟe.qUND i(?rR O\'MTfWJMDߞNzHB[Y[zQ,RdJUKgh 6NV,84u-.W_@L tjxޔS 1_VSg,aޕYiitkIo ~GYϕp /ZfUⅼ֙Ƙld)p\'m,pWY;lvH..Oo#BJ;h@|n}7[jMحRNlA +JQ2UХp[%fTd\' MD*m*`" EnW5NZo:T bkvΐy:{L6֙Bh<̓`UaXAb]B8BBn#Lxa<"z"\\6p+~M\'$' . "\0" . '0@2#6\'fPHHt*s@1.t[40I\'h?IGkL[e44g`)8`l+eNbmq!&V' . "\0" . 'i{bki>rv>K966$0eɂr%v Cb' . "\0" . ' T3~G *p"7BF(NclW>ǡ Ɍi rē?r#aN(.: wռnV5ʯ7@/@io*f$EVc0l{:ďсv? P | xy2/sRĐLlÇ ɃnxGc:GF]kgh_b3)dױ/_G`El1 +LJA^=Lvͫ<Hf7Uul0 Pe~Q̔Zct܃?TV8' . "\0" . 'cε ک^ ;hy]`xFZF=' . "\0" . ' %hgSt!CH' . "\0" . 'Rk()$?JJ?J*?7cdu} rvTv#0tntiX| rt$ѐQ X%&!U7J дm-¯!<ѽ5I@.S[HUͰ;ytHoYS8b[A8rwSߣ' . "\0" . 'å1rj 0ϰeu,%|}$nEw=_fm#d}hlCNg\'P? 33\']oO͍vUTDkE_MD ^"|0-ꑗUqM' . "\0" . ' ) XK~p[]Ma%UjۦbmS?ɦlp%E[|ā)y6NZͳ0Dihhޟ\\^S' . "\0" . 'd/Z%e{ D;ѿoiYm#|2 vFQ>b\'2E WaXn3>[Qk5Y>n{' . "\0" . '[%8p پ:Z::4h\'75k%)c%}Q#2DMIMVSt:C}(<3Gk!htk1,qx79Ũn T]' . "\0" . 'ZhҔل8RQ9Uwt]#s 3(VWʹ1j*%%m\'5Jݶj팵v' . "\0" . 'cpwxɼNRlרYkul6{>JN4ЁqouJ;ƼG0wli-5iʉRW Oi\'*,:@.e_+O-.7V8MYkx3GB9r`HH^I~R5l4t{=lΐ"ZSj' . "\0" . ' R(̼at)^ G& #X3# T",u`=$XPc%jϼ<{2:@HM g@S(t ZI)*zPm%@)6Ԫ>X&V"fۛA?@~PZ oKC@ޤJ_,9{+6 nӚ\'zK4Jv,=\\: 5)bU>g_^O\'|;daPb,X3\\BtI6v)' . "\0" . ' bVaQ90oL*:#@gy|%q)caiNVXL$ptaߵ9tyk1M`Q {.^q w)I\'%؁Ӕd&' . "\0" . 'FAa΄2aP' . "\0" . 'UۘI:9^OK@S]\\7!}²%^f"p' . "\0" . 'J#vr?EN#a Ģ X]ҁ)e`gk*6fKԽwk>8zIml&Zp #cH!L(@̢qįBҶګPtCgP!,t=xIVXNn)YBg Q@C/1TFT>mMnDDT7M5("xOjJWC*BI3 PB!~tY´a' . "\0" . 'KGԲNY4' . "\0" . 's+d`h} @GuP+`h@(e<' . "\0" . 'g+,s xEpFr|(F6M\\SOe*9k{=l" _^?a [/p\\u w#A=X]Рh8*Q`kGҏILLjG^H{Ra$Rk0{ r~' . "\0" . '.H249xiY2|Q,8@7u2Llx2e' . "\0" . ';; 5kߗUdr+D ].Xc{v6Ih(H  r ^0)A^B1V6NZ!%qv &k8+IG^ 4XA"H_x廝 o~1pl1ϫjm*~8=!9klhb-򴨘prtiAlzvI{ЎE+6cf4YO":j卍x<4{aBX U_RS%[t6LRXg{*/nOq\\`ˮ)5X9Nwt+Ge/&!yv%aٕ#!9!Fu4Ϳ^=xm𹞋nz>d B#ͯ~jFMg(ÚUt $4]Nq$МE"~L>ʅcON%:]K l 7GBD ݁κ|ߋC\' x# ' . "\0" . '{J9qhÛ[BKq&L.~,NJ}න ;QslMN,v=ZC ]ld^[^+V_YŒ@|Ƞe8{!b yZmfKqv?f藵,5) V&7e; v=SCjk$A*܏ 5  |(аg$pMGmeFkcav8U_^tkܪ;"&C:˧HJvW荥 v˪MŦd\\VrLnLʅlGc>^Uġӊ{MFQFV OZ0߼N P"47ine?,;>xC$HqvP_j[a6kCP%`n5Oz*|˷,NZO*ǦzR{/k_%d#î4;/\'o,@V\\GG5kTwS bGgУOn*px2GwenõBQqH-/  fuU|(nwZ|,l$@r3Mt=780AH3V"+uc >hv5w[d^*d.8\\)>Ck%pZƩC\'b,"1Mz@\\ !HêW۪}D0?M; Cߒ~x}%eyؐub&c' . "\0" . 'N^Ęa039p7HbѲ lxOMp@o BR]"DHq`90,p]R^u]CE9l ƶAUSè0_=>y\\\\͎ǀRWvJ<{hFkhPz\'s^e6i.IO)U#.xb!\\0v7@ E@/5t.´5P+>#L ]\'"f]kxjh' . "\0" . 'nto' . "\0" . '[Ēo' . "\0" . 'hpo`a.Ps޴~XvYmg!}:8>柎UCZ&{?Ak~ /' . "\0" . 'P=j0 r5^wd6lt o=L rFS@|5/Ŋ,3؝' . "\0" . '\'ySDJm-tu1 @}z@;.' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'M7%' . "\0" . '' . "\0" . '6' . "\0" . '' . "\0" . ' ' . "\0" . ' ' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'put_test.xmlUT' . "\0" . 'GUx' . "\0" . '' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'ډM7mh ' . "\0" . '' . "\0" . 'sI' . "\0" . '' . "\0" . ' ' . "\0" . ' ' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'put_test.htmlUT' . "\0" . 'GUx' . "\0" . '' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '(' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . ' ', 'headers' => array ( 'ETag' => 'a7396b05849c2e5818d9af2c90beb699', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 55 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/', 'REDIRECT_URI' => '/index.php/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/ httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/file.txt text/plain; charset="utf-8" 60c0afeb8f68b1765e13694b5e7c8c3d Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 56 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/collection httpd/unix-directory 4830744d2e394ce3c4d5667d7125c862 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 57 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/', 'REDIRECT_URI' => '/index.php/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/ httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/file.txt text/plain; charset="utf-8" 60c0afeb8f68b1765e13694b5e7c8c3d Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 58 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/subdir/ httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir/collection httpd/unix-directory 4830744d2e394ce3c4d5667d7125c862 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 59 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/', 'REDIRECT_URI' => '/index.php/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/ httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/file.txt text/plain; charset="utf-8" 60c0afeb8f68b1765e13694b5e7c8c3d Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 60 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_non_utf8.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_non_utf8.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_non_utf8.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_non_utf8.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'COPY', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/collection/put_test_non_utf8.txt', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/put_test_non_utf8.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 61 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_renamed.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_renamed.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_renamed.xml', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_renamed.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'COPY', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/collection/put_test_renamed.xml', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/put_test_renamed.xml', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 62 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/put_test_öäüß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/put_test_öäüß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'REDIRECT_URI' => '/index.php/collection/subdir/put_test_öäüß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'COPY', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/put_test_öäüß.txt', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 63 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/', 'REDIRECT_URI' => '/index.php/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/ httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/file.txt text/plain; charset="utf-8" 60c0afeb8f68b1765e13694b5e7c8c3d Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 64 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/', 'REDIRECT_URI' => '/index.php/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/ httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/file.txt text/plain; charset="utf-8" 60c0afeb8f68b1765e13694b5e7c8c3d Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 65 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir/', 'REDIRECT_URI' => '/index.php/collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MOVE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/collection/subdir_renamed/', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'PHP_SELF' => '/index.php/collection/subdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 66 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/', 'REDIRECT_URI' => '/index.php/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/collection/ httpd/unix-directory 9696c0fa460d4ed148cb40b2e8388c1e Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/file.txt text/plain; charset="utf-8" 60c0afeb8f68b1765e13694b5e7c8c3d Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_non_utf8.txt application/octet-stream d2a20cb330bba15d6ead72369a42fa83 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_renamed.xml application/octet-stream 42fa6b3c46b3066e7ce125d5c114877b Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 03f21d9964e17d45d71164e30d8bbab5 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/collection/subdir_renamed httpd/unix-directory 2215ad4a0621fe1f07727e8534c54a95 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 67 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/collection/subdir_renamed/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/collection/subdir_renamed/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/collection/subdir_renamed/', 'REDIRECT_URI' => '/index.php/collection/subdir_renamed/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'PHP_SELF' => '/index.php/collection/subdir_renamed/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 68 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/secure_collection/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'Authorization failed.', 'headers' => array ( 'WWW-Authenticate' => array ( 'basic' => 'Basic realm="eZ Components WebDAV"', 'digest' => 'Digest realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", algorithm="MD5"', ), 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'text/plain; charset="utf-8"', 'Content-Length' => '21', ), 'status' => 'HTTP/1.1 401 Unauthorized', ), ), 69 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/", qop=, nc=00000001, cnonce="0a0133f8", response="eafe2a2ac2a1b1e43c5613c419c7e00d"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/", qop=, nc=00000001, cnonce="0a0133f8", response="eafe2a2ac2a1b1e43c5613c419c7e00d"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 70 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/", qop=, nc=00000001, cnonce="11f733ec", response="eafe2a2ac2a1b1e43c5613c419c7e00d"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/", qop=, nc=00000001, cnonce="11f733ec", response="eafe2a2ac2a1b1e43c5613c419c7e00d"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 71 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/file.txt', 'REDIRECT_URI' => '/index.php/secure_collection/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/file.txt", qop=, nc=00000001, cnonce="11f733ec", response="dd5eea8af103d2bc1e95d5bb71116df8"', 'PHP_SELF' => '/index.php/secure_collection/file.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/file.txt", qop=, nc=00000001, cnonce="11f733ec", response="dd5eea8af103d2bc1e95d5bb71116df8"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'Some text content.', 'headers' => array ( 'ETag' => '915f244ec53702ea179db0509d787bde', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'text/plain; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 72 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="4c8ab45b3b083eb544ad3c7688cf4d25"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="4c8ab45b3b083eb544ad3c7688cf4d25"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.html text/html; charset="utf-8" 63e609ad6597ac5f4a6c399729a4abe0 Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.xml text/xml; charset="utf-8" b23a873ef8c0f8e3b33339bed653b763 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 73 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MKCOL', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/subdir/newdir", qop=, nc=00000001, cnonce="11f733ec", response="e9d6de969fd2b2a1603e4400a32c97d0"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/subdir/newdir", qop=, nc=00000001, cnonce="11f733ec", response="e9d6de969fd2b2a1603e4400a32c97d0"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 74 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="11f733ec", response="a1aaf7861b98ff96e98f55996901e47c"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="0dfdaf952646079f4c2da059c690ffe1", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="11f733ec", response="a1aaf7861b98ff96e98f55996901e47c"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/ httpd/unix-directory e8fac981fae3020310afadcc6b78287c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 75 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'Authorization failed.', 'headers' => array ( 'WWW-Authenticate' => array ( 'basic' => 'Basic realm="eZ Components WebDAV"', 'digest' => 'Digest realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", algorithm="MD5"', ), 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'text/plain; charset="utf-8"', 'Content-Length' => '21', ), 'status' => 'HTTP/1.1 401 Unauthorized', ), ), 76 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="0a0133f8", response="f93002e02d8053e68426a557848c1cdb"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="0a0133f8", response="f93002e02d8053e68426a557848c1cdb"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/ httpd/unix-directory e8fac981fae3020310afadcc6b78287c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 77 => array ( 'request' => array ( 'body' => 'Some text content.', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '18', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/file.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '18', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/file.txt", qop=, nc=00000001, cnonce="0a0133f8", response="5ffe0e41f3ce07a6eaec913dc029bb0b"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/file.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/file.txt", qop=, nc=00000001, cnonce="0a0133f8", response="5ffe0e41f3ce07a6eaec913dc029bb0b"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => 'c0405933cd57c9b53258fe1be86b3e4f', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 78 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="0a0133f8", response="f93002e02d8053e68426a557848c1cdb"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="0a0133f8", response="f93002e02d8053e68426a557848c1cdb"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/ httpd/unix-directory e8fac981fae3020310afadcc6b78287c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/newdir/file.txt application/octet-stream c0405933cd57c9b53258fe1be86b3e4f Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 79 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/newsubdir', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/newsubdir', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/newsubdir', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/newsubdir', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MKCOL', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir", qop=, nc=00000001, cnonce="11f733ec", response="1cc8cb15ea2f58ee10625baee5e202b8"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/newsubdir', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir", qop=, nc=00000001, cnonce="11f733ec", response="1cc8cb15ea2f58ee10625baee5e202b8"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 80 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/newsubdir/ httpd/unix-directory d2ad792ed4ced17d12e267eb1feef75c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 81 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/newsubdir/ httpd/unix-directory d2ad792ed4ced17d12e267eb1feef75c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 82 => array ( 'request' => array ( 'body' => 'Some text content.', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '18', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/newsubdir/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/newsubdir/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/newsubdir/file.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/newsubdir/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '18', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/file.txt", qop=, nc=00000001, cnonce="11f733ec", response="2e9101566cf09f77928cb12d1128aafe"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/newsubdir/file.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/file.txt", qop=, nc=00000001, cnonce="11f733ec", response="2e9101566cf09f77928cb12d1128aafe"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => 'bde09112b72b6fed63ff4e3917ebd56a', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 83 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/newsubdir/ httpd/unix-directory d2ad792ed4ced17d12e267eb1feef75c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/newdir/newsubdir/file.txt application/octet-stream bde09112b72b6fed63ff4e3917ebd56a Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 84 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/newsubdir/ httpd/unix-directory d2ad792ed4ced17d12e267eb1feef75c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/newdir/newsubdir/file.txt application/octet-stream bde09112b72b6fed63ff4e3917ebd56a Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 85 => array ( 'request' => array ( 'body' => 'Some text content.', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '18', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/newsubdir/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/newsubdir/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/newsubdir/file.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/newsubdir/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '18', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/file.txt", qop=, nc=00000001, cnonce="11f733ec", response="2e9101566cf09f77928cb12d1128aafe"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/newsubdir/file.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/file.txt", qop=, nc=00000001, cnonce="11f733ec", response="2e9101566cf09f77928cb12d1128aafe"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => 'bde09112b72b6fed63ff4e3917ebd56a', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 86 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/newsubdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/newsubdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/newsubdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/newsubdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/newsubdir/", qop=, nc=00000001, cnonce="11f733ec", response="c910c1009bada75751fe047a36ae7313"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/newsubdir/ httpd/unix-directory d2ad792ed4ced17d12e267eb1feef75c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/newdir/newsubdir/file.txt application/octet-stream bde09112b72b6fed63ff4e3917ebd56a Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 87 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="11f733ec", response="f93002e02d8053e68426a557848c1cdb"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="11f733ec", response="f93002e02d8053e68426a557848c1cdb"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/newdir/ httpd/unix-directory e8fac981fae3020310afadcc6b78287c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/newdir/file.txt application/octet-stream c0405933cd57c9b53258fe1be86b3e4f Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/newdir/newsubdir httpd/unix-directory d2ad792ed4ced17d12e267eb1feef75c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 88 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.html text/html; charset="utf-8" 63e609ad6597ac5f4a6c399729a4abe0 Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.xml text/xml; charset="utf-8" b23a873ef8c0f8e3b33339bed653b763 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/newdir httpd/unix-directory e8fac981fae3020310afadcc6b78287c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 89 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.html text/html; charset="utf-8" 63e609ad6597ac5f4a6c399729a4abe0 Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.xml text/xml; charset="utf-8" b23a873ef8c0f8e3b33339bed653b763 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/newdir httpd/unix-directory e8fac981fae3020310afadcc6b78287c Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 90 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/newdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/newdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/newdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/newdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="11f733ec", response="d5c5695d5454bf94cd1c9d91271de873"', 'PHP_SELF' => '/index.php/secure_collection/subdir/newdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/newdir/", qop=, nc=00000001, cnonce="11f733ec", response="d5c5695d5454bf94cd1c9d91271de873"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 91 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.html text/html; charset="utf-8" 63e609ad6597ac5f4a6c399729a4abe0 Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.xml text/xml; charset="utf-8" b23a873ef8c0f8e3b33339bed653b763 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 92 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/file.html', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/file.html', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/file.html', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/file.html', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/file.html", qop=, nc=00000001, cnonce="11f733ec", response="df90ae6bdc1bf179f93525d800b9322a"', 'PHP_SELF' => '/index.php/secure_collection/subdir/file.html', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/file.html", qop=, nc=00000001, cnonce="11f733ec", response="df90ae6bdc1bf179f93525d800b9322a"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '

Test

', 'headers' => array ( 'ETag' => '63e609ad6597ac5f4a6c399729a4abe0', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'text/html; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 93 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/file.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/file.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/file.xml', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/file.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/file.xml", qop=, nc=00000001, cnonce="11f733ec", response="8900a196038466fc317aa96e45a85d69"', 'PHP_SELF' => '/index.php/secure_collection/subdir/file.xml', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/file.xml", qop=, nc=00000001, cnonce="11f733ec", response="8900a196038466fc317aa96e45a85d69"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' ', 'headers' => array ( 'ETag' => 'b23a873ef8c0f8e3b33339bed653b763', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'text/xml; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 94 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="11f733ec", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.html text/html; charset="utf-8" 63e609ad6597ac5f4a6c399729a4abe0 Mon, 15 Aug 2005 15:13:00 +0000 39 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/file.xml text/xml; charset="utf-8" b23a873ef8c0f8e3b33339bed653b763 Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 95 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/file.html', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/file.html', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/file.html', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/file.html', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/file.html", qop=, nc=00000001, cnonce="11f733ec", response="4dca82ba522980299229ceafbadcee95"', 'PHP_SELF' => '/index.php/secure_collection/subdir/file.html', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/file.html", qop=, nc=00000001, cnonce="11f733ec", response="4dca82ba522980299229ceafbadcee95"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 96 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/file.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/file.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/file.xml', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/file.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/file.xml", qop=, nc=00000001, cnonce="1415c574", response="6e0e34fdaccde52139f6e5b8b717aaca"', 'PHP_SELF' => '/index.php/secure_collection/subdir/file.xml', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/file.xml", qop=, nc=00000001, cnonce="1415c574", response="6e0e34fdaccde52139f6e5b8b717aaca"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 97 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="2750ac20", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="2750ac20", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 98 => array ( 'request' => array ( 'body' => 'eZ component: Webdav, Design, 1.0

eZ component: Webdav, Design, 1.0

Author:Kore Nordmann, Tobias Schlitt
Revision:$Rev$
Date:$Date$
Status:Draft

Scope

The scope of this document is to describe the initial design of a component that provides a WebDAV server, which works with all major other implementations of the WebDAV protocol.

It is currently not planned to also offer a WebDAV client component.

Design overview

Because of the variaty of buggy and incomplete implementations of WebDAV, this component will provide an abstraction to suite the different needs. Beside that, an abstract interface to the backend will be provided.

The main class of this component will provide a fully RFC 2518 compliant implementation of a WebDAV server. An instance of this class retrieves an instance of a handler class, which takes care for performing the requested operations on a backend (for example the filesystem).

Additionally, a collection of classes, which inherit the main class will be provided. Each of this classes will provide a compatibility layer on top of the RFC implementation, which works correctly with one or more "buggy" WebDAV clients. A factory pattern implementation will be provided, which takes automatically care of creating the correct server instance for a client.

Tiers

The component is basically devided into 3 tiers: The top tier, being represented by the main server class. An instance of this class is responsible to dispatch a received request to a correct transport handler, which is capable of parsing the request.

The transport handler level is the second tier. Classes in this tier are responsible to parse an incoming request and extract all relevant information to generate a response for it into a struct object. These struct object is then passed back to the server object.

Based on the request struct object, the server checks the capabilities of its third tier, the used backend handler. If the handler object provides all necessary capabilities to generate a response, it is called to do so. If the server class can perform emulation of not available capabilities and rely on different features of the backend. In case there is no way, the backend can handle the request, the server class will indicate that with an error response.

The way back flows through the 3 tiers back again: The backend handler generates a response object, which is passed back to the main server object, which makes the active transport handler encode the response and sends it back to the client.

Classes

ezcWebdavServer

The ezcWebdavServer class is the main class of the package. It has to be instantiated to create a server instance and provides a method to get the server up and running. An object of this class takes the main controll over serving the webdav service.

Among the configuration of the server instance there must be: A backend handler object, which will be used to serve the received WebDAV requests. A fitting configuration for the backend handler. A collection of transport handlers which can be used to parse incoming requests. General configuration on the bevahiour of the server instance (like locking and stuff).

The backend handler object must extend the base class ezcWebdavBackendHandler and must indicate to the main server, which capabilities it provides. The server class can potentially emulate certain capabilities, if the handler does not provide it. An example here is locking, which can be either performed by the handler itself or the main server class.

Such emulation functionality could possibly be extracted to a third category of classes, which is only loaded by the main server object on-demand.

All configured transport handlers must implement the interface ezcWebdavTransportHandler, which defines the necessary methods.

The standard webdav server contains a list of transport handlers associated with regular expressions which should match the client name to be used. As a fallback the standards compliant transport handler will be used.

Special implementation added by the user will be add on top of the list, to be used at highest priority.

ezcWebdavBackend

All backend handlers for the Webdav component must extends this abstract base class and implement its abstract methods for very basic WebDAV serving. The operations defined for every backend handler to be mandatory are:

  • head()
  • get()
  • propFind()
  • propFetch()

All other WebDAV operations are optional to be implemented by a backend handler and are defined by the handler itself. The additional basic capabilities of backend handlers are indicated by implementing interfaces for the support additional request methods, like put, change, etc.

Additional features, like encryption support will be indicated by returning a bitmask of supported features by the backend handler.

The logical groups of capabilities are:

Put
The put capability indicates, that a handler is capable of handling file uploads via HTTP-PUT method.
Change
This sub class of WebDAV operations defines delete, copy and move operations to be supported by the handler class.
Make collection
The creation of new collections also makes up a capability unit and can optionally be implemented.
Lock
If the hander provides locking facilities on its own, the main server object must not take care about that.
GZIP-Compress
Handlers implementing this facility can deal with GZIP and bzip2 based compression.

If a handler does not support a certain facility and the main server object is not capable of emulating it, the server will respond using a "501 Not Implemented" server error.

ezcWebdavTransport

A class implementing this interface is capable of parsing a raw HTTP request into a struct extending ezcWebdavRequest and generating the HTTP response out of the ezcWebdavResponse struct. One transport handler is usually built to handle the communication with a certain set of specific client implementations.

A transport handler class will be able to parse the incoming HTTP request data into a struct identifying a certain type of request and containg all necessary and unified data, so that a backend handler can repsond to it.

The backend handler will then create a corresponding response object, which will be encoded back into HTTP data by the transport handler and send to the client by the server.

Each request type will come with its own struct classes to represent request and response data for the request. Beside the structured HTTP data, the structs can contain any additional information that must be transferred between server, transport handler and backend handler.

All struct classes representing either a request of response of the server will extend the abstract base classes ezcWebdavRequest and ezcWebdavResponse.

An example of this structure is: ezcWebdavGetRequest and ezcWebdavGetResponse

These 2 classes will be used to serve GET requests. Beside the usual request information - like URI, date and headers - the request object will contain information about partial GET mechanisms to use and what else is important. The backend handler will return an instance of ezcWebdavGetResponse if the request was handled correctly, or a corresponding ezcWebdavErrorResponse object, if the request failed.

The main server instance will know about available clients and will have a regular expression for each of them, to identify the clients it communicates to by matching the regualr expression against the client name provided in the HTTP headers.

ezcWebdavPathFactory

This class is meant to calculate the path of the requested item from the backend based on the given path by the webdav client. The resulting path string is absolute to the root of the backend repository.

This class is necessary to calculate the correct path when a server uses rewrite rules for mapping directories to one or more webdav implementations. The basic class uses pathinfo to parse the requested file / collection.

Request: /path/to/webdav.php/path/to/file Result: /path/to/file

You may want to provide custome implementations for different mappings so that rewrite could be used by the webserver to access files.

Request: /images/path/to/file Rewritten: /path/to/dav_images.php/path/to/file Result: /path/to/file

The factory class is necessary, because the paths contained in the request body will match the same scheme like the original request path, but not be rewritten by the webserver, so that the user may extend the path factory to fit his own purposes.

Example code

The following snippet shows the API calls necessary to get a WebDAV server up and running.

    <?php

    $server = new ezcWebdavServer();

    // Server data using file backend with data in "path/"
    $server->backend = new ezcWebdavBackendFile( \'/path\' );

// Optionally register aditional transport handlers
    //
    // This step is only required, when a user wants to provide own
    // implementations for special clients.
    $server->registerTransportHandler(
            // Regular expression to match client name
            \'(Microsoft.*Webdav\\s+XP)i\',
            // Class name of transport handler, extending ezcWebdavTransportHandler
            \'ezcWebdavMicrosoftTransport\'
    );
    $server->registerTransportHandler(
            // Regular expression to match client name
            \'(.*Firefox.*)i\',
            // Class name of transport handler, extending ezcWebdavTransportHandler
            \'ezcWebdavMozillaTransport\'
    );

    // Serve requests
    $server->handle();
', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '18675', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test.html', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test.html', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test.html', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test.html', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '18675', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test.html", qop=, nc=00000001, cnonce="2750ac20", response="a3674ca43d5efaec7cd0dc5aa9574333"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test.html', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test.html", qop=, nc=00000001, cnonce="2750ac20", response="a3674ca43d5efaec7cd0dc5aa9574333"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '866d436fdb9577521a1d1acd440e1026', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 99 => array ( 'request' => array ( 'body' => 'This is an UTF-8 test file ========================== This file contains a variaty of Unicode characters to test with the eZ Webdav component. Greek letters ------------- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ ϕ χ ψ ω Mathematical characters ----------------------- ℂ ℕ ℚ ℝ ℤ ∀ ∁ ∂ ∃ ∄ ∅ ∈ ∉ ∋ ∌ ∎ ∎ ∏ ∐ ∑ + − ∓ ∕ ∖ ∗ ∘ √ ∛ ∜ ∝ ∞ ∣ ∤ ∧ ∨ ∩ ∪ ∫ ∬ ∭ = ≔ ≕ ≙ ≝ ≠ ≡ ≢ < > ≤ ≥ ≪ ≫ ≮ ≯ ≰ ≱ ≺ ≻ ≼ ≽ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊕ ⊖ ⊗ ⊙ ⊚ ⊛ ⊜ ⊝ ⊢ ⊣ ⊤ ⊥ ⊧ ⊬ ⊶ ⊷ ⊻ ⊼ ⊽ ‰ ‱ ', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '740', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_utf8_content.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_utf8_content.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_utf8_content.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_utf8_content.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '740', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_utf8_content.txt", qop=, nc=00000001, cnonce="2750ac20", response="3f32e58001f4bd1836e706eef1d0f451"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_utf8_content.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_utf8_content.txt", qop=, nc=00000001, cnonce="2750ac20", response="3f32e58001f4bd1836e706eef1d0f451"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '94ad488564aca44123a62c6f22c090dd', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 100 => array ( 'request' => array ( 'body' => 'This is an UTF-8 test file ========================== This file contains a variaty of Unicode characters to test with the eZ Webdav component. Greek letters ------------- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ ϕ χ ψ ω Mathematical characters ----------------------- ℂ ℕ ℚ ℝ ℤ ∀ ∁ ∂ ∃ ∄ ∅ ∈ ∉ ∋ ∌ ∎ ∎ ∏ ∐ ∑ + − ∓ ∕ ∖ ∗ ∘ √ ∛ ∜ ∝ ∞ ∣ ∤ ∧ ∨ ∩ ∪ ∫ ∬ ∭ = ≔ ≕ ≙ ≝ ≠ ≡ ≢ < > ≤ ≥ ≪ ≫ ≮ ≯ ≰ ≱ ≺ ≻ ≼ ≽ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊕ ⊖ ⊗ ⊙ ⊚ ⊛ ⊜ ⊝ ⊢ ⊣ ⊤ ⊥ ⊧ ⊬ ⊶ ⊷ ⊻ ⊼ ⊽ ‰ ‱ ', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '740', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_öüäß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_öüäß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_öüäß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '740', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt", qop=, nc=00000001, cnonce="2750ac20", response="a942f30ff627655e127ce316e39b0c07"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_öüäß.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt", qop=, nc=00000001, cnonce="2750ac20", response="a942f30ff627655e127ce316e39b0c07"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '29909daed84fd350d162e0d7b9b76483', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 101 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="2750ac20", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="2750ac20", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test.html application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_utf8_content.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 102 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="09920fb9", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="09920fb9", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test.html application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_utf8_content.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 103 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="09920fb9", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="09920fb9", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test.html application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_utf8_content.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 104 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test.html', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test.html', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test.html', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test.html', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MOVE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/secure_collection/subdir/put_test_renamed.xml', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test.html", qop=, nc=00000001, cnonce="09920fb9", response="ab8477c93e27e490dbf476c54d4db979"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test.html', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test.html", qop=, nc=00000001, cnonce="09920fb9", response="ab8477c93e27e490dbf476c54d4db979"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 105 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="17599f0b", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="17599f0b", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_utf8_content.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 106 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="17599f0b", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="17599f0b", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_utf8_content.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 107 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_öüäß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_öüäß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_öüäß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MOVE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/secure_collection/subdir/put_test_non_utf8.txt', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt", qop=, nc=00000001, cnonce="17599f0b", response="8f434c02d66a73f2b85aaba82907d29e"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_öüäß.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_%C3%B6%C3%BC%C3%A4%C3%9F.txt", qop=, nc=00000001, cnonce="17599f0b", response="8f434c02d66a73f2b85aaba82907d29e"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 108 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="004aa0e3", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="004aa0e3", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_utf8_content.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 109 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="004aa0e3", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="004aa0e3", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_utf8_content.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 110 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_utf8_content.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_utf8_content.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_utf8_content.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_utf8_content.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MOVE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_utf8_content.txt", qop=, nc=00000001, cnonce="004aa0e3", response="fae75122579098a954ec54f238d6a863"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_utf8_content.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_utf8_content.txt", qop=, nc=00000001, cnonce="004aa0e3", response="fae75122579098a954ec54f238d6a863"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 111 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="004aa0e3", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="004aa0e3", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 112 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/collection', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/collection', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/collection', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/collection', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MKCOL', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection", qop=, nc=00000001, cnonce="004aa0e3", response="f5637ab997e61c14ef28728a6abe1b54"', 'PHP_SELF' => '/index.php/secure_collection/subdir/collection', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection", qop=, nc=00000001, cnonce="004aa0e3", response="f5637ab997e61c14ef28728a6abe1b54"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 113 => array ( 'request' => array ( 'body' => 'eZ component: Webdav, Design, 1.0Kore Nordmann, Tobias Schlitt$Rev$$Date$DraftContentsScopeDesign overviewTiersClassesezcWebdavServerezcWebdavBackendezcWebdavTransportezcWebdavPathFactoryExample code
ScopeThe scope of this document is to describe the initial design of a component that provides a WebDAV server, which works with all major other implementations of the WebDAV protocol.It is currently not planned to also offer a WebDAV client component.
Design overviewBecause of the variaty of buggy and incomplete implementations of WebDAV, this component will provide an abstraction to suite the different needs. Beside that, an abstract interface to the backend will be provided.The main class of this component will provide a fully RFC 2518 compliant implementation of a WebDAV server. An instance of this class retrieves an instance of a handler class, which takes care for performing the requested operations on a backend (for example the filesystem).Additionally, a collection of classes, which inherit the main class will be provided. Each of this classes will provide a compatibility layer on top of the RFC implementation, which works correctly with one or more "buggy" WebDAV clients. A factory pattern implementation will be provided, which takes automatically care of creating the correct server instance for a client.
TiersThe component is basically devided into 3 tiers: The top tier, being represented by the main server class. An instance of this class is responsible to dispatch a received request to a correct transport handler, which is capable of parsing the request.The transport handler level is the second tier. Classes in this tier are responsible to parse an incoming request and extract all relevant information to generate a response for it into a struct object. These struct object is then passed back to the server object.Based on the request struct object, the server checks the capabilities of its third tier, the used backend handler. If the handler object provides all necessary capabilities to generate a response, it is called to do so. If the server class can perform emulation of not available capabilities and rely on different features of the backend. In case there is no way, the backend can handle the request, the server class will indicate that with an error response.The way back flows through the 3 tiers back again: The backend handler generates a response object, which is passed back to the main server object, which makes the active transport handler encode the response and sends it back to the client.
Classes
ezcWebdavServerThe ezcWebdavServer class is the main class of the package. It has to be instantiated to create a server instance and provides a method to get the server up and running. An object of this class takes the main controll over serving the webdav service.Among the configuration of the server instance there must be: A backend handler object, which will be used to serve the received WebDAV requests. A fitting configuration for the backend handler. A collection of transport handlers which can be used to parse incoming requests. General configuration on the bevahiour of the server instance (like locking and stuff).The backend handler object must extend the base class ezcWebdavBackendHandler and must indicate to the main server, which capabilities it provides. The server class can potentially emulate certain capabilities, if the handler does not provide it. An example here is locking, which can be either performed by the handler itself or the main server class.Such emulation functionality could possibly be extracted to a third category of classes, which is only loaded by the main server object on-demand.All configured transport handlers must implement the interface ezcWebdavTransportHandler, which defines the necessary methods.The standard webdav server contains a list of transport handlers associated with regular expressions which should match the client name to be used. As a fallback the standards compliant transport handler will be used.Special implementation added by the user will be add on top of the list, to be used at highest priority.
ezcWebdavBackendAll backend handlers for the Webdav component must extends this abstract base class and implement its abstract methods for very basic WebDAV serving. The operations defined for every backend handler to be mandatory are:head()get()propFind()propFetch()All other WebDAV operations are optional to be implemented by a backend handler and are defined by the handler itself. The additional basic capabilities of backend handlers are indicated by implementing interfaces for the support additional request methods, like put, change, etc.Additional features, like encryption support will be indicated by returning a bitmask of supported features by the backend handler.The logical groups of capabilities are:PutThe put capability indicates, that a handler is capable of handling file uploads via HTTP-PUT method.ChangeThis sub class of WebDAV operations defines delete, copy and move operations to be supported by the handler class.Make collectionThe creation of new collections also makes up a capability unit and can optionally be implemented.LockIf the hander provides locking facilities on its own, the main server object must not take care about that.GZIP-CompressHandlers implementing this facility can deal with GZIP and bzip2 based compression.If a handler does not support a certain facility and the main server object is not capable of emulating it, the server will respond using a "501 Not Implemented" server error.
ezcWebdavTransportA class implementing this interface is capable of parsing a raw HTTP request into a struct extending ezcWebdavRequest and generating the HTTP response out of the ezcWebdavResponse struct. One transport handler is usually built to handle the communication with a certain set of specific client implementations.A transport handler class will be able to parse the incoming HTTP request data into a struct identifying a certain type of request and containg all necessary and unified data, so that a backend handler can repsond to it.The backend handler will then create a corresponding response object, which will be encoded back into HTTP data by the transport handler and send to the client by the server.Each request type will come with its own struct classes to represent request and response data for the request. Beside the structured HTTP data, the structs can contain any additional information that must be transferred between server, transport handler and backend handler.All struct classes representing either a request of response of the server will extend the abstract base classes ezcWebdavRequest and ezcWebdavResponse.An example of this structure is: ezcWebdavGetRequest and ezcWebdavGetResponseThese 2 classes will be used to serve GET requests. Beside the usual request information - like URI, date and headers - the request object will contain information about partial GET mechanisms to use and what else is important. The backend handler will return an instance of ezcWebdavGetResponse if the request was handled correctly, or a corresponding ezcWebdavErrorResponse object, if the request failed.The main server instance will know about available clients and will have a regular expression for each of them, to identify the clients it communicates to by matching the regualr expression against the client name provided in the HTTP headers.
ezcWebdavPathFactoryThis class is meant to calculate the path of the requested item from the backend based on the given path by the webdav client. The resulting path string is absolute to the root of the backend repository.This class is necessary to calculate the correct path when a server uses rewrite rules for mapping directories to one or more webdav implementations. The basic class uses pathinfo to parse the requested file / collection.Request: /path/to/webdav.php/path/to/file Result: /path/to/fileYou may want to provide custome implementations for different mappings so that rewrite could be used by the webserver to access files.Request: /images/path/to/file Rewritten: /path/to/dav_images.php/path/to/file Result: /path/to/fileThe factory class is necessary, because the paths contained in the request body will match the same scheme like the original request path, but not be rewritten by the webserver, so that the user may extend the path factory to fit his own purposes.
Example codeThe following snippet shows the API calls necessary to get a WebDAV server up and running. <?php $server = new ezcWebdavServer(); // Server data using file backend with data in "path/" $server->backend = new ezcWebdavBackendFile( \'/path\' ); // Optionally register aditional transport handlers // // This step is only required, when a user wants to provide own // implementations for special clients. $server->registerTransportHandler( // Regular expression to match client name \'(Microsoft.*Webdav\\s+XP)i\', // Class name of transport handler, extending ezcWebdavTransportHandler \'ezcWebdavMicrosoftTransport\' ); $server->registerTransportHandler( // Regular expression to match client name \'(.*Firefox.*)i\', // Class name of transport handler, extending ezcWebdavTransportHandler \'ezcWebdavMozillaTransport\' ); // Serve requests $server->handle();Local Variables: mode: rst fill-column: 79 End: vim: et syn=rst tw=79
', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '14011', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/collection/put_test.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/collection/put_test.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/collection/put_test.xml', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/collection/put_test.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '14011', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/put_test.xml", qop=, nc=00000001, cnonce="004aa0e3", response="b1d7bb8471421e1afdfd0583fa5e01ab"', 'PHP_SELF' => '/index.php/secure_collection/subdir/collection/put_test.xml', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/put_test.xml", qop=, nc=00000001, cnonce="004aa0e3", response="b1d7bb8471421e1afdfd0583fa5e01ab"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => '5ad59a93c1eb407447585fc830b848a7', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 114 => array ( 'request' => array ( 'body' => 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'M7%' . "\0" . '' . "\0" . '6' . "\0" . '' . "\0" . ' ' . "\0" . '' . "\0" . 'put_test.xmlUT ' . "\0" . 'GGUx' . "\0" . 'd' . "\0" . '[is6_tIm$qf\'ut P' . "\0" . '~ ARrnv!(' . "\0" . 'ߖUզ=^~<JMŬuO?> -UϾ{\\Z;]إ5m4[[./ťU|*tzjᅴιl:y' . "\0" . '`WfbI29T>^~* Xq3{1S-RS֦\'dv)dhѭ;{#x|^N?Gg޺p@+:N9-]/Dtl4뿚FLf?B;wu^W :ZldGo竎3NEZHkQmmgWk H?ڴE/n}*l䶑U<̦VO% h*:)<(x_1.Zgk\'O:NCt}RM8[?\'}֑QJԥDާpRFUYD?yt?ulmQ\'/kvLi+x/{ʲ.p G8!Rcj t<(0&5Nx]]S|v@荂AJ;- p!GJD F1)!j7VKȧ+7V;Lj' . "\0" . 'NB*)ݪSoz«XۯHi' . "\0" . '8ʀ aAײ K ]ciK e|t:A x, @aN#+@;ȳC&CVT@7 A' . "\0" . 'Jh}x&CCGbqj' . "\0" . 'R#Bepjj-߭q_QPG S' . "\0" . '. ҪI l@nJXP_g <{zCK\\Y:stTG=Xd#g' . "\0" . '' . "\0" . 'ml(1@Ԋ+ʈ<HX!WW1ʴiLS@}#/טv#b g@gT- \'܊k~=4 *D' . "\0" . 'OE#SІ{ F=AYZ鶏hUHI " H1 #B hPQT*39,ڪty \\gcfTƒJw:+8kIg~Z.V޶MQtp-FA%0Bp y<;O[ՅvX $C4pð8en8tĵk1}gM$\'T7J&S)\\LgH}nw[GzF' . "\0" . 'u1(3AyLM#=0Gnc2UՎ;Tֽz\\JӠ*tȓȅiauB?@OXy[\\cI5˓q\'f`\'zZ/BtWL -zODSf{m|Lr+ ' . "\0" . 'җ S\'G#$L"A"v8:,z&}S`g;2FIn(/0SDGI2IoUCQ#ȸ? ~dAPxvbhRd;Ix#rl4>?~]>ˆbbka+E#!%Q(mu4v30RYUBm?Kcul ܶe|huCxxX6sXE=Ŋy%_ťL/ /fDے=:*,A>x29lZxL{~nx.vi/0wass %{147{]EK|3U; t]4 h !eNPU]X7TpU ! ojc6ܸ rGIR`s_qA{KB7$1Gnkѭ7d' . "\0" . 'X0L2Fhvc]"Q^K=\'RtbwぐcPjJYkqiEkw\\ c@)EIql*NLCWάeGԀ&R14-}' . "\0" . '`O `k̆jS*R W㗀En]ʭcYd^VP/ 5038|I߬ 1eC~Т=qEx)`l:u@vAZji:b!{qW6{ccv f;XoK;Ƴ/ǯ!.V{;W+za' . "\0" . 'x5;zUu/ `A-3[K\'5:ˇk$o/h2~+^Z MMu*;` ;YrJZ|u_m#6%P< ~ `~|, wz̩CpPDbڍ)q ? MD ̎ozZ\'8C,Jm~XG7z \\ kLw:&h壩X~lˏ:0$ʩ0 rx[E @hHgp7|P{' . "\0" . 'Bg' . "\0" . '-' . "\0" . 'ʊɋ*;Knu ϡhD_|`dxPK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'ډM7mh ' . "\0" . '' . "\0" . 'sI' . "\0" . '' . "\0" . ' ' . "\0" . '' . "\0" . 'put_test.htmlUT ' . "\0" . 'GGUx' . "\0" . 'd' . "\0" . '\\6οx;vlvpٝj 0& ' . "\0" . '[VR' . "\0" . ' RTɮ? <<@~"תڔO\'Pej2]nN=//\'?_[^wlŋ^}' . "\0" . ' ⪖(|xDLUbw,,#S?\\4sl+ӂei9}1Ϟe.qUND i(?rR O\'MTfWJMDߞNzHB[Y[zQ,RdJUKgh 6NV,84u-.W_@L tjxޔS 1_VSg,aޕYiitkIo ~GYϕp /ZfUⅼ֙Ƙld)p\'m,pWY;lvH..Oo#BJ;h@|n}7[jMحRNlA +JQ2UХp[%fTd\' MD*m*`" EnW5NZo:T bkvΐy:{L6֙Bh<̓`UaXAb]B8BBn#Lxa<"z"\\6p+~M\'$' . "\0" . '0@2#6\'fPHHt*s@1.t[40I\'h?IGkL[e44g`)8`l+eNbmq!&V' . "\0" . 'i{bki>rv>K966$0eɂr%v Cb' . "\0" . ' T3~G *p"7BF(NclW>ǡ Ɍi rē?r#aN(.: wռnV5ʯ7@/@io*f$EVc0l{:ďсv? P | xy2/sRĐLlÇ ɃnxGc:GF]kgh_b3)dױ/_G`El1 +LJA^=Lvͫ<Hf7Uul0 Pe~Q̔Zct܃?TV8' . "\0" . 'cε ک^ ;hy]`xFZF=' . "\0" . ' %hgSt!CH' . "\0" . 'Rk()$?JJ?J*?7cdu} rvTv#0tntiX| rt$ѐQ X%&!U7J дm-¯!<ѽ5I@.S[HUͰ;ytHoYS8b[A8rwSߣ' . "\0" . 'å1rj 0ϰeu,%|}$nEw=_fm#d}hlCNg\'P? 33\']oO͍vUTDkE_MD ^"|0-ꑗUqM' . "\0" . ' ) XK~p[]Ma%UjۦbmS?ɦlp%E[|ā)y6NZͳ0Dihhޟ\\^S' . "\0" . 'd/Z%e{ D;ѿoiYm#|2 vFQ>b\'2E WaXn3>[Qk5Y>n{' . "\0" . '[%8p پ:Z::4h\'75k%)c%}Q#2DMIMVSt:C}(<3Gk!htk1,qx79Ũn T]' . "\0" . 'ZhҔل8RQ9Uwt]#s 3(VWʹ1j*%%m\'5Jݶj팵v' . "\0" . 'cpwxɼNRlרYkul6{>JN4ЁqouJ;ƼG0wli-5iʉRW Oi\'*,:@.e_+O-.7V8MYkx3GB9r`HH^I~R5l4t{=lΐ"ZSj' . "\0" . ' R(̼at)^ G& #X3# T",u`=$XPc%jϼ<{2:@HM g@S(t ZI)*zPm%@)6Ԫ>X&V"fۛA?@~PZ oKC@ޤJ_,9{+6 nӚ\'zK4Jv,=\\: 5)bU>g_^O\'|;daPb,X3\\BtI6v)' . "\0" . ' bVaQ90oL*:#@gy|%q)caiNVXL$ptaߵ9tyk1M`Q {.^q w)I\'%؁Ӕd&' . "\0" . 'FAa΄2aP' . "\0" . 'UۘI:9^OK@S]\\7!}²%^f"p' . "\0" . 'J#vr?EN#a Ģ X]ҁ)e`gk*6fKԽwk>8zIml&Zp #cH!L(@̢qįBҶګPtCgP!,t=xIVXNn)YBg Q@C/1TFT>mMnDDT7M5("xOjJWC*BI3 PB!~tY´a' . "\0" . 'KGԲNY4' . "\0" . 's+d`h} @GuP+`h@(e<' . "\0" . 'g+,s xEpFr|(F6M\\SOe*9k{=l" _^?a [/p\\u w#A=X]Рh8*Q`kGҏILLjG^H{Ra$Rk0{ r~' . "\0" . '.H249xiY2|Q,8@7u2Llx2e' . "\0" . ';; 5kߗUdr+D ].Xc{v6Ih(H  r ^0)A^B1V6NZ!%qv &k8+IG^ 4XA"H_x廝 o~1pl1ϫjm*~8=!9klhb-򴨘prtiAlzvI{ЎE+6cf4YO":j卍x<4{aBX U_RS%[t6LRXg{*/nOq\\`ˮ)5X9Nwt+Ge/&!yv%aٕ#!9!Fu4Ϳ^=xm𹞋nz>d B#ͯ~jFMg(ÚUt $4]Nq$МE"~L>ʅcON%:]K l 7GBD ݁κ|ߋC\' x# ' . "\0" . '{J9qhÛ[BKq&L.~,NJ}න ;QslMN,v=ZC ]ld^[^+V_YŒ@|Ƞe8{!b yZmfKqv?f藵,5) V&7e; v=SCjk$A*܏ 5  |(аg$pMGmeFkcav8U_^tkܪ;"&C:˧HJvW荥 v˪MŦd\\VrLnLʅlGc>^Uġӊ{MFQFV OZ0߼N P"47ine?,;>xC$HqvP_j[a6kCP%`n5Oz*|˷,NZO*ǦzR{/k_%d#î4;/\'o,@V\\GG5kTwS bGgУOn*px2GwenõBQqH-/  fuU|(nwZ|,l$@r3Mt=780AH3V"+uc >hv5w[d^*d.8\\)>Ck%pZƩC\'b,"1Mz@\\ !HêW۪}D0?M; Cߒ~x}%eyؐub&c' . "\0" . 'N^Ęa039p7HbѲ lxOMp@o BR]"DHq`90,p]R^u]CE9l ƶAUSè0_=>y\\\\͎ǀRWvJ<{hFkhPz\'s^e6i.IO)U#.xb!\\0v7@ E@/5t.´5P+>#L ]\'"f]kxjh' . "\0" . 'nto' . "\0" . '[Ēo' . "\0" . 'hpo`a.Ps޴~XvYmg!}:8>柎UCZ&{?Ak~ /' . "\0" . 'P=j0 r5^wd6lt o=L rFS@|5/Ŋ,3؝' . "\0" . '\'ySDJm-tu1 @}z@;.' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'M7%' . "\0" . '' . "\0" . '6' . "\0" . '' . "\0" . ' ' . "\0" . ' ' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'put_test.xmlUT' . "\0" . 'GUx' . "\0" . '' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'ډM7mh ' . "\0" . '' . "\0" . 'sI' . "\0" . '' . "\0" . ' ' . "\0" . ' ' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'put_test.htmlUT' . "\0" . 'GUx' . "\0" . '' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '(' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . ' ', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '10645', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/collection/put_test.zip', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/collection/put_test.zip', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/collection/put_test.zip', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/collection/put_test.zip', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PUT', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_CONTENT_LENGTH' => '10645', 'CONTENT_TYPE' => 'application/octet-stream', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/put_test.zip", qop=, nc=00000001, cnonce="004aa0e3", response="49290e77b8af16426c633b560a445dda"', 'PHP_SELF' => '/index.php/secure_collection/subdir/collection/put_test.zip', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/put_test.zip", qop=, nc=00000001, cnonce="004aa0e3", response="49290e77b8af16426c633b560a445dda"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'ETag' => 'ef383241769f0df9a982a37b53504cf2', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 115 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/collection/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/", qop=, nc=00000001, cnonce="004aa0e3", response="5b959bfb6f9b9ac149748dbe55572010"', 'PHP_SELF' => '/index.php/secure_collection/subdir/collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/", qop=, nc=00000001, cnonce="004aa0e3", response="5b959bfb6f9b9ac149748dbe55572010"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/collection/ httpd/unix-directory 082f894be3770c1d4a37d15032a3b493 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/collection/put_test.xml application/octet-stream 5ad59a93c1eb407447585fc830b848a7 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/collection/put_test.zip application/octet-stream ef383241769f0df9a982a37b53504cf2 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 116 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="004aa0e3", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="004aa0e3", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/collection httpd/unix-directory 082f894be3770c1d4a37d15032a3b493 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 117 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_non_utf8.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_non_utf8.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_non_utf8.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_non_utf8.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_non_utf8.txt", qop=, nc=00000001, cnonce="004aa0e3", response="a666ca3b0b407358c3aaa58c10045b1c"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_non_utf8.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_non_utf8.txt", qop=, nc=00000001, cnonce="004aa0e3", response="a666ca3b0b407358c3aaa58c10045b1c"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'This is an UTF-8 test file ========================== This file contains a variaty of Unicode characters to test with the eZ Webdav component. Greek letters ------------- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ ϕ χ ψ ω Mathematical characters ----------------------- ℂ ℕ ℚ ℝ ℤ ∀ ∁ ∂ ∃ ∄ ∅ ∈ ∉ ∋ ∌ ∎ ∎ ∏ ∐ ∑ + − ∓ ∕ ∖ ∗ ∘ √ ∛ ∜ ∝ ∞ ∣ ∤ ∧ ∨ ∩ ∪ ∫ ∬ ∭ = ≔ ≕ ≙ ≝ ≠ ≡ ≢ < > ≤ ≥ ≪ ≫ ≮ ≯ ≰ ≱ ≺ ≻ ≼ ≽ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊕ ⊖ ⊗ ⊙ ⊚ ⊛ ⊜ ⊝ ⊢ ⊣ ⊤ ⊥ ⊧ ⊬ ⊶ ⊷ ⊻ ⊼ ⊽ ‰ ‱ ', 'headers' => array ( 'ETag' => 'cf5657d4ea808c2f8b300e5b148df562', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 118 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/collection/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/", qop=, nc=00000001, cnonce="004aa0e3", response="5b959bfb6f9b9ac149748dbe55572010"', 'PHP_SELF' => '/index.php/secure_collection/subdir/collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/", qop=, nc=00000001, cnonce="004aa0e3", response="5b959bfb6f9b9ac149748dbe55572010"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/collection/ httpd/unix-directory 082f894be3770c1d4a37d15032a3b493 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/collection/put_test.xml application/octet-stream 5ad59a93c1eb407447585fc830b848a7 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/collection/put_test.zip application/octet-stream ef383241769f0df9a982a37b53504cf2 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 119 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_renamed.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_renamed.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_renamed.xml', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_renamed.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_renamed.xml", qop=, nc=00000001, cnonce="004aa0e3", response="740c415b143cf8bf6bef040871e9afb9"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_renamed.xml', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_renamed.xml", qop=, nc=00000001, cnonce="004aa0e3", response="740c415b143cf8bf6bef040871e9afb9"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'eZ component: Webdav, Design, 1.0

eZ component: Webdav, Design, 1.0

Author:Kore Nordmann, Tobias Schlitt
Revision:$Rev$
Date:$Date$
Status:Draft

Scope

The scope of this document is to describe the initial design of a component that provides a WebDAV server, which works with all major other implementations of the WebDAV protocol.

It is currently not planned to also offer a WebDAV client component.

Design overview

Because of the variaty of buggy and incomplete implementations of WebDAV, this component will provide an abstraction to suite the different needs. Beside that, an abstract interface to the backend will be provided.

The main class of this component will provide a fully RFC 2518 compliant implementation of a WebDAV server. An instance of this class retrieves an instance of a handler class, which takes care for performing the requested operations on a backend (for example the filesystem).

Additionally, a collection of classes, which inherit the main class will be provided. Each of this classes will provide a compatibility layer on top of the RFC implementation, which works correctly with one or more "buggy" WebDAV clients. A factory pattern implementation will be provided, which takes automatically care of creating the correct server instance for a client.

Tiers

The component is basically devided into 3 tiers: The top tier, being represented by the main server class. An instance of this class is responsible to dispatch a received request to a correct transport handler, which is capable of parsing the request.

The transport handler level is the second tier. Classes in this tier are responsible to parse an incoming request and extract all relevant information to generate a response for it into a struct object. These struct object is then passed back to the server object.

Based on the request struct object, the server checks the capabilities of its third tier, the used backend handler. If the handler object provides all necessary capabilities to generate a response, it is called to do so. If the server class can perform emulation of not available capabilities and rely on different features of the backend. In case there is no way, the backend can handle the request, the server class will indicate that with an error response.

The way back flows through the 3 tiers back again: The backend handler generates a response object, which is passed back to the main server object, which makes the active transport handler encode the response and sends it back to the client.

Classes

ezcWebdavServer

The ezcWebdavServer class is the main class of the package. It has to be instantiated to create a server instance and provides a method to get the server up and running. An object of this class takes the main controll over serving the webdav service.

Among the configuration of the server instance there must be: A backend handler object, which will be used to serve the received WebDAV requests. A fitting configuration for the backend handler. A collection of transport handlers which can be used to parse incoming requests. General configuration on the bevahiour of the server instance (like locking and stuff).

The backend handler object must extend the base class ezcWebdavBackendHandler and must indicate to the main server, which capabilities it provides. The server class can potentially emulate certain capabilities, if the handler does not provide it. An example here is locking, which can be either performed by the handler itself or the main server class.

Such emulation functionality could possibly be extracted to a third category of classes, which is only loaded by the main server object on-demand.

All configured transport handlers must implement the interface ezcWebdavTransportHandler, which defines the necessary methods.

The standard webdav server contains a list of transport handlers associated with regular expressions which should match the client name to be used. As a fallback the standards compliant transport handler will be used.

Special implementation added by the user will be add on top of the list, to be used at highest priority.

ezcWebdavBackend

All backend handlers for the Webdav component must extends this abstract base class and implement its abstract methods for very basic WebDAV serving. The operations defined for every backend handler to be mandatory are:

  • head()
  • get()
  • propFind()
  • propFetch()

All other WebDAV operations are optional to be implemented by a backend handler and are defined by the handler itself. The additional basic capabilities of backend handlers are indicated by implementing interfaces for the support additional request methods, like put, change, etc.

Additional features, like encryption support will be indicated by returning a bitmask of supported features by the backend handler.

The logical groups of capabilities are:

Put
The put capability indicates, that a handler is capable of handling file uploads via HTTP-PUT method.
Change
This sub class of WebDAV operations defines delete, copy and move operations to be supported by the handler class.
Make collection
The creation of new collections also makes up a capability unit and can optionally be implemented.
Lock
If the hander provides locking facilities on its own, the main server object must not take care about that.
GZIP-Compress
Handlers implementing this facility can deal with GZIP and bzip2 based compression.

If a handler does not support a certain facility and the main server object is not capable of emulating it, the server will respond using a "501 Not Implemented" server error.

ezcWebdavTransport

A class implementing this interface is capable of parsing a raw HTTP request into a struct extending ezcWebdavRequest and generating the HTTP response out of the ezcWebdavResponse struct. One transport handler is usually built to handle the communication with a certain set of specific client implementations.

A transport handler class will be able to parse the incoming HTTP request data into a struct identifying a certain type of request and containg all necessary and unified data, so that a backend handler can repsond to it.

The backend handler will then create a corresponding response object, which will be encoded back into HTTP data by the transport handler and send to the client by the server.

Each request type will come with its own struct classes to represent request and response data for the request. Beside the structured HTTP data, the structs can contain any additional information that must be transferred between server, transport handler and backend handler.

All struct classes representing either a request of response of the server will extend the abstract base classes ezcWebdavRequest and ezcWebdavResponse.

An example of this structure is: ezcWebdavGetRequest and ezcWebdavGetResponse

These 2 classes will be used to serve GET requests. Beside the usual request information - like URI, date and headers - the request object will contain information about partial GET mechanisms to use and what else is important. The backend handler will return an instance of ezcWebdavGetResponse if the request was handled correctly, or a corresponding ezcWebdavErrorResponse object, if the request failed.

The main server instance will know about available clients and will have a regular expression for each of them, to identify the clients it communicates to by matching the regualr expression against the client name provided in the HTTP headers.

ezcWebdavPathFactory

This class is meant to calculate the path of the requested item from the backend based on the given path by the webdav client. The resulting path string is absolute to the root of the backend repository.

This class is necessary to calculate the correct path when a server uses rewrite rules for mapping directories to one or more webdav implementations. The basic class uses pathinfo to parse the requested file / collection.

Request: /path/to/webdav.php/path/to/file Result: /path/to/file

You may want to provide custome implementations for different mappings so that rewrite could be used by the webserver to access files.

Request: /images/path/to/file Rewritten: /path/to/dav_images.php/path/to/file Result: /path/to/file

The factory class is necessary, because the paths contained in the request body will match the same scheme like the original request path, but not be rewritten by the webserver, so that the user may extend the path factory to fit his own purposes.

Example code

The following snippet shows the API calls necessary to get a WebDAV server up and running.

    <?php

    $server = new ezcWebdavServer();

    // Server data using file backend with data in "path/"
    $server->backend = new ezcWebdavBackendFile( \'/path\' );

// Optionally register aditional transport handlers
    //
    // This step is only required, when a user wants to provide own
    // implementations for special clients.
    $server->registerTransportHandler(
            // Regular expression to match client name
            \'(Microsoft.*Webdav\\s+XP)i\',
            // Class name of transport handler, extending ezcWebdavTransportHandler
            \'ezcWebdavMicrosoftTransport\'
    );
    $server->registerTransportHandler(
            // Regular expression to match client name
            \'(.*Firefox.*)i\',
            // Class name of transport handler, extending ezcWebdavTransportHandler
            \'ezcWebdavMozillaTransport\'
    );

    // Serve requests
    $server->handle();
', 'headers' => array ( 'ETag' => '502bbb712c359f4a1c4699d4b5c9ff27', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 120 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_öäüß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_öäüß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_öäüß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt", qop=, nc=00000001, cnonce="004aa0e3", response="97c5298aa7988aea80f92643a2ec8b5a"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_öäüß.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt", qop=, nc=00000001, cnonce="004aa0e3", response="97c5298aa7988aea80f92643a2ec8b5a"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'This is an UTF-8 test file ========================== This file contains a variaty of Unicode characters to test with the eZ Webdav component. Greek letters ------------- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ ϕ χ ψ ω Mathematical characters ----------------------- ℂ ℕ ℚ ℝ ℤ ∀ ∁ ∂ ∃ ∄ ∅ ∈ ∉ ∋ ∌ ∎ ∎ ∏ ∐ ∑ + − ∓ ∕ ∖ ∗ ∘ √ ∛ ∜ ∝ ∞ ∣ ∤ ∧ ∨ ∩ ∪ ∫ ∬ ∭ = ≔ ≕ ≙ ≝ ≠ ≡ ≢ < > ≤ ≥ ≪ ≫ ≮ ≯ ≰ ≱ ≺ ≻ ≼ ≽ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊕ ⊖ ⊗ ⊙ ⊚ ⊛ ⊜ ⊝ ⊢ ⊣ ⊤ ⊥ ⊧ ⊬ ⊶ ⊷ ⊻ ⊼ ⊽ ‰ ‱ ', 'headers' => array ( 'ETag' => '22789e94da0ed3d0c1d084816e366220', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 121 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/collection/put_test.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/collection/put_test.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/collection/put_test.xml', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/collection/put_test.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/put_test.xml", qop=, nc=00000001, cnonce="004aa0e3", response="016c3ac3e9c40e4227817d1b249ee653"', 'PHP_SELF' => '/index.php/secure_collection/subdir/collection/put_test.xml', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/put_test.xml", qop=, nc=00000001, cnonce="004aa0e3", response="016c3ac3e9c40e4227817d1b249ee653"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'eZ component: Webdav, Design, 1.0Kore Nordmann, Tobias Schlitt$Rev$$Date$DraftContentsScopeDesign overviewTiersClassesezcWebdavServerezcWebdavBackendezcWebdavTransportezcWebdavPathFactoryExample code
ScopeThe scope of this document is to describe the initial design of a component that provides a WebDAV server, which works with all major other implementations of the WebDAV protocol.It is currently not planned to also offer a WebDAV client component.
Design overviewBecause of the variaty of buggy and incomplete implementations of WebDAV, this component will provide an abstraction to suite the different needs. Beside that, an abstract interface to the backend will be provided.The main class of this component will provide a fully RFC 2518 compliant implementation of a WebDAV server. An instance of this class retrieves an instance of a handler class, which takes care for performing the requested operations on a backend (for example the filesystem).Additionally, a collection of classes, which inherit the main class will be provided. Each of this classes will provide a compatibility layer on top of the RFC implementation, which works correctly with one or more "buggy" WebDAV clients. A factory pattern implementation will be provided, which takes automatically care of creating the correct server instance for a client.
TiersThe component is basically devided into 3 tiers: The top tier, being represented by the main server class. An instance of this class is responsible to dispatch a received request to a correct transport handler, which is capable of parsing the request.The transport handler level is the second tier. Classes in this tier are responsible to parse an incoming request and extract all relevant information to generate a response for it into a struct object. These struct object is then passed back to the server object.Based on the request struct object, the server checks the capabilities of its third tier, the used backend handler. If the handler object provides all necessary capabilities to generate a response, it is called to do so. If the server class can perform emulation of not available capabilities and rely on different features of the backend. In case there is no way, the backend can handle the request, the server class will indicate that with an error response.The way back flows through the 3 tiers back again: The backend handler generates a response object, which is passed back to the main server object, which makes the active transport handler encode the response and sends it back to the client.
Classes
ezcWebdavServerThe ezcWebdavServer class is the main class of the package. It has to be instantiated to create a server instance and provides a method to get the server up and running. An object of this class takes the main controll over serving the webdav service.Among the configuration of the server instance there must be: A backend handler object, which will be used to serve the received WebDAV requests. A fitting configuration for the backend handler. A collection of transport handlers which can be used to parse incoming requests. General configuration on the bevahiour of the server instance (like locking and stuff).The backend handler object must extend the base class ezcWebdavBackendHandler and must indicate to the main server, which capabilities it provides. The server class can potentially emulate certain capabilities, if the handler does not provide it. An example here is locking, which can be either performed by the handler itself or the main server class.Such emulation functionality could possibly be extracted to a third category of classes, which is only loaded by the main server object on-demand.All configured transport handlers must implement the interface ezcWebdavTransportHandler, which defines the necessary methods.The standard webdav server contains a list of transport handlers associated with regular expressions which should match the client name to be used. As a fallback the standards compliant transport handler will be used.Special implementation added by the user will be add on top of the list, to be used at highest priority.
ezcWebdavBackendAll backend handlers for the Webdav component must extends this abstract base class and implement its abstract methods for very basic WebDAV serving. The operations defined for every backend handler to be mandatory are:head()get()propFind()propFetch()All other WebDAV operations are optional to be implemented by a backend handler and are defined by the handler itself. The additional basic capabilities of backend handlers are indicated by implementing interfaces for the support additional request methods, like put, change, etc.Additional features, like encryption support will be indicated by returning a bitmask of supported features by the backend handler.The logical groups of capabilities are:PutThe put capability indicates, that a handler is capable of handling file uploads via HTTP-PUT method.ChangeThis sub class of WebDAV operations defines delete, copy and move operations to be supported by the handler class.Make collectionThe creation of new collections also makes up a capability unit and can optionally be implemented.LockIf the hander provides locking facilities on its own, the main server object must not take care about that.GZIP-CompressHandlers implementing this facility can deal with GZIP and bzip2 based compression.If a handler does not support a certain facility and the main server object is not capable of emulating it, the server will respond using a "501 Not Implemented" server error.
ezcWebdavTransportA class implementing this interface is capable of parsing a raw HTTP request into a struct extending ezcWebdavRequest and generating the HTTP response out of the ezcWebdavResponse struct. One transport handler is usually built to handle the communication with a certain set of specific client implementations.A transport handler class will be able to parse the incoming HTTP request data into a struct identifying a certain type of request and containg all necessary and unified data, so that a backend handler can repsond to it.The backend handler will then create a corresponding response object, which will be encoded back into HTTP data by the transport handler and send to the client by the server.Each request type will come with its own struct classes to represent request and response data for the request. Beside the structured HTTP data, the structs can contain any additional information that must be transferred between server, transport handler and backend handler.All struct classes representing either a request of response of the server will extend the abstract base classes ezcWebdavRequest and ezcWebdavResponse.An example of this structure is: ezcWebdavGetRequest and ezcWebdavGetResponseThese 2 classes will be used to serve GET requests. Beside the usual request information - like URI, date and headers - the request object will contain information about partial GET mechanisms to use and what else is important. The backend handler will return an instance of ezcWebdavGetResponse if the request was handled correctly, or a corresponding ezcWebdavErrorResponse object, if the request failed.The main server instance will know about available clients and will have a regular expression for each of them, to identify the clients it communicates to by matching the regualr expression against the client name provided in the HTTP headers.
ezcWebdavPathFactoryThis class is meant to calculate the path of the requested item from the backend based on the given path by the webdav client. The resulting path string is absolute to the root of the backend repository.This class is necessary to calculate the correct path when a server uses rewrite rules for mapping directories to one or more webdav implementations. The basic class uses pathinfo to parse the requested file / collection.Request: /path/to/webdav.php/path/to/file Result: /path/to/fileYou may want to provide custome implementations for different mappings so that rewrite could be used by the webserver to access files.Request: /images/path/to/file Rewritten: /path/to/dav_images.php/path/to/file Result: /path/to/fileThe factory class is necessary, because the paths contained in the request body will match the same scheme like the original request path, but not be rewritten by the webserver, so that the user may extend the path factory to fit his own purposes.
Example codeThe following snippet shows the API calls necessary to get a WebDAV server up and running. <?php $server = new ezcWebdavServer(); // Server data using file backend with data in "path/" $server->backend = new ezcWebdavBackendFile( \'/path\' ); // Optionally register aditional transport handlers // // This step is only required, when a user wants to provide own // implementations for special clients. $server->registerTransportHandler( // Regular expression to match client name \'(Microsoft.*Webdav\\s+XP)i\', // Class name of transport handler, extending ezcWebdavTransportHandler \'ezcWebdavMicrosoftTransport\' ); $server->registerTransportHandler( // Regular expression to match client name \'(.*Firefox.*)i\', // Class name of transport handler, extending ezcWebdavTransportHandler \'ezcWebdavMozillaTransport\' ); // Serve requests $server->handle();Local Variables: mode: rst fill-column: 79 End: vim: et syn=rst tw=79
', 'headers' => array ( 'ETag' => '5ad59a93c1eb407447585fc830b848a7', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 122 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/collection/put_test.zip', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/collection/put_test.zip', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/collection/put_test.zip', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/collection/put_test.zip', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/put_test.zip", qop=, nc=00000001, cnonce="004aa0e3", response="af93c110e7782114f3ed460b550f88c2"', 'PHP_SELF' => '/index.php/secure_collection/subdir/collection/put_test.zip', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/collection/put_test.zip", qop=, nc=00000001, cnonce="004aa0e3", response="af93c110e7782114f3ed460b550f88c2"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'M7%' . "\0" . '' . "\0" . '6' . "\0" . '' . "\0" . ' ' . "\0" . '' . "\0" . 'put_test.xmlUT ' . "\0" . 'GGUx' . "\0" . 'd' . "\0" . '[is6_tIm$qf\'ut P' . "\0" . '~ ARrnv!(' . "\0" . 'ߖUզ=^~<JMŬuO?> -UϾ{\\Z;]إ5m4[[./ťU|*tzjᅴιl:y' . "\0" . '`WfbI29T>^~* Xq3{1S-RS֦\'dv)dhѭ;{#x|^N?Gg޺p@+:N9-]/Dtl4뿚FLf?B;wu^W :ZldGo竎3NEZHkQmmgWk H?ڴE/n}*l䶑U<̦VO% h*:)<(x_1.Zgk\'O:NCt}RM8[?\'}֑QJԥDާpRFUYD?yt?ulmQ\'/kvLi+x/{ʲ.p G8!Rcj t<(0&5Nx]]S|v@荂AJ;- p!GJD F1)!j7VKȧ+7V;Lj' . "\0" . 'NB*)ݪSoz«XۯHi' . "\0" . '8ʀ aAײ K ]ciK e|t:A x, @aN#+@;ȳC&CVT@7 A' . "\0" . 'Jh}x&CCGbqj' . "\0" . 'R#Bepjj-߭q_QPG S' . "\0" . '. ҪI l@nJXP_g <{zCK\\Y:stTG=Xd#g' . "\0" . '' . "\0" . 'ml(1@Ԋ+ʈ<HX!WW1ʴiLS@}#/טv#b g@gT- \'܊k~=4 *D' . "\0" . 'OE#SІ{ F=AYZ鶏hUHI " H1 #B hPQT*39,ڪty \\gcfTƒJw:+8kIg~Z.V޶MQtp-FA%0Bp y<;O[ՅvX $C4pð8en8tĵk1}gM$\'T7J&S)\\LgH}nw[GzF' . "\0" . 'u1(3AyLM#=0Gnc2UՎ;Tֽz\\JӠ*tȓȅiauB?@OXy[\\cI5˓q\'f`\'zZ/BtWL -zODSf{m|Lr+ ' . "\0" . 'җ S\'G#$L"A"v8:,z&}S`g;2FIn(/0SDGI2IoUCQ#ȸ? ~dAPxvbhRd;Ix#rl4>?~]>ˆbbka+E#!%Q(mu4v30RYUBm?Kcul ܶe|huCxxX6sXE=Ŋy%_ťL/ /fDے=:*,A>x29lZxL{~nx.vi/0wass %{147{]EK|3U; t]4 h !eNPU]X7TpU ! ojc6ܸ rGIR`s_qA{KB7$1Gnkѭ7d' . "\0" . 'X0L2Fhvc]"Q^K=\'RtbwぐcPjJYkqiEkw\\ c@)EIql*NLCWάeGԀ&R14-}' . "\0" . '`O `k̆jS*R W㗀En]ʭcYd^VP/ 5038|I߬ 1eC~Т=qEx)`l:u@vAZji:b!{qW6{ccv f;XoK;Ƴ/ǯ!.V{;W+za' . "\0" . 'x5;zUu/ `A-3[K\'5:ˇk$o/h2~+^Z MMu*;` ;YrJZ|u_m#6%P< ~ `~|, wz̩CpPDbڍ)q ? MD ̎ozZ\'8C,Jm~XG7z \\ kLw:&h壩X~lˏ:0$ʩ0 rx[E @hHgp7|P{' . "\0" . 'Bg' . "\0" . '-' . "\0" . 'ʊɋ*;Knu ϡhD_|`dxPK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'ډM7mh ' . "\0" . '' . "\0" . 'sI' . "\0" . '' . "\0" . ' ' . "\0" . '' . "\0" . 'put_test.htmlUT ' . "\0" . 'GGUx' . "\0" . 'd' . "\0" . '\\6οx;vlvpٝj 0& ' . "\0" . '[VR' . "\0" . ' RTɮ? <<@~"תڔO\'Pej2]nN=//\'?_[^wlŋ^}' . "\0" . ' ⪖(|xDLUbw,,#S?\\4sl+ӂei9}1Ϟe.qUND i(?rR O\'MTfWJMDߞNzHB[Y[zQ,RdJUKgh 6NV,84u-.W_@L tjxޔS 1_VSg,aޕYiitkIo ~GYϕp /ZfUⅼ֙Ƙld)p\'m,pWY;lvH..Oo#BJ;h@|n}7[jMحRNlA +JQ2UХp[%fTd\' MD*m*`" EnW5NZo:T bkvΐy:{L6֙Bh<̓`UaXAb]B8BBn#Lxa<"z"\\6p+~M\'$' . "\0" . '0@2#6\'fPHHt*s@1.t[40I\'h?IGkL[e44g`)8`l+eNbmq!&V' . "\0" . 'i{bki>rv>K966$0eɂr%v Cb' . "\0" . ' T3~G *p"7BF(NclW>ǡ Ɍi rē?r#aN(.: wռnV5ʯ7@/@io*f$EVc0l{:ďсv? P | xy2/sRĐLlÇ ɃnxGc:GF]kgh_b3)dױ/_G`El1 +LJA^=Lvͫ<Hf7Uul0 Pe~Q̔Zct܃?TV8' . "\0" . 'cε ک^ ;hy]`xFZF=' . "\0" . ' %hgSt!CH' . "\0" . 'Rk()$?JJ?J*?7cdu} rvTv#0tntiX| rt$ѐQ X%&!U7J дm-¯!<ѽ5I@.S[HUͰ;ytHoYS8b[A8rwSߣ' . "\0" . 'å1rj 0ϰeu,%|}$nEw=_fm#d}hlCNg\'P? 33\']oO͍vUTDkE_MD ^"|0-ꑗUqM' . "\0" . ' ) XK~p[]Ma%UjۦbmS?ɦlp%E[|ā)y6NZͳ0Dihhޟ\\^S' . "\0" . 'd/Z%e{ D;ѿoiYm#|2 vFQ>b\'2E WaXn3>[Qk5Y>n{' . "\0" . '[%8p پ:Z::4h\'75k%)c%}Q#2DMIMVSt:C}(<3Gk!htk1,qx79Ũn T]' . "\0" . 'ZhҔل8RQ9Uwt]#s 3(VWʹ1j*%%m\'5Jݶj팵v' . "\0" . 'cpwxɼNRlרYkul6{>JN4ЁqouJ;ƼG0wli-5iʉRW Oi\'*,:@.e_+O-.7V8MYkx3GB9r`HH^I~R5l4t{=lΐ"ZSj' . "\0" . ' R(̼at)^ G& #X3# T",u`=$XPc%jϼ<{2:@HM g@S(t ZI)*zPm%@)6Ԫ>X&V"fۛA?@~PZ oKC@ޤJ_,9{+6 nӚ\'zK4Jv,=\\: 5)bU>g_^O\'|;daPb,X3\\BtI6v)' . "\0" . ' bVaQ90oL*:#@gy|%q)caiNVXL$ptaߵ9tyk1M`Q {.^q w)I\'%؁Ӕd&' . "\0" . 'FAa΄2aP' . "\0" . 'UۘI:9^OK@S]\\7!}²%^f"p' . "\0" . 'J#vr?EN#a Ģ X]ҁ)e`gk*6fKԽwk>8zIml&Zp #cH!L(@̢qįBҶګPtCgP!,t=xIVXNn)YBg Q@C/1TFT>mMnDDT7M5("xOjJWC*BI3 PB!~tY´a' . "\0" . 'KGԲNY4' . "\0" . 's+d`h} @GuP+`h@(e<' . "\0" . 'g+,s xEpFr|(F6M\\SOe*9k{=l" _^?a [/p\\u w#A=X]Рh8*Q`kGҏILLjG^H{Ra$Rk0{ r~' . "\0" . '.H249xiY2|Q,8@7u2Llx2e' . "\0" . ';; 5kߗUdr+D ].Xc{v6Ih(H  r ^0)A^B1V6NZ!%qv &k8+IG^ 4XA"H_x廝 o~1pl1ϫjm*~8=!9klhb-򴨘prtiAlzvI{ЎE+6cf4YO":j卍x<4{aBX U_RS%[t6LRXg{*/nOq\\`ˮ)5X9Nwt+Ge/&!yv%aٕ#!9!Fu4Ϳ^=xm𹞋nz>d B#ͯ~jFMg(ÚUt $4]Nq$МE"~L>ʅcON%:]K l 7GBD ݁κ|ߋC\' x# ' . "\0" . '{J9qhÛ[BKq&L.~,NJ}න ;QslMN,v=ZC ]ld^[^+V_YŒ@|Ƞe8{!b yZmfKqv?f藵,5) V&7e; v=SCjk$A*܏ 5  |(аg$pMGmeFkcav8U_^tkܪ;"&C:˧HJvW荥 v˪MŦd\\VrLnLʅlGc>^Uġӊ{MFQFV OZ0߼N P"47ine?,;>xC$HqvP_j[a6kCP%`n5Oz*|˷,NZO*ǦzR{/k_%d#î4;/\'o,@V\\GG5kTwS bGgУOn*px2GwenõBQqH-/  fuU|(nwZ|,l$@r3Mt=780AH3V"+uc >hv5w[d^*d.8\\)>Ck%pZƩC\'b,"1Mz@\\ !HêW۪}D0?M; Cߒ~x}%eyؐub&c' . "\0" . 'N^Ęa039p7HbѲ lxOMp@o BR]"DHq`90,p]R^u]CE9l ƶAUSè0_=>y\\\\͎ǀRWvJ<{hFkhPz\'s^e6i.IO)U#.xb!\\0v7@ E@/5t.´5P+>#L ]\'"f]kxjh' . "\0" . 'nto' . "\0" . '[Ēo' . "\0" . 'hpo`a.Ps޴~XvYmg!}:8>柎UCZ&{?Ak~ /' . "\0" . 'P=j0 r5^wd6lt o=L rFS@|5/Ŋ,3؝' . "\0" . '\'ySDJm-tu1 @}z@;.' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'M7%' . "\0" . '' . "\0" . '6' . "\0" . '' . "\0" . ' ' . "\0" . ' ' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'put_test.xmlUT' . "\0" . 'GUx' . "\0" . '' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'ډM7mh ' . "\0" . '' . "\0" . 'sI' . "\0" . '' . "\0" . ' ' . "\0" . ' ' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'put_test.htmlUT' . "\0" . 'GUx' . "\0" . '' . "\0" . 'PK' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '(' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . ' ', 'headers' => array ( 'ETag' => 'ef383241769f0df9a982a37b53504cf2', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Type' => 'application/octet-stream; charset="utf-8"', ), 'status' => 'HTTP/1.1 200 OK', ), ), 123 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="0221c012", response="60acb033772c5d7239568116765b80c7"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="0221c012", response="60acb033772c5d7239568116765b80c7"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 124 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/', 'REDIRECT_URI' => '/index.php/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'GET', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/", qop=, nc=00000001, cnonce="01906254", response="dadd0eb98fe32c03c297504fd7bc9532"', 'PHP_SELF' => '/index.php/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/", qop=, nc=00000001, cnonce="01906254", response="dadd0eb98fe32c03c297504fd7bc9532"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Content-Length' => '4096', 'ETag' => '6666cd76f96956469e7be39d750cc7d9', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 200 OK', ), ), 125 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="1c31fd54", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="1c31fd54", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/collection httpd/unix-directory 082f894be3770c1d4a37d15032a3b493 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 126 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 127 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 128 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="1c31fd54", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="1c31fd54", response="df0988895fa7ed119ef0e0c7ec1ea275"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/subdir/ httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir/collection httpd/unix-directory 082f894be3770c1d4a37d15032a3b493 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 129 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 130 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_non_utf8.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_non_utf8.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_non_utf8.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_non_utf8.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'COPY', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/secure_collection/put_test_non_utf8.txt', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_non_utf8.txt", qop=, nc=00000001, cnonce="1c31fd54", response="aba4a63692f1d507169c63740ef3d7c4"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_non_utf8.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_non_utf8.txt", qop=, nc=00000001, cnonce="1c31fd54", response="aba4a63692f1d507169c63740ef3d7c4"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 131 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_renamed.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_renamed.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_renamed.xml', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_renamed.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'COPY', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/secure_collection/put_test_renamed.xml', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_renamed.xml", qop=, nc=00000001, cnonce="1c31fd54", response="7015fa07c6d7a0bd4a8516d5024f62b5"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_renamed.xml', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_renamed.xml", qop=, nc=00000001, cnonce="1c31fd54", response="7015fa07c6d7a0bd4a8516d5024f62b5"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 132 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/put_test_öäüß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/put_test_öäüß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/put_test_öäüß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'COPY', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/secure_collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt", qop=, nc=00000001, cnonce="1c31fd54", response="ff0da39139fba8540cc9cd97b140849d"', 'PHP_SELF' => '/index.php/secure_collection/subdir/put_test_öäüß.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt", qop=, nc=00000001, cnonce="1c31fd54", response="ff0da39139fba8540cc9cd97b140849d"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 133 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 134 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="1c31fd54", response="60acb033772c5d7239568116765b80c7"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 135 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'MOVE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_DESTINATION' => 'http://webdav/secure_collection/subdir_renamed/', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => 'infinity', 'HTTP_TRANSLATE' => 'f', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="1c31fd54", response="05b4a2a2ae7c9d51cc0b0546f3952e2b"', 'PHP_SELF' => '/index.php/secure_collection/subdir/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir/", qop=, nc=00000001, cnonce="1c31fd54", response="05b4a2a2ae7c9d51cc0b0546f3952e2b"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 201 Created', ), ), 136 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_LENGTH' => '220', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/', 'REDIRECT_URI' => '/index.php/secure_collection/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'PROPFIND', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_DEPTH' => '1', 'HTTP_CONTENT_LENGTH' => '220', 'CONTENT_TYPE' => 'text/xml', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="00091c0e", response="60acb033772c5d7239568116765b80c7"', 'PHP_SELF' => '/index.php/secure_collection/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/", qop=, nc=00000001, cnonce="00091c0e", response="60acb033772c5d7239568116765b80c7"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => ' http://webdav/secure_collection/ httpd/unix-directory 74c66f56a6551ab5bfb885e7f32aeac7 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/file.txt text/plain; charset="utf-8" 915f244ec53702ea179db0509d787bde Mon, 15 Aug 2005 15:13:00 +0000 18 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_non_utf8.txt application/octet-stream 29909daed84fd350d162e0d7b9b76483 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_renamed.xml application/octet-stream 866d436fdb9577521a1d1acd440e1026 Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt application/octet-stream 94ad488564aca44123a62c6f22c090dd Mon, 15 Aug 2005 15:13:00 +0000 0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found http://webdav/secure_collection/subdir_renamed httpd/unix-directory c5478175e232c6c35b72e28fb638de42 Mon, 15 Aug 2005 15:13:00 +0000 4096 HTTP/1.1 200 OK HTTP/1.1 404 Not Found ', 'headers' => array ( 'Content-Type' => 'text/xml; charset="utf-8"', 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', ), 'status' => 'HTTP/1.1 207 Multi-Status', ), ), 137 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/file.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/file.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/file.txt', 'REDIRECT_URI' => '/index.php/secure_collection/file.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/file.txt", qop=, nc=00000001, cnonce="00091c0e", response="a70ae5162a8dce83f24b4fb74588966f"', 'PHP_SELF' => '/index.php/secure_collection/file.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/file.txt", qop=, nc=00000001, cnonce="00091c0e", response="a70ae5162a8dce83f24b4fb74588966f"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 138 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/put_test_non_utf8.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/put_test_non_utf8.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/put_test_non_utf8.txt', 'REDIRECT_URI' => '/index.php/secure_collection/put_test_non_utf8.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/put_test_non_utf8.txt", qop=, nc=00000001, cnonce="00091c0e", response="6b2d985391adb37fa76c0acb11ce6903"', 'PHP_SELF' => '/index.php/secure_collection/put_test_non_utf8.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/put_test_non_utf8.txt", qop=, nc=00000001, cnonce="00091c0e", response="6b2d985391adb37fa76c0acb11ce6903"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 139 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/put_test_renamed.xml', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/put_test_renamed.xml', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/put_test_renamed.xml', 'REDIRECT_URI' => '/index.php/secure_collection/put_test_renamed.xml', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/put_test_renamed.xml", qop=, nc=00000001, cnonce="00091c0e", response="589eb67316256e90537bf8b9f2c35a7e"', 'PHP_SELF' => '/index.php/secure_collection/put_test_renamed.xml', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/put_test_renamed.xml", qop=, nc=00000001, cnonce="00091c0e", response="589eb67316256e90537bf8b9f2c35a7e"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 140 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/put_test_öäüß.txt', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/put_test_öäüß.txt', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt', 'REDIRECT_URI' => '/index.php/secure_collection/put_test_öäüß.txt', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt", qop=, nc=00000001, cnonce="00091c0e", response="b51f742260f7b37bb7618ce33f8ef80c"', 'PHP_SELF' => '/index.php/secure_collection/put_test_öäüß.txt', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/put_test_%C3%B6%C3%A4%C3%BC%C3%9F.txt", qop=, nc=00000001, cnonce="00091c0e", response="b51f742260f7b37bb7618ce33f8ef80c"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), 141 => array ( 'request' => array ( 'body' => '', 'server' => array ( 'LANG' => 'en_US.UTF-8', 'SERVER_SOFTWARE' => 'lighttpd/1.4.20', 'SERVER_NAME' => 'webdav', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PORT' => '80', 'SERVER_ADDR' => '127.0.0.1', 'REMOTE_PORT' => '33458', 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '/index.php', 'PATH_INFO' => '/secure_collection/subdir_renamed/', 'PATH_TRANSLATED' => '/home/dotxp/web/webdav/htdocs/secure_collection/subdir_renamed/', 'SCRIPT_FILENAME' => '/home/dotxp/web/webdav/htdocs/index.php', 'DOCUMENT_ROOT' => '/home/dotxp/web/webdav/htdocs/', 'REQUEST_URI' => '/secure_collection/subdir_renamed/', 'REDIRECT_URI' => '/index.php/secure_collection/subdir_renamed/', 'QUERY_STRING' => '', 'REQUEST_METHOD' => 'DELETE', 'REDIRECT_STATUS' => '200', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'HTTP_HOST' => 'webdav', 'HTTP_USER_AGENT' => 'BitKinex/3.0.2', 'HTTP_ACCEPT' => '*/*', 'HTTP_PRAGMA' => 'no-cache', 'HTTP_CACHE_CONTROL' => 'no-cache', 'HTTP_TRANSLATE' => 'f', 'HTTP_AUTHORIZATION' => 'Digest username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir_renamed/", qop=, nc=00000001, cnonce="00091c0e", response="e0812143c103f52b37175ca84bd95b21"', 'PHP_SELF' => '/index.php/secure_collection/subdir_renamed/', 'PHP_AUTH_DIGEST' => 'username="some", realm="eZ Components WebDAV", nonce="ef3b75da8f0b48c9e277c19d6dea6aec", uri="/secure_collection/subdir_renamed/", qop=, nc=00000001, cnonce="00091c0e", response="e0812143c103f52b37175ca84bd95b21"', 'REQUEST_TIME' => 1220431173, ), ), 'response' => array ( 'body' => '', 'headers' => array ( 'Server' => 'lighttpd/1.4.20/eZComponents/dev/ezcWebdavTransportMock', 'Content-Length' => 0, ), 'status' => 'HTTP/1.1 204 No Content', ), ), ); ?>