gwsn / sharepoint-sdk

使用PHP连接到Sharepoint驱动器

1.2.0 2023-10-05 22:03 UTC

This package is auto-updated.

Last update: 2024-09-06 00:15:37 UTC


README

Sharepoint SDK,用于将Sharepoint用作文件存储。

有关Flysystem适配器(Symfony和Laravel)的信息,请参阅flysystem软件包:gwsn/flysystem-sharepoint-adapter

安装

您可以通过composer安装此软件包

composer require gwsn/sharepoint-sdk

首次配置以开始使用

您需要在Azure上为新的应用程序请求新的clientId和clientSecret。

  1. 前往 Azure门户 https://portal.azure.com

  2. 前往 Azure Active Directory

  3. 前往 应用程序注册

  4. 点击 新建注册 并按照向导操作。
    (给它起一个名字,比如我的名字是 'gwsn-sharepoint-connector',并决定支持的帐户,单租户应该足够,但这取决于您的组织)

  5. 当应用程序创建后,请记下以下详细信息

  6. '应用程序(客户端)id',这将成为您的 $clientId

  7. '目录(租户)id',这将成为您的 $tenantId

  8. 然后我们进入菜单到 API权限 以设置所需的权限

  9. 点击 添加权限 并添加以下权限
    Microsoft Graph

    • Files.ReadWrite.All
    • Sites.ReadWrite.All
    • User.Read
  10. 点击 为...公司...授予管理员同意

  11. 进入菜单到 证书与密钥

  12. 点击 新建客户端密钥

  13. 给它一个描述和过期日期,值将是您的 $clientSecret

  14. 最后一个参数将是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'

使用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)。有关更多信息,请参阅许可文件