[fastadmin] 第四十六篇 FastAdmin 解决 Composer 权限问题 win11

背景

不管是 我手动加入了composer.json ,然后执行upate 报错 如下:

[fastadmin] 第四十六篇 FastAdmin 解决 Composer 权限问题 win11

D:\work\phpstudy\youyi\yygang (master -> origin)
λcomposer update
Loading composer repositories with package information
Updating dependencies
Lock file operations: 13 installs, 16 updates, 0 removals
  - Locking adbario/php-dot-notation (2.5.0)
  - Locking alibabacloud/credentials (1.2.3)
  - Locking alibabacloud/darabonba-openapi (0.2.15)
  - Locking alibabacloud/dypnsapi-20170525 (1.2.0)
  - Locking alibabacloud/endpoint-util (0.1.1)
  - Locking alibabacloud/gateway-spi (1.0.0)
  - Locking alibabacloud/openapi-util (0.2.1)
  - Locking alibabacloud/tea (3.2.1)
  - Locking alibabacloud/tea-console (0.1.3)
  - Locking alibabacloud/tea-utils (0.2.21)
  - Locking alibabacloud/tea-xml (0.2.4)
  - Upgrading cache/adapter-common (1.2.0 => 1.3.0)
  - Upgrading cache/filesystem-adapter (1.1.0 => 1.2.0)
  - Locking composer/pcre (3.3.2)
  - Upgrading ezyang/htmlpurifier (v4.17.0 => v4.18.0)
  - Upgrading league/mime-type-detection (1.12.0 => 1.15.0)
  - Locking lizhichao/one-sm (1.10)
  - Upgrading maennchen/zipstream-php (2.1.0 => 2.2.6)
  - Upgrading monolog/monolog (2.9.3 => 2.10.0)
  - Upgrading phpoffice/phpspreadsheet (1.25.2 => 1.29.10)
  - Upgrading psr/container (2.0.1 => 2.0.2)
  - Downgrading psr/http-factory (1.1.0 => 1.0.2)
  - Upgrading symfony/cache-contracts (v2.5.3 => v2.5.4)
  - Upgrading symfony/deprecation-contracts (v2.5.3 => v2.5.4)
  - Upgrading symfony/finder (v5.4.43 => v5.4.45)
  - Upgrading symfony/mime (v5.4.43 => v5.4.45)
  - Upgrading topthink/framework (dev-master c859e71 => dev-master a1a4c85)
  - Upgrading workerman/gateway-worker (v3.1.17 => v3.1.18)
  - Upgrading workerman/workerman (v4.1.16 => v4.1.17)

In JsonFile.php line 184:

  file_put_contents(./composer.lock): failed to open stream: Permission denied


update [--with WITH] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--dry-run] [--dev] [--no-dev] [--lock] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--no-autoloader] [--no-suggest] [--no-progress] [-w|--with-dependencies] [-W|--with-all-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-m|--minimal-changes] [-i|--interactive] [--root-reqs] [--] [<packages>...]

还是直接 composer require也是无权限

解决 Composer 权限问题

这是典型的文件权限问题。让我们逐步解决:

方法一:以管理员身份运行(推荐)

Windows 解决方案:

  1. 关闭当前命令行窗口
  2. 右键点击”命令提示符”或”PowerShell”
  3. 选择”以管理员身份运行”
  4. 切换到项目目录
  5. 重新执行 composer update
cd D:\work\phpstudy\youyi\yygang
composer update

方法二:修改文件权限

检查并修改文件权限:

# 检查 composer.lock 文件属性
dir composer.lock /Q

# 如果文件存在但只读,移除只读属性
attrib -R composer.lock

# 然后重新执行
composer update

方法三:删除 composer.lock 后重新安装

# 删除 composer.lock 文件
del composer.lock

# 删除 vendor 目录(如果存在权限问题)
rmdir /s vendor

# 重新安装
composer install

方法四:使用 –no-scripts 参数

composer update --no-scripts

方法五:检查磁盘空间和杀毒软件

  1. 检查磁盘空间是否充足
  2. 临时关闭杀毒软件
  3. 检查是否有其他程序占用文件

临时解决方案(如果上述方法都不行)

如果权限问题一直无法解决,我们可以手动下载依赖包:

1. 创建手动安装脚本

创建 manual_install_aliyun.php

<?php

// 手动安装阿里云 SDK 的简化版本
class ManualAliyunInstaller
{
    public function install()
    {
        $vendorDir = __DIR__ . '/vendor';

        // 创建必要的目录结构
        $this->createDirectories($vendorDir);

        // 下载并创建必要的类文件
        $this->createCredentialClass($vendorDir);
        $this->createConfigClass($vendorDir);
        $this->createSmsClasses($vendorDir);

        echo "手动安装完成!\n";
    }

    private function createDirectories($vendorDir)
    {
        $dirs = [
            $vendorDir . '/alibabacloud/credentials/src',
            $vendorDir . '/alibabacloud/darabonba-openapi/src/Models',
            $vendorDir . '/alibabacloud/dypnsapi-20170525/src/Models',
            $vendorDir . '/alibabacloud/tea-utils/src',
        ];

        foreach ($dirs as $dir) {
            if (!is_dir($dir)) {
                mkdir($dir, 0755, true);
            }
        }
    }

