You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 对象,解决方法:

  1. 引入Guzzle命名空间(或使用完整类名)
  2. 提前实例化 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:55:55