如何使用PHP连接SharePoint

8

有谁知道如何集成Sharepoint和Php。我正在尝试开发一个php应用程序,可以连接到Sharepoint。特别是因为我基本上是一个网站开发人员,我希望我的所有网站都与Sharepoint相连。所以,简单地说,我想创建一个Php应用程序,使其适用于所有网站。我不知道这是否可能,但我想尝试一下,但不知道如何继续。

欢迎任何想法/建议。

提前感谢您。


可能是重复问题:https://dev59.com/9VzUa4cB1Zd3GeqP1kQI - ckhan
@ckhan,感谢您提供的链接,但首先我想在与数据库工作之前将PHP连接到SharePoint。我已经在服务器上拥有一个SharePoint,现在我想将该SharePoint与我电脑上的某些PHP应用程序连接起来。 - samjhana joshi
3个回答

9
请尝试使用此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,你可以查询、更新、创建、删除列表以及查询列表元数据。

1
你的回答看起来很好,但是当我执行 $listContents = $sp->read('<list_name>'); 时,出现了 未授权 的错误。你有什么想法吗? - HeinrichStack
1
你是否在使用NTLM?尝试 $sp = new SharePointAPI('<username>', '<password>', '<path_to_WSDL>', true); 注意最后一个参数是 true - NoodleFolk
请尝试使用此工具。输入您的凭据和列表名称。注意大小写和空格。http://spcamlqueryhelper.codeplex.com/ - NoodleFolk
1
它对我起作用了,但我必须在末尾添加SPONLINEnew SharePointAPI('xx', 'yy', 'zz', 'SPONLINE'); - Vincent Poirier

1
我已经在API中使用了这个工具,将我的PHP Web应用程序与SharePoint连接并从PHP传输数据到SharePoint,对我来说它百分之百地有效: 使用说明安装 下载要与之交互的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列表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->read('');

or

    $sp->query('')->get();

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

    $sp->read('', 10);

或者

    $sp->query('')->limit(10)->get();

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

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

或者

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

查询列表

当您需要指定一个复杂的查询,无法使用读取方法轻松定义时,可以使用查询方法。查询是使用许多(希望表达清晰)伪 SQL 方法构建的。

例如,如果您想查询一组宠物,并返回所有年龄低于5岁的狗(按年龄排序),则可以使用以下方法。


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

如果你想获取前十只猫或仓鼠,可以使用以下代码:
    $sp->query('list of pets')->where('type','=','cat')->or_where('type','=','hamster')->limit(10)->get();

如果您需要返回5个项目,但包括列表中包含的所有字段,则可以使用以下方法。(将all_fields设置为false以包括隐藏字段)。
    $sp->query('list of pets')->all_fields()->get();

如果您有一组用于运行特定高级查询的CAML,您可以使用以下方式将其传递给查询对象:
    $sp->query('list of pets')->raw_where('Hello World')->limit(10)->get();

添加到列表

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

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

您也可以使用以下方法同时运行多个写操作:

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

编辑行

要编辑一行,需要知道它的ID。假设上面的一行的ID为5,我们可以用以下代码将Bob的姓名更改为James:

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

与write方法类似,您也可以使用以下方式同时运行多个更新操作:
    $sp->updateMultiple('', array(    array('ID'=>5,'job'=>'Intern'),array('ID'=>6,'job'=>'Intern')));

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

删除行

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

    $sp->delete('', '5');

如果您希望一次删除多条记录,可以将ID数组传递给批量删除方法。
    $sp->deleteMultiple('', array('6','7','8'));

辅助方法

PHP SharePoint API包含许多辅助方法,使得确保某些SharePoint特殊数据类型的值处于正确格式更容易。

dateTime 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(创建/读取/更新/删除)操作。

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


1
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。-【来自审查】 - 19greg96
@19greg96 我已经更新了答案,包括所有必要的命令和参考网址。 - Yogi Ghorecha
谢谢您从Github上复制粘贴的内容。 - Moses Schwartz
@MoisheySchwartz 我已经提供了参考链接。 - Yogi Ghorecha

1
如果我理解你的问题正确,你想使用PHP与SharePoint网站进行交互。你可以通过使用SharePoint的Web服务来完成大部分交互。例如,你可以使用列表Web服务(http:///_vti_bin/lists.asmx)读取所有列表项。你可以将文件上传到SharePoint文档库中。我曾经搜索过一个示例来完成这个任务,但是我已经找不到了。我记得使用Curl来完成上传。
有许多网站讨论如何使用PHP访问SharePoint数据。以下是我在简单的谷歌搜索中发现的一些网站:

除了关于一个叫做Camelot PHP的工具的讨论在这里


@ robbert 是的,我想使用PHP与SharePoint网站进行交互,但在此之前,我认为我需要在两者之间建立连接。只有当我连接了两者之后,才能读取列表项、上传等操作,不是吗?现在我对如何连接PHP和SharePoint感到困惑。 - samjhana joshi
1
如上所建议,您最好使用SharePoint提供的RESTful服务,尝试访问以下链接:http://mstecharchitect.blogspot.com/2010/01/accessing-sharepoint-2010-lists-using.html - mezmo
我已经添加了一些链接到讨论解决方案的网站。这是可以做到的。 - Robbert
@robbert 谢谢你提供的链接...我正在阅读,相信它会很有帮助。 :) - samjhana joshi
第一个链接(http://craiget.com/hello-sharepoint-meet-php/)现在返回404错误。 - raphael75
除非您仍在尝试连接到Office 365,否则此答案基本上已过时。从SharePoint 2013开始,建议使用REST。 - Robbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接