繁体   English   中英

Composer供应商/文件夹FTP上传

[英]Composer vendor/ folder FTP upload

我有一个本地项目,其中装有Composer库。 我将此项目上传到我的FTP并收到错误,并与某些库中找不到的类有关。

我可以简单地将vendor/文件夹复制到FTP还是错过了什么?

收到错误: Fatal error: Class 'AAA\\Core\\Tools' not found in /home/aaa/public_html/api.php on line 11

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 ,则可以使用Composer中的classmap功能:

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

dbcore.php:

<?php

namespace AAA\DB;

class DBCore
{
}

您可以照常使用它:

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

首先,我将检查composer生成的autoloader文件,以确保路径在Linux服务器上有效。

另一个简单但常见的问题是,在Windows上,文件夹和文件名不区分大小写,但在Linux上却是如此。 仔细检查文件夹和文件的大小写是否正确,好像找不到正确的大小写。

我建议您探索如何让作曲家在您的托管环境上工作,而不是尝试通过FTP上传(我认为这不是很难的,否则会很棘手)。

Composer完全基于PHP,因此应在PHP运行的任何地方运行。

如果您没有命令行访问权限,则可以使用PHPShell之类的东西 ,它为您提供了一个基于PHP的命令行,然后可以在其上运行Composer。

请参阅此其他答案,以获取有关如何使用PHPShell的一些提示。

另一种选择是使用经典的PHP方法,通过在浏览器中访问它来构建一个实际运行的PHP包装器。 有关如何执行此操作的一些提示,请参见此其他答案

最重要的是,您应该真正着眼于在服务器上运行Composer,而不是尝试以其他方式陷入僵局。

在服务器上完成composer进程后,必须删除创建的PHPShell或composer包装器,以免留下任何安全漏洞。

您是否告诉作曲家“ AAA \\ Core \\ Tools”类在哪里?

您甚至可以通过在composer.json中添加自动加载字段>将自己的代码添加到自动加载器中。

{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}

不能以这种方式使用Composer(即,您不应该手动将供应商目录从一种环境转移到另一种环境)。

在向项目添加依赖项时,composer.json文件将包含这些依赖项。 在本地主机上运行composer install或update时,它将“锁定”项目的那些依赖项的当前版本,并将其存储在composer.lock文件中。 您应该将composer.json和composer.lock文件从开发环境传输到生产环境,然后在生产环境中运行composer install作为部署过程的一部分。 在生产环境上运行composer install时,Composer将查看composer.lock文件,并将指定版本的依赖项安装在生产环境的供应商目录中。

您可能需要查看有关基本用法( https://getcomposer.org/doc/01-basic-usage.md )和命令行选项( https://getcomposer.org/doc/03-cli.md )的作曲者文档。 ) 更多细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM