如何用php连接sharepoint

Posted

技术标签:

【中文标题】如何用php连接sharepoint【英文标题】:how to connect sharepoint with php 【发布时间】:2013-07-06 22:01:50 【问题描述】:

有谁知道如何集成 Sharepoint 和 php。我正在尝试开发可以连接到 Sharepoint 的 php 应用程序。特别是因为基本上我是网站开发人员,我希望我的所有网站都与 Sharepoint 连接。所以,我只是想创建一个适用于所有网站的 PHP 应用程序。我不知道有没有可能,但我想试一试,但不知道如何进行。

欢迎提出任何想法/建议。

提前致谢。

【问题讨论】:

可能重复:***.com/questions/7782645/… @ckhan 谢谢你的链接,但首先我想在使用数据库之前将 php 连接到共享点。我已经在服务器中有一个共享点,现在我想用一些 php 连接那个共享点我的电脑中的应用程序。 【参考方案1】:

试试这个API

在 SharePoint 中

下载 WSDL。通常在这个位置:/subsite/_vti_bin/Lists.asmx?WSDL

下载 API

确保同时保存SoapClientAuth.phpSharePointAPI.php

在 PHP 中

// 0: include api in your php script.
require_once('SharePointAPI.php');

// 1: connect to SharePoint
$sp = new SharePointAPI('<username>', '<password>', '<path_to_WSDL>');

// 2: read a list
$listContents = $sp->read('<list_name>'); 

// 3: now you have a 2-D array to work with in PHP
foreach($listContents as $item)

    var_dump($item);

通过这个API,你还可以查询、更新、创建、删除列表,查询列表元数据

【讨论】:

你的答案似乎不错,但我得到了$listContents = $sp-&gt;read('&lt;list_name&gt;');未经授权 错误。知道为什么吗? 您在使用 NTLM 吗?试试$sp = new SharePointAPI('&lt;username&gt;', '&lt;password&gt;', '&lt;path_to_WSDL&gt;', true);注意最后一个参数true 试试这个工具。输入您的凭据和列表名称。请注意大小写和空格。 spcamlqueryhelper.codeplex.com 它对我有用,但我必须在最后添加SPONLINEnew SharePointAPI('xx', 'yy', 'zz', 'SPONLINE');【参考方案2】:

我在 API 中使用它来将我的 PHP Web 应用程序与 SharePoint 连接并将数据从 PHP 传输到 SharePoint,它对我来说 100% 有效:

使用说明

安装

下载要与之交互的 SharePoint 列表的 WSDL 文件。这个一般可以在:sharepoint.url/subsite/_vti_bin/Lists.asmx?WSDL

如果您正在使用 composer,只需将 thybag/php-sharepoint-lists-api 添加到您的 composer.json 并运行 composer。

    
    "require": 
        "thybag/php-sharepoint-lists-api": "dev-master"
    
    

如果您不使用 composer,您可以手动下载 SharePoint API 文件的副本,并在项目中包含顶部的“SharePointAPI.php”类。

创建 SharePointAPI 对象

为了使用 PHP SharePoint Lists API,您需要一个具有所需列表权限的有效用户/服务帐户。

对于大多数 SharePoint 安装,您可以使用以下方法创建 API 的新实例:

    use Thybag\SharePointAPI;
            $sp = new SharePointAPI('', '', '');

如果您的安装需要 NTLM 身份验证,您可以改为使用:

    use Thybag\SharePointAPI;
    $sp = new SharePointAPI('', '', '', 'NTLM');

SharePoint Online 用户必须使用:

    use Thybag\SharePointAPI;
    $sp = new SharePointAPI('', '', '', 'SPONLINE');

默认情况下,所有方法都返回一个数组。 SetReturnType 可用于指定结果应作为对象返回。

从列表中读取。

要返回列表中的所有项目,请使用任一

    $sp-&gt;read('');
or
    $sp-&gt;query('')-&gt;get();

要仅返回列表中的前 10 个项目,请使用:

    $sp-&gt;read('', 10);

    $sp-&gt;query('')-&gt;limit(10)-&gt;get();

要从姓氏为 smith 的列表中返回所有项目,请使用:

    $sp-&gt;read('', NULL, array('surname'=&gt;'smith'));

    $sp-&gt;query('')-&gt;where('surname', '=', 'smith')-&gt;get();

查询列表

当您需要指定一个复杂的查询,以便使用 read 方法轻松定义时,可以使用 query 方法。查询是使用许多(希望是富有表现力的)伪 SQL 方法构建的。

