require_once(PHPExcel/Classes/PHPExcel.php): 无法打开流

require_once(PHPExcel/Classes/PHPExcel.php): failed to open stream

我正在尝试将 PHPExcel 包含到 Silverstripe 3 站点以导出 excel 工作表。现在我只是想测试,但在尝试时出现此错误:

[Warning] require_once(/sitename/mysite/AddOns/PHPExcel/Classes/PHPExcel.php): failed to open stream: No such file or directory

我知道这个文件存在,因为我自己复制了它并一遍又一遍地重新检查了路径。所以我决定 "well check if the file exists" 使用此代码:

    if(!file_exists(Director::baseURL().'mysite/AddOns/PHPExcel/Classes/PHPExcel.php')) {
        echo 'sdf';exit;
}

根据错误,路径是正确的(也就是保存的地方),但是-文件不存在。我也以同样的方式要求文件,没有运气

require_once Director::baseURL().'mysite/AddOns/PHPExcel/Classes/PHPExcel.php';

我已经尝试了一切——检查文件权限,使用 ../../ 引用父文件夹,像 AddOns/PHPExcel 一样直接调用它,将它移动到这个新的 AddOns 文件夹(首先尝试将 PHPExcel 类 在根上,然后发现 Silverstripe 没有读取它:) )

我知道我做错了什么,但对于我的生活我看不到什么。请帮忙

谢谢

正如所指出的,Director::baseURL() 将 return URL 而不是文件路径。

而是需要相对于 file 网络根目录,如下所示:

require_once(BASE_PATH . '/AddOns/PHPExcel/Classes/PHPExcel.php');

正如 Dan 和 Barry 在其他答案中所指出的,最好使用 composer 进行依赖管理。

BASE_PATH 是访问网站根文件夹的最佳方式。

require_once(BASE_PATH . '/AddOns/PHPExcel/Classes/PHPExcel.php');

此外,如果您不使用 Composer,这只是一个问题,要以正确的方式解决此问题,您应该 use composer

您应该考虑使用 composer 来包含 PHPExcel class,这将避免手动 require 和 class 的需要,并将帮助您进行依赖项管理。

composer require phpoffice/phpexcel