学习如何正确导入 PHP 库
P粉214089349
P粉214089349 2023-09-03 17:07:32
[PHP讨论组]

我正在使用两个库:

  • phpdotenv
  • spatie/async

这是我正在执行的内容:

<?php
require_once "/var/local/entrop/vendor/autoload.php";
include_once '/var/local/entrop/inc/Functions.php';
include_once '/var/local/entrop/model/Contract.php';

use Spatie\Async\Pool;

try {
    $aConn = Functions::getConnection();
    $contracts = Contract::getContracts();

    $pool = Pool::create();
    
    foreach ($contracts as $contract){
        $pool->add(function () use ($aConn, $contract) {
            include_once '/var/local/entrop/config/DataConfig.php';
            $next_contract = Contract::getNextContract($aConn);
        })
        ->then(function ($output) {
        })
        ->catch(function ($exception) {
            Functions::write_log($exception);
        })
        ->timeout(function () {
            Functions::write_log("timeout");
        });
    }

    await($pool);

    $aConn->close();
}
catch (Exception $e){
    Functions::write_log($e);
}

这是DataConfig的定义:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL); 

require_once "/var/local/entrop/vendor/autoload.php";

$dotenv = Dotenv\Dotenv::createImmutable("/var/local/entrop/");
$dotenv->load();

define('DB_HOST', $_ENV['DB_HOST']);
define('DB_USER', $_ENV['DB_USER']);
define('DB_PASS', $_ENV['DB_PASS']);
define('DB_DBMS', $_ENV['DB_DBMS']);

class DataConfig {
    static $db_host = DB_HOST;
    static $db_user = DB_USER;
    static $db_pass = DB_PASS;
    static $db_dbms = DB_DBMS;
}

这是我的composer.json文件:

{
    "require": {
        "vlucas/phpdotenv": "^5.2",
        "spatie/async": "^1.5"
    },
    "autoload": {
        "classmap": [
            "/var/local/entrop/model/Contract.php"
        ]
    }
}

现在,我遇到的错误是:

[2022-08-04 10:38:38]local.INFO:空间\异步\输出\并行错误: PHP 注意:未定义索引:DB_HOST in /var/local/entropia/config/DataConfigEntropia.php 第 12 行 PHP 注意:未定义索引:DB_USER in /var/local/entropia/config/DataConfigEntropia.php 第 13 行 PHP 注意:未定义索引:DB_PASS in /var/local/entropia/config/DataConfigEntropia.php 第 14 行 PHP 注意:未定义索引:DB_DBMS in /var/local/entropia/config/DataConfigEntropia.php 第 15 行

我尝试的方法是自动加载我的DataConfig文件,并将其包含在回调函数中。但没有起作用。我应该怎么做?

P粉214089349
P粉214089349

全部回复(1)
P粉448130258

phpdotenv在错误报告方面表现不佳(并且我个人认为它也没有正确依赖标准和最佳实践,可能会导致许多副作用,包括你遇到的注意事项 - 只是我相当确定他们的作者认为这是一个功能而不是错误,因此我不得不承认我不会对他们进行评判,归根结底,用户需要自己努力并了解他们在做什么)。

对于你的特定问题,如果你使用一个库,请了解如何配置它。甚至我之前的注释可能会提示你它可能不适合,实际上 - 这就是phpdotenv的亮点 - 它正在做大部分的繁重工作,你可以控制大部分部分 --- 只是不能控制文件格式。

你的问题不是文件格式。所以正确配置你的应用程序以从任何环境中获取参数并处理错误情况(例如,在开始时对意外值进行抛出)。这也应该揭示出你在使用这个或那个库时犯了什么错误,并在你的代码中解决这个问题。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号