gpt4 book ai didi

php - Composer 供应商/文件夹 FTP 上传

转载 作者:行者123 更新时间:2023-12-03 23:31:18 25 4
gpt4 key购买 nike

我有一个加载了 Composer 库的本地项目。我将这个项目上传到我的 FTP 并收到错误,连接到一些库中未找到的类。

我能否简单地将 vendor/ 文件夹复制到 FTP 或我遗漏了什么?

收到错误: fatal error :在第 11 行的/home/aaa/public_html/api.php 中找不到类“AAA\Core\Tools”

api.php:

<?php
use AAA\Core\Tools;

require_once("./vendor/autoload.php");
require_once("./api/" . Tools::getFieldValue('controller') . ".php");

localhost 上一切正常!

最佳答案

Linux 有一个区分大小写的文件系统。这意味着文件 Alex.txtalex.txt 在 Windows 中是相同的,但在 Linux 中则不同。实际上在 Linux 上两者可以愉快地生活在同一个目录中:

$ tree .                                                    
.
├── alex.txt
└── Alex.txt

0 directories, 2 files

考虑到这一点,我会尝试仔细检查您在命名空间中使用的路径实际上是否与在文件系统级别找到的路径相同。 (即:AAA 目录只有大写字母;Core 目录大写,Tools.php 文件大写)


如果你想保留现有的文件系统布局,你可以使用 PSR-4 显式告诉 Composer 如何将命名空间映射到文件系统:

  1. 更改 composer.json 中的 autoload 部分:

    {
    "autoload": {
    "psr-4": {"AAA\\DB\\": "db/"}
    }
    }

    db/ 是文件系统的实际路径

  2. 更新自动加载器:

    $ composer dump-autoload

这将处理目录名称,但不适用于文件。这意味着 db/ 中的任何文件都必须完全按照命名空间中的名称命名(对于 use AAA\DB\DBCore 的用法,文件必须db/DBCore.php)。

如果你的文件名为 dbcore.php 并且你想在你的命名空间中引用它作为 DBCore,你可以使用 classmap来自 Composer 的功能:

"autoload": {
"classmap": [
"db/dbcore.php"
]
}

数据库核心.php:

<?php

namespace AAA\DB;

class DBCore
{
}

你可以像往常一样使用它:

<?php
require_once("./vendor/autoload.php");
$dbCore = new \AAA\DB\DBCore();

关于php - Composer 供应商/文件夹 FTP 上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31882671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com