CodeIgniter上传失败没有错误日志没有错误报告

时间:2016-11-21 09:45:59

标签: php codeigniter

我正在尝试使用CodeIgniter上传文件。这个服务器似乎有些奇怪,因为代码在其他服务器上工作正常。我试图调试此问题,但没有报告任何错误。

具体来说,代码:

if (!$this->upload->do_upload()) {
    var_dump($this->upload->display_errors());
    exit();
}

我打开了error_reporting(E_ALL)和display_errors,没有显示任何内容。只是一个空白页面。我知道这些设置有效,因为如果我发出语法错误,则会显示错误。当我上传文件时,它只是一个完整的空白页面。它100%确定上传文件。

我甚至打开了CodeIgniter日志,错误报告级别设置为4,但根本没有写入日志文件。我已将其设置为默认日志文件。

最后,我检查了文件_uploads的PHPinfo()设置,一切似乎都没问题。他们被设置为开启,没有疯狂的上传限制或类似的东西。

我可以使用fopen()创建文件,并将文件写入服务器。

关于我可以做什么来尝试和调试的任何想法?我没有服务器访问权限(它适用于客户端)所以我试图依赖于使用SFTP和错误输出。但我一无所获。

我设法获取日志文件输出:

INFO - 2016-11-28 01:24:07 --> Session: Class initialized using 'files' driver.
INFO - 2016-11-28 01:24:07 --> Model Class Initialized
INFO - 2016-11-28 01:24:07 --> Controller Class Initialized
INFO - 2016-11-28 01:24:07 --> Model Class Initialized
INFO - 2016-11-28 01:24:07 --> Model Class Initialized
INFO - 2016-11-28 01:24:07 --> Helper loaded: email_helper
INFO - 2016-11-28 01:24:07 --> Upload Class Initialized

所以看起来脚本停在Upload Class Initialized部分。

1 个答案:

答案 0 :(得分:2)

鉴于this comment

  

其CodeIgniter 3.1.2(最新),它们运行PHP 5.4。在我假设的ini设置中,主机启用了Error_reporting和display_errors。他们的主人是Dreamhost。

我可以肯定地说99%您没有启用Fileinfo extension,因此会受到"bug" #4887 in CodeIgniter的影响。

Fileinfo扩展名被描述为"enabled by default as of PHP 5.3.0" on php.net,这就是3.1.1版本中从function_exists('finfo_file')删除CI_Upload检查的原因。但事实证明一些发行版和/或托管服务提供商明确禁用了扩展,显然你受此影响,导致以下错误:

  

PHP致命错误:在第1225行的/path/to/system/libraries/Upload.php中调用未定义的函数finfo_file()

您没有看到错误,因为您没有为CodeIgniter应用程序实际启用display_errors,并且可能没有在日志中查找错误...
默认情况下,框架本身始终启用error_reporting,如果您将display_errors设置为'测试'},则会禁用ENVIRONMENT。或者'生产'在 index.php 文件中 - 我猜你已将它设置为' production'。因此,在php.ini中启用这些设置之一并不重要,因为CodeIgniter会覆盖它们。

该问题会影响CodeIgniter 3.1.1和3.1.2版。要在3.1.3发布之前解决它,您可以启用Fileinfo扩展或应用此补丁:https://github.com/bcit-ci/CodeIgniter/commit/7cc08237c2a15daf283e2bc61501bdc086740311