国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 幫助中心 > 正文

Laravel第三方包報(bào)class not found的解決方法

2024-07-09 22:40:58
字體:
供稿:網(wǎng)友

出現(xiàn)的問題

公司開發(fā)使用PHP,技術(shù)框架使用Laravel。最近線上出現(xiàn)一個(gè)問題,就是上線之后,每次都會(huì)出錯(cuò)。查看出錯(cuò)原因,是composer安裝的第三方出現(xiàn)class not found。因?yàn)檫@個(gè)問題,在線下使用Lumen框架的時(shí)候,遇到過,查找問題原因是因?yàn)橐蕾嚨腸omposer包中composer.json中的”autoload”:{“psr-4”:{}}書寫格式問題。解決方法使用命令:composer dump-autoload -o;

雖然知道問題的所在,但是有一個(gè)現(xiàn)象比較費(fèi)解:這個(gè)第三方包已經(jīng)使用很久了,為什么最近才開始報(bào)錯(cuò)呢?下面就開始查找出錯(cuò)原因

解決方案

如果確認(rèn)第三方包已安裝,并且正確使用use引用了,嘗試執(zhí)行composer dump-autoload -o

最終結(jié)果

因?yàn)榭赡芷鶗?huì)比較長,所以這里先說明一下最終問題處理結(jié)果:原因還未準(zhǔn)確定位到,現(xiàn)推測(cè)發(fā)布服務(wù)器環(huán)境問題,但因?yàn)榘l(fā)布服務(wù)器監(jiān)控服務(wù)較多,不允許進(jìn)行測(cè)試,所以具體環(huán)境哪個(gè)配置導(dǎo)致的問題,還沒有定位到。

下面主要介紹問題解決過程:

 1. 查看laravel autoload 2. 查看composer源碼; 3. 重新編譯composer打印日志; 4. 分析composer install過程; 5. 查看php artisan optimize源碼

對(duì)分析查找問題的過程感興趣的同學(xué)可以繼續(xù)往下看。

問題分析及解決過程

1. 查找class not found原因

分析

既然class not found,確認(rèn)composer包已經(jīng)安裝。那問題就確定在autoload過程

查看源碼

首先自動(dòng)加載入口 public/index.php 中

require __DIR__.'/../bootstrap/autoload.php';

然后繼續(xù)進(jìn)入 bootstrap/autoload.php 文件

require __DIR__.'/../vendor/autoload.php';

然后繼續(xù)進(jìn)入 vendor/autoload.php

// require 自動(dòng)加載類require_once __DIR__ . '/composer/autoload_real.php';// 真正返回文件列表的操作return ComposerAutoloaderInit3f39d071b2e74e04102a9c9b6f221123::getLoader();

進(jìn)入getLoader()方法中

public static function getLoader(){ if (null !== self::$loader) { return self::$loader; } // 注冊(cè)自動(dòng)加載方法,用來后面初始化ClassLoader類 spl_autoload_register(array('ComposerAutoloaderInit3f39d071b2e74e04102a9c9b6f221123', 'loadClassLoader'), true, true); // 初始化ClassLoarder self::$loader = $loader = new /Composer/Autoload/ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInit3f39d071b2e74e04102a9c9b6f221123', 'loadClassLoader')); // 這里zend_loader_file_encoded查了一下,解釋為: // Returns TRUE if the current file was encoded with Zend Guard or FALSE otherwise. If FALSE, consider disabling the Guard Loader // 又查了一下Zend Guard,貌似是php代碼加密并提高執(zhí)行效率的,提高有限,比較雞肋 // 打印了一下,發(fā)現(xiàn)不存在這個(gè)方法,即!function_exists('zend_loader_file_encoded')為true $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { // 程序在這里執(zhí)行 // 引用ComposerStaticInit類 require_once __DIR__ . '/autoload_static.php'; // 調(diào)用ComposerStaticInit類中的getInitializer方法 // 主要作用是使用ComposerStaticInit類中的值初始化上面創(chuàng)建的ComposerAutoloader對(duì)象中的prefixLengthsPsr4、prefixDirsPsr4、prefixesPsr0、classMap等值 call_user_func(/Composer/Autoload/ComposerStaticInit3f39d071b2e74e04102a9c9b6f221123::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) {  $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) {  $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) {  $loader->addClassMap($classMap); } } // 重點(diǎn)在這個(gè)方法 $loader->register(true); if ($useStaticLoader) { $includeFiles = Composer/Autoload/ComposerStaticInit3f39d071b2e74e04102a9c9b6f221123::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { composerRequire3f39d071b2e74e04102a9c9b6f221123($fileIdentifier, $file); } return $loader;}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 蚌埠市| 滨海县| 南木林县| 苏州市| 裕民县| 繁昌县| 安化县| 博野县| 广东省| 景谷| 新巴尔虎右旗| 清流县| 阆中市| 广安市| 池州市| 青阳县| 渭源县| 岐山县| 公主岭市| 平泉县| 邻水| 张家港市| 兰西县| 金塔县| 安阳县| 阿克苏市| 玉门市| 漾濞| 白山市| 株洲县| 策勒县| 武山县| 镇原县| 盐源县| 兰考县| 盐源县| 方正县| 祁门县| 南和县| 开江县| 那曲县|