gwsn / sharepoint-sdk
使用PHP连接到Sharepoint驱动器
Requires
- php: ^8.0
- guzzlehttp/guzzle: ^7.4
Requires (Dev)
- phpunit/phpunit: ^9.5
README
Sharepoint SDK,用于将Sharepoint用作文件存储。
有关Flysystem适配器(Symfony和Laravel)的信息,请参阅flysystem软件包:gwsn/flysystem-sharepoint-adapter
安装
您可以通过composer安装此软件包
composer require gwsn/sharepoint-sdk
首次配置以开始使用
您需要在Azure上为新的应用程序请求新的clientId和clientSecret。
-
前往
Azure门户
https://portal.azure.com -
前往
Azure Active Directory
-
前往
应用程序注册
-
点击
新建注册
并按照向导操作。
(给它起一个名字,比如我的名字是 'gwsn-sharepoint-connector',并决定支持的帐户,单租户应该足够,但这取决于您的组织) -
当应用程序创建后,请记下以下详细信息
-
'应用程序(客户端)id',这将成为您的
$clientId
-
'目录(租户)id',这将成为您的
$tenantId
-
然后我们进入菜单到
API权限
以设置所需的权限 -
点击
添加权限
并添加以下权限
Microsoft Graph- Files.ReadWrite.All
- Sites.ReadWrite.All
- User.Read
-
点击
为...公司...授予管理员同意
-
进入菜单到
证书与密钥
-
点击
新建客户端密钥
-
给它一个描述和过期日期,值将是您的
$clientSecret
-
最后一个参数将是Sharepoint的'slug',这是您要使用的Sharepoint站点的URL的一部分,Sharepoint站点的创建超出了本说明的范围。
当您的Sharepoint URL类似于https://{tenant}.sharepoint.com/sites/{site-slug}/Shared%20Documents/Forms/AllItems.aspx
您需要将$sharepointSite
设置为{site-slug}
示例
- Sharepoint站点URL:
https://GWSN.sharepoint.com/sites/gwsn-documents-store/Shared%20Documents/Forms/AllItems.aspx
- Sharepoint站点变量:
$sharepointSite = 'gwsn-documents-store'
- Sharepoint站点URL:
使用flysystem适配器(推荐方式!)的基本用法
use GWSN\FlysystemSharepoint\FlysystemSharepointAdapter; use GWSN\FlysystemSharepoint\SharepointConnector; use League\Flysystem\Filesystem; $tenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'; $clientId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'; $clientSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $sharepointSite = 'your-path-to-your-site'; $connector = new SharepointConnector($tenantId, $clientId, $clientSecret, $sharepointSite); $prefix = '/test'; // optional $adapter = new FlysystemSharepointAdapter($connector, $prefix); $flysystem = new Filesystem($adapter);
基本需求是能够使用文件夹|驱动器|文件服务
use GWSN\Microsoft\Authentication\AuthenticationService; use GWSN\Microsoft\Drive\DriveService; use GWSN\Microsoft\Drive\FileService; use GWSN\Microsoft\Drive\FolderService; use GWSN\Microsoft\Sharepoint\SharepointService; // Not needed if you use a framework with dependency injection ! require dirname(dirname(__DIR__)) . '/vendor/autoload.php'; $tenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'; $clientId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'; $clientSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $sharepointSite = 'your-path-to-your-site'; // Login into MS oauth and fetch new access token // In real application please save the access token and use it until it expires $authService = new AuthenticationService(); $accessToken = $authService->getAccessToken($tenantId, $clientId, $clientSecret);
用于管理Sharepoint驱动器的用法
包含基本用法并添加以下代码
// Initialize the drive $spDrive = new DriveService($accessToken); $driveId = $spDrive->requestDriveId($siteId); $spDrive->setDriveId($driveId); // Check if Resource exists try { $result = $spDrive->checkResourceExists('/test'); var_dump($result); $result = $spDrive->checkResourceExists('/testDoc.docx'); var_dump($result); } catch (\Exception $exception) { var_dump($exception->getMessage()); } // move file /test.txt to folder /test and rename it to testje.txt $result = $spFileService->moveFile('/test.txt', '/test', 'testje.txt'); // check if it still exists $result = $spDrive->checkResourceExists('/test.txt'); var_dump($result); // check if new file exists $result = $spDrive->checkResourceExists('/test/testje.txt'); var_dump($result);
用于管理Sharepoint文件夹的用法
包含基本用法并添加以下代码
try { // Initialize the drive $spDrive = new DriveService($accessToken); $driveId = $spDrive->requestDriveId($siteId); $spDrive->setDriveId($driveId); // Create the folderService $spFolderService = new FolderService($accessToken, $driveId); // Get files from sharepoint folder $listRootDirResult = $spFolderService->requestFolderItems('/'); // Check if Folder exists $spFolderService->checkFolderExists('/test'); // Get files from sharepoint sub folder $listRootDirResult = $spFolderService->requestFolderItems('/test'); // Get Folder from sharepoint $spFolderService->createFolderRecursive('/dummy/test'); // Delete Folder from sharepoint we just created $spFolderService->deleteFolder('/dummy/test'); $spFolderService->deleteFolder('/dummy'); // Check if Folder exists while its a file try { $result = $spFolderService->checkFolderExists('/testDoc.docx'); var_dump($result); } catch (\Exception $exception) { var_dump($exception->getMessage()); } } catch (\Exception $exception) { var_dump($exception->getMessage()); }
Sharepoint驱动器中的文件用法
包含基本用法并添加以下代码
// FileService $spFileService = new FileService($accessToken, $driveId); // write file to directory $result = $spFileService->writeFile('/test.txt', 'testContent'); var_dump(isset($result['id'])); // read file from directory $content = $spFileService->readFile('/test.txt'); var_dump(($content === 'testContent')); // write file to directory $result = $spFileService->writeFile('/test/docje.txt', 'testContent'); var_dump(isset($result['id'])); // read file from directory $content = $spFileService->readFile('/test/docje.txt'); var_dump(($content === 'testContent')); // move file $result = $spFileService->moveFile('/test.txt', '/test', 'testje.txt'); $result = $spDrive->checkResourceExists('/test.txt'); var_dump($result); $result = $spDrive->checkResourceExists('/test/testje.txt'); var_dump($result); // copy file $result = $spFileService->copyFile('/test/testje.txt', '/', 'toBeDeleted.txt'); var_dump($result); // copy dir $result = $spFileService->copyFile('/test', '/test2'); var_dump($result); // delete file from directory $content = $spFileService->deleteFile('/test/testje.txt'); var_dump($content); $content = $spFileService->deleteFile('/test/docje.txt'); var_dump($content); $content = $spFileService->deleteFile('/toBeDeleted.txt'); var_dump($content); $content = $spFileService->deleteFile('/test.txt'); var_dump($content);
测试
$ composer run-script test
安全
如果您发现任何与安全相关的问题,请通过电子邮件info@gwsn.nl报告,而不是使用问题跟踪器。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。