簡體   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