我正在开发一个Web项目,该项目涉及通过PHP连接到SharePoint Online并访问存储在其上的文件。但我对这一切都非常陌生,而且已经碰壁了。
问题是:我如何实际访问该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();
}
答案 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 ....它工作得很漂亮!!!!!