PHP上传文件至OneDrive遇问题:Guzzle未定义及Composer集成疑问
PHP 上传文件至 OneDrive 问题解决方案
一、Composer Vendor 集成步骤
- 执行
composer require microsoft/microsoft-graph后,项目根目录会生成vendor文件夹,包含自动加载逻辑 - 在PHP脚本最开头引入自动加载文件,路径根据脚本位置调整:
require_once __DIR__ . '/../vendor/autoload.php';
比如脚本在 src/test.php,../vendor 指向项目根目录的 vendor 文件夹。
二、解决「Undefined variable $guzzle」错误
错误原因是直接调用了未实例化的 $guzzle 对象,解决方法:
- 引入Guzzle命名空间(或使用完整类名)
- 提前实例化
GuzzleHttp\Client对象
三、修正后的完整可运行脚本
<?php // 引入Composer自动加载文件,路径按需调整 require_once __DIR__ . '/../vendor/autoload.php'; use GuzzleHttp\Client; use Microsoft\Graph\Graph; // 替换为你的Azure应用信息和账号信息 $tenantId = '你的租户ID'; $clientId = '你的客户端ID'; $clientSecret = '你的客户端密钥'; $username = '你的微软账号邮箱'; $password = '你的账号密码'; // 实例化Guzzle客户端 $guzzle = new Client(); // 获取访问令牌 $url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token'; $response = $guzzle->post($url, [ 'form_params' => [ 'client_id' => $clientId, 'client_secret' => $clientSecret, 'resource' => 'https://graph.microsoft.com/', 'grant_type' => 'password', 'username' => $username, 'password' => $password ], ]); $user_token = json_decode($response->getBody()->getContents()); $user_accessToken = $user_token->access_token; // 初始化Graph客户端 $graph = new Graph(); $graph->setAccessToken($user_accessToken); // 示例:上传本地文件到OneDrive根目录 $localFilePath = './example.txt'; // 替换为你的本地文件路径 $fileName = basename($localFilePath); // 执行上传请求 $graph->createRequest("PUT", "/me/drive/root:/$fileName:/content") ->attachBody(fopen($localFilePath, 'r')) ->execute(); echo "文件上传成功!"; ?>
四、关键注意事项
- 确认Azure应用已配置足够权限(如
Files.ReadWrite),且已获得管理员同意 - 密码授权模式仅适合测试环境,生产环境建议使用授权码模式(更安全,避免明文存储账号密码)
- 检查PHP环境是否启用curl扩展,Guzzle依赖该扩展才能正常发送请求
内容的提问来源于stack exchange,提问作者bia
相关产品推荐
相关产品推荐

