生产系统的差异

时间:2017-07-31 14:05:16

标签: zend-framework spreadsheet zend-framework3 phpspreadsheet

我有一个带控制器的ZF3项目,它打开excel文件并将它们与将要打开的模板进行比较。

在我的开发笔记本(xampp)上,一切正常,在我的生产系统(ubuntu)上,phpspreadsheet会导致错误(我认为是错误)。

这是我代码中的一个片段:

$fileName="./public/files/" . $fileName;        //.\ neu
            echo $fileName;
            $template= new Spreadsheet();
            $importdcl= new Spreadsheet();
            $template= \PhpOffice\PhpSpreadsheet\IOFactory::load('./public/files/Template_DCL_final.xlsx');
            $importdcl= \PhpOffice\PhpSpreadsheet\IOFactory::load( $fileName);
            echo "filename geladen";

我已经将文件夹放在非相对路径中,因为basePath()不起作用,它不会给出任何结果。

echo语句只是因为服务器日志不会给出任何错误。在我的开发系统上,我在生产系统上得到echo文本,错误似乎出现在load语句中。

第一个问题:我怎么能在这里使用相对路径?

第二个问题:我怎样才能得到一个关于电子表格类错误的想法?

这是作曲家加载的:

"phpoffice/phpspreadsheet" : "dev-develop",

这是一个问题吗,因为它有这个开发版本?在这一点上,我很困惑,因为我玩了文件的部分,我在文件夹中手动更改了权限,我检查了服务器日志,现在我不知道任何想法。

此处文件夹中的权限:

enter image description here

任何有用的建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

回答(希望)第一个问题:如果您的应用程序基于ZendSkeletonApplication,那么您可以使用相对于您的应用程序根目录的路径(来自index.php):

/**
 * This makes our life easier when dealing with paths. Everything is relative
 * to the application root now.
 */
chdir(dirname(__DIR__));

因此,如果您的数据文件位于<application root>/public/files,那么您应该能够从控制器/服务/等中读取它们。使用public/files/<file name>路径。你可以用例如测试它。 file_exists function

我无法回答你的第二个问题,但这里有一些建议(好的,问题......):

  • 您的(生产)服务器响应的状态代码是什么?
  • 您是否拥有服务器帐户(www-data)对数据文件的读/写权限?
  • phpspreadsheet是否依赖于任何PHP扩展?你在开发机器和服务器上都安装了它们吗?
  • 服务器上安装了哪些PHP版本?您或phpspreadsheet是否使用该版本可能不具备的任何功能?
  • 尝试不是通过Apache运行项目,而是使用PHP的内置服务器(但长期执行)并尝试重现该问题。