【问题标题】:CardDAV Server in PHPPHP 中的 CardDAV 服务器
【发布时间】:2010-12-10 03:39:06
【问题描述】:

我目前正在寻找一种用 PHP 构建 CardDAV 服务器的方法。这是一个小型开发项目,希望我的公司能够在由自定义后端/CRM 提供服务的多种设备之间共享联系人。

我开始玩弄,试图理解协议,但最终困惑了两倍。然后我阅读了 IETF 草案,但发现我什至不了解 WebDAV 本身的基础知识。

您会建议我从哪些方面开始学习 CardDAV、WebDAV 和所有相关内容?

【问题讨论】:

  • 这是一个繁琐的协议。但是您可能想尝试 PEAR HTTP_WebDAV_Server 或 Horde 实现(使用 VFS)来潜入传输的 xmlish 内容。
  • 谢谢马里奥,我会调查的!
  • 哇! SaberDAV 可能正是我正在寻找的东西,我会研究它,玩一会儿,如果我能设法编写一个模块,我会回馈你的项目,Evert。谢谢!
  • 更新链接:sabre.io ;)

标签: php http webdav


【解决方案1】:

我很想知道是否可以帮助解决有关 webdav 的一些困惑。大多数 IETF 标准使用的语言看起来很生硬。

WebDAV 背后的原理

HTTP 是为获取网络资源而设计的,或者我应该说是阅读。它不适用于创作网络资源。

简而言之,WebDAV 提供了一整套远程文档访问功能,包括文件存储、目录管理和对协作创作的支持。

想想文件系统

理解 webdav 的最短路径是把 web 资源当作文件系统来处理的相似性。

就像文件夹一样,collections 作为特殊的网络资源可以包含其他网络资源。它需要将其区分为特殊资源,因为功能(适用于普通资源的方法不同)

于是新方法诞生了——mkcol

就像files have attributesweb resources have meta-properties 一样,它提供了有关网络资源的一些详细信息。 Web 资源内容本身可以像以前一样呈现(HTTP 已经为您做到了)。

简而言之,您还需要拥有methods to enquire into meta-properties - PROPFIND 并更改它们 - PROPATCH。 XML 有效负载旨在查询和检索这些属性。

WebDAV的做法是把属性存储在文件体之外,可以不获取整个body就可以查询,不改变body就可以更新。

某些属性是特定于 webdav 的。它们是出于需要而创建的。例如:Resourcetype Property。创建它是为了询问您是否正在使用特殊的收藏资源或收藏中包含的普通网络资源。

请记住,GET(类似于 HTTP)获取资源,PUT 修改资源,而 DELETE 删除资源。

HTTP 的限制

要了解 webdav,您必须了解 HTTP 的局限性。

  1. 它是无状态的,迫使用户从头开始构建搜索。
  2. 您不能说对特定集合中的所有资源都执行此操作。
  3. 它是只读的,不提供创作所需的协作功能。
  4. 它缺乏对多资源操作的支持。为了支持这一点,创建了depth header,以便您可以判断它是否需要在所有资源上工作。

WebDAV 资源模型

  +--------+    +--------------+
  |Resource|... |Property      |
  +--------+    +--------------+
                +------++------+
                |Webdav||custom|
                +------++------+

  +-----------+
  |Dav root: /|......
  +-----------+     |     +--------+
                    |.....|Resource|
                    |     +--------+
                    |     +----------+
                    |.....|Collection|.....   +----------+
                    '     +----------+    |...|Collection|
                                          |   +----------+
                                          |    +--------+
                                          |....|Resource|
                                               +--------+

【讨论】:

  • 这是一个很好的答案,它确实消除了我的一些误解。您能否详细说明一下标准之上的实现,例如 Cal/CardDAV?
【解决方案2】:

您还可以试用 DAViCal,这是一个用 PHP 编写的 CalDAV 和 CardDAV 服务器,带有 Postgres 后端。我发现它非常可靠,但请注意:至少暂时停止了开发。在邮件列表中,有一个补丁可以让 DAViCAL 与最新的 Apple 产品兼容(其中有很多需要解决的错误)。

代码是开源的(不确定哪个许可证确切适用),但如果您仍想自己构建一些东西,您可以看看 DAViCal 如何处理 Cal- 和 CardDAV。

http://www.davical.org

【讨论】:

  • 酷,我去看看。感谢您的参与!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多