【问题标题】:CodeIgniter upload fail no error logs no error reportingCodeIgniter 上传失败 无错误日志 无错误报告
【发布时间】:2016-11-21 09:45:58
【问题描述】:

我正在尝试使用 CodeIgniter 上传文件。该服务器似乎发生了一些奇怪的事情,因为该代码在其他服务器上运行良好。我正在尝试调试该问题,但未报告任何错误。

具体来说,代码:

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

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

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

最后,我检查了 file_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 部分停止。

【问题讨论】:

  • $this->upload->do_upload() 返回什么?
  • 它不返回任何东西。我试过: var_dump($this->upload->do_upload());退出();
  • 你能复制粘贴你的表格和它的属性吗?还要确保要上传文件,您将获得$_FILES 中的文件。先检查一下。
  • 我正在使用一个简单的表单,默认 和多类型的表单类型。此表单在普通服务器上工作正常并正确上传。只是这台服务器导致我出现问题,但由于 0 条错误消息,我似乎无法调试它。
  • 这是哪个 CodeIgniter 和 PHP 版本?以及您是如何启用error_reportingdisplay_errors 的?

标签: php codeigniter


【解决方案1】:

给定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 中从CI_Upload 中删除了function_exists('finfo_file') 检查。但事实证明,一些发行版和/或托管服务提供商明确禁用了扩展,显然你受到了影响,导致以下错误:

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

您没有看到错误,因为您实际上没有为 CodeIgniter 应用程序启用 display_errors,并且可能没有在日志中查找它...
框架本身总是默认启用error_reporting,如果您在其index.php中将ENVIRONMENT 设置为“测试”或“生产”,则禁用display_errors > 文件 - 我猜你已将其设置为“生产”。因此,在 php.ini 中启用这些设置都没有关系,因为 CodeIgniter 会覆盖它们。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多