使用PHP / XML / SOAP下载或访问SharePoint Online文档

时间:2017-05-11 16:26:03

标签: php xml sharepoint soap token

我正在开发一个Web项目,该项目涉及通过PHP连接到SharePoint Online并访问存储在其上的文件。但我对这一切都非常陌生,而且已经碰壁了。

  • 我有我正在尝试访问的文件的网址
  • 使用phpSPO library,我通过身份验证并连接到SharePoint。

问题是:我如何实际访问该URL?如果我直接关注该链接,它会将我重定向到SharePoint的登录页面。但我们希望登录“在幕后”发生 - 显然认证步骤并不是那么做。

我们正在与之合作的公司告诉我们,我们需要通过调用函数来请求URL的匿名链接。问题是,他们告诉我们使用的功能在ASPX中有效,但似乎在PHP中不可用。

这是他们向我们指出的代码:

Uri siteUri = new Uri(siteUrl);
Web web = context.Web;
SecureString passWord = new Secure String();
foreach (char c in "password".ToCharArray())
    passWord.AppendChar(c);
context.Credentials = new SharePointOnlineCredentials("userid", passWord);
WebDocs.Parameter1 = "123456"
WebDocs.Parameter2 = "Test"
context.Web.CreateAnonymousLinkForDocument(WebDocs.Parameter1, WebDocs.Parameter2, ExternalSharingDocumentOption.View);

但是我怎么能把它翻译成PHP呢?我甚至可以这样做吗?

如果没有,是否有另一种方法可以访问该文件以将其显示给我的用户?

// this says the function CreateAnonymousLinkForDocument doesn't exist
function getLink(ClientContext $ctx) {
    $anonymousLink = $ctx->getWeb()->CreateAnonymousLinkForDocument(); 
    $ctx->load($anonymousLink);
    $ctx->executeQuery();
}

1 个答案:

答案 0 :(得分:2)

好吧,经过几个小时的互联网搜索......

答案就在我面前。

开始浏览phpSPO库附带的examples / SharePoint / file_examples.php,并发现了2个函数(其中一个有效)。

一个叫做downloadFile,另一个是downloadFileAsStream。

function downloadFile(ClientRuntimeContext $ctx, $fileUrl, $targetFilePath){
    $fileContent = 
Office365\PHP\Client\SharePoint\File::openBinary($ctx,$fileUrl);
    file_put_contents($targetFilePath, $fileContent);
    print "File {$fileUrl} has been downloaded successfully\r\n";
}

function downloadFileAsStream(ClientRuntimeContext $ctx, $fileUrl, 
    $targetFilePath) {
    $fileUrl = rawurlencode($fileUrl);

    $fp = fopen($targetFilePath, 'w+');
    $url = $ctx->getServiceRootUrl() . "web/getfilebyserverrelativeurl('$fileUrl')/\$value";
    $options = new \Office365\PHP\Client\Runtime\Utilities\RequestOptions($url);
    $options->StreamHandle = $fp;
    $ctx->executeQueryDirect($options);
    fclose($fp);

    print "File {$fileUrl} has been downloaded successfully\r\n";
}

由于我试图下载PDF,我只是将这些功能设置为在我们自己的服务器上创建一个PDF ....它工作得很漂亮!!!!!