例如,如果您想查询宠物列表并返回所有 5 岁以下的狗(按年龄排序),您可以使用。


    $sp->query('list of pets')->where('type','=','dog')->and_where('age','sort('age','ASC')->get();

如果您想获得前 10 只猫或仓鼠宠物,您可以使用:

    $sp-&gt;query('list of pets')-&gt;where('type','=','cat')-&gt;or_where('type','=','hamster')-&gt;limit(10)-&gt;get();

如果需要返回 5 个项目,但包括列表中包含的所有字段,则可以使用。 (将 false 传递给 all_fields 以包含隐藏字段)。

    $sp-&gt;query('list of pets')-&gt;all_fields()-&gt;get();

如果您有一组 CAML 用于您想要运行的特定高级查询,您可以使用以下方法将其传递给查询对象:

    $sp-&gt;query('list of pets')-&gt;raw_where('Hello World')-&gt;limit(10)-&gt;get();

添加到列表

要将新项目添加到列表中,您可以使用“write”、“add”或“insert”方法(所有功能都相同)。在包含名字、姓氏、年龄和电话列的列表中创建新记录可能如下所示:

    $sp-&gt;write('', array('forename'=&gt;'Bob','surname' =&gt;'Smith', 'age'=&gt;40, 'phone'=&gt;'(00000) 000000' ));

您还可以使用以下命令同时运行多个写入操作:

    $sp-&gt;writeMultiple('', array(array('forename' =&gt; 'James'),array('forename' =&gt; 'Steve')));

编辑行

要编辑一行,您需要有它的 ID。假设上面一行的 ID 为 5,我们可以将 Bob 的名字改为 James:

    $sp-&gt;update('','5', array('forename'=&gt;'James'));/code&gt;

与 write 方法一样,您也可以使用以下方法一起运行多个更新操作:

    $sp-&gt;updateMultiple('', array(    array('ID'=&gt;5,'job'=&gt;'Intern'),array('ID'=&gt;6,'job'=&gt;'Intern')));

使用 updateMultiple 时,每个项目都必须有一个 ID。

删除行

要删除行,需要 ID 和列表名称。要删除 ID 为 5 的 James 的记录,您可以使用:

    $sp-&gt;delete('', '5');

如果您希望一次删除多条记录,也可以将一组 ID 传递给删除多个方法

    $sp-&gt;deleteMultiple('', array('6','7','8'));

辅助方法

PHP SharePoint API 包含许多帮助方法,可以更轻松地确保某些值对于某些 SharePoint 特殊数据类型的格式正确。

日期时间 DateTime 方法可以传递基于文本的日期

    $date = \Thybag\SharepointApi::dateTime("2012-12-21");

或unix时间戳

    $date = \Thybag\SharepointApi::dateTime(time(), true);

疑难解答

找不到包装“https”

如果您收到此错误,通常意味着您的 Web 服务器上未启用 php_openssl(需要 curl https URL)。对于许多本地 Web 服务器(例如 XAMPP),您可以简单地打开 php.ini 文件并取消注释 php_openssl 行(即删除它之前的;)。

注意:如果您使用 SharePoint Online 并遇到 SSL 错误,请提取已从 SSL v3 更改为 TLS 的最新版本以进行 SharePoint 在线连接。

将此行添加到您的 composer.json 文件中

 thybag/php-sharepoint-lists-api: dev-develop

您可以使用上述 SharePoint API 执行 CRUD(创建/读取/更新/删除)操作。

参考网址链接:https://github.com/thybag/PHP-SharePoint-Lists-API

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @19greg96 我已经用所有基本命令和参考 URL 更新了答案 感谢来自 github 的复制粘贴 @MoisheySchwartz 我提供了参考链接。【参考方案3】:

如果我没看错你的问题,你想使用 PHP 与你的 SharePoint 网站进行交互。您可以使用 SharePoint 的 Web 服务进行大多数交互。例如,您可以使用列表 Web 服务 (http:///_vti_bin/lists.asmx) 读取所有列表项。您可以将文件上传到 SharePoint 文档库。我疯狂地寻找我为实现这一目标所做的事情的例子,但我已经失去了它。我记得使用 Curl 进行上传。

有许多网站讨论使用 PHP 访问 SharePoint 数据。以下是我通过简单的谷歌搜索找到的一对:

http://craiget.com/hello-sharepoint-meet-php/ http://davidsit.wordpress.com/2010/02/23/reading-a-sharepoint-list-with-php/ http://social.msdn.microsoft.com/Forums/sharepoint/en-US/3aa34d3d-0f0b-48bd-9752-f9c0c4577804/php-and-sharepoint-calendar-list http://brian-strickland.com/index.php/2012/04/19/displaying-and-downloading-sharepoint-document-libraries-using-php/

以及关于名为 Camelot PHP 的工具的讨论 here

【讨论】:

@robbert 是的,我想使用 php 与 sharepoint 站点进行交互,但在此之前我认为我需要在两者之间建立连接。阅读列表项目,只有当我在两者之间建立联系时才能上传,不是吗?现在我对如何将 php 与 sharepoint 连接感到困惑。 可能你最好的,如上面建议的,是使用 SharePoint 提供的 RESTful 服务,尝试:mstecharchitect.blogspot.com/2010/01/… 我添加了一些链接到讨论解决方案的网站。可以做到的。 @robbert 感谢您提供的链接...我正在阅读它,我相信它会有所帮助。 :) 第一个链接 (craiget.com/hello-sharepoint-meet-php) 现在返回 404。

以上是关于如何用php连接sharepoint的主要内容,如果未能解决你的问题,请参考以下文章

如何用PHP连接 curl方式的接口

如何用Entity Framework 6 连接Sqlite数据库

如何用Eclipse连接MySQL数据库

如何用php判断mysql数据库里某张表是不是存在

如何用php程序主动向html页面发送信息?

如何用PHP做网络爬虫