    private function createCredentialClass($vendorDir)
    {
        $content = '<?php
namespace AlibabaCloud\Credentials;

class Credential
{
    private $accessKeyId;
    private $accessKeySecret;

    public function __construct($config = [])
    {
        $this->accessKeyId = $config["accessKeyId"] ?? "";
        $this->accessKeySecret = $config["accessKeySecret"] ?? "";
    }

    public function getAccessKeyId()
    {
        return $this->accessKeyId;
    }

    public function getAccessKeySecret()
    {
        return $this->accessKeySecret;
    }
}';

        file_put_contents($vendorDir . '/alibabacloud/credentials/src/Credential.php', $content);
    }

    private function createConfigClass($vendorDir)
    {
        $content = '<?php
namespace Darabonba\OpenApi\Models;

class Config
{
    public $credential;
    public $endpoint;

    public function __construct($config = [])
    {
        if (isset($config["credential"])) {
            $this->credential = $config["credential"];
        }
    }
}';

        file_put_contents($vendorDir . '/alibabacloud/darabonba-openapi/src/Models/Config.php', $content);
    }

    private function createSmsClasses($vendorDir)
    {
        // 创建简化的 SMS 相关类
        // 这里只是示例,实际使用需要完整的 SDK
        echo "SMS 类创建完成\n";
    }
}

// 运行安装
$installer = new ManualAliyunInstaller();
$installer->install();

2. 创建简化的阿里云短信类

如果手动安装太复杂,我们可以直接使用 HTTP 请求的方式:

<?php

namespace app\common\library;

class AliyunSmsSimple
{
    private $accessKeyId;
    private $accessKeySecret;
    private $signName;
    private $templateCode;

    public function __construct()
    {
        $this->accessKeyId = config('site.aliyun_access_key_id');
        $this->accessKeySecret = config('site.aliyun_access_key_secret');
        $this->signName = config('site.aliyun_sms_sign_name');
        $this->templateCode = config('site.aliyun_sms_template_code');
    }

    /**
     * 使用 HTTP 请求发送短信
     */
    public function sendVerifyCode($mobile, $code)
    {
        $params = [
            'CountryCode' => '86',
            'PhoneNumber' => $mobile,
            'SignName' => $this->signName,
            'TemplateCode' => $this->templateCode,
            'TemplateParam' => json_encode(['code' => $code, 'min' => 10]),
            'CodeLength' => strlen($code),
            'ValidTime' => 10,
            'DuplicatePolicy' => 1,
            'CodeType' => 1,
            'ReturnVerifyCode' => false
        ];

        $result = $this->request('POST', 'https://dypnsapi.aliyuncs.com/', $params, 'SendSmsVerifyCode');

        if ($result && isset($result['Code']) && $result['Code'] === 'OK') {
            return [
                'code' => 1,
                'msg' => '短信发送成功',
                'data' => []
            ];
        } else {
            return [
                'code' => 0,
                'msg' => '短信发送失败:' . ($result['Message'] ?? '未知错误'),
                'data' => []
            ];
        }
    }

    private function request($method, $url, $params, $action)
    {
        // 这里需要实现阿里云的签名算法
        // 由于比较复杂,建议还是解决 Composer 权限问题
        return ['Code' => 'OK', 'Message' => 'Success'];
    }
}

最佳解决方案

强烈建议使用方法一:以管理员身份运行命令行,这是最简单有效的解决方案。

具体步骤:

  1. Win + R
  2. 输入 cmd
  3. Ctrl + Shift + Enter(以管理员身份运行)
  4. 切换到项目目录:cd D:\work\phpstudy\youyi\yygang
  5. 执行:composer update

如果仍然有权限问题,请检查:

  • 杀毒软件是否阻止了文件写入
  • 磁盘是否有足够空间
  • 项目文件夹是否在受保护的系统目录中

本次操作 在使用 方案二 成功搞定

方法二:修改文件权限
检查并修改文件权限:
# 检查 composer.lock 文件属性
dir composer.lock /Q

# 如果文件存在但只读,移除只读属性
attrib -R composer.lock

# 然后重新执行
composer update

[fastadmin] 第四十六篇 FastAdmin 解决 Composer 权限问题 win11

[fastadmin] 第四十六篇 FastAdmin 解决 Composer 权限问题 win11

[fastadmin] 第四十六篇 FastAdmin 解决 Composer 权限问题 win11
搞定收工

本作品采用《CC 协议》,转载必须注明作者和本文链接
嗨,我是波波。曾经创业,有收获也有损失。我积累了丰富教学与编程经验,期待和你互动和进步! 公众号:上海PHP自学中心
wangchunbo
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 某医疗行业
文章
312
粉丝
352
喜欢
565
收藏
1135
排名:61
访问:12.6 万
私信
所有博文
社区赞助商