【问题标题】:WAMP or Codeigniter serious upload bug - cannot upload filesWAMP 或 Codeigniter 严重的上传错误 - 无法上传文件
【发布时间】:2014-07-16 08:22:25
【问题描述】:

试图实现本应非常简单的事情,我很生气。首先,我有以下上传表单,它在 OS X + XAMPP 下可以完美运行。将此脚本移动到 WAMP + Windows Server 时,我在文件上传过程中遇到严重问题。我正在使用 Codeigniter。

public function importExcel () {        
    $config['upload_path'] = 'upload/';
    $config['allowed_types'] = 'xls';
    $config['max_size'] = '0';
    $config['overwrite'] = FALSE;
    $this->load->library('upload', $config);

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

    $upload_data = $this->upload->data(); 
    $data['filename'] = $upload_data['file_name'];
}

这是我的简单功能。上传文件夹位于 www/mywebsite/ 下。 Codeigniter的config.php文件配置正确。

当我尝试上传 xls 文件时,服务器崩溃(中断其连接)。这意味着我收到 this page 错误:ERR_CONNECTION_RESET,而不是向我显示上传错误。

这是我能说的:

  • 文件未上传,在上传文件夹中找不到。
  • 文件上传实际上开始了,我在浏览器窗口下方的栏中看到它正在加载文件。当谈到 100% 百分比时,我得到了上面链接的页面。

这是我尝试过的:

  • 将上传文件夹更改为 /upload/、./upload/ 等。当我尝试执行 ../upload/ 时,我收到错误并且页面没有崩溃。它说他找不到正确的文件夹。这意味着在上传过程中找到了该文件夹,而问题出在其他地方。
  • 将 xls MIME 类型添加到 .htaccess

这是我的实际 .htaccess 文件,以备不时之需。

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteBase /websitefolder/

我再说一遍,同样的代码在具有相同目录结构的 OS X + XAMPP 下运行良好。


编辑:忘了说我尝试上传任何类型和任何大小的 xls,甚至很少。这可能与上传限制无关,我已经提出了变量。


编辑 2:我的 PHP 错误日志完全为空。这些是我尝试上传时添加到我的 Apace 错误日志中的行。

[Tue May 27 14:22:54 2014] [notice] Parent: child process exited with status 255 -- Restarting.
[Tue May 27 14:22:56 2014] [notice] Apache/2.2.21 (Win64) mod_ssl/2.2.21 OpenSSL/1.0.0d PHP/5.3.8 configured -- resuming normal operations
[Tue May 27 14:22:56 2014] [notice] Server built: Sep 24 2011 19:57:51
[Tue May 27 14:22:56 2014] [notice] Parent: Created child process 4736
[Tue May 27 14:22:56 2014] [warn] Init: Session Cache is not configured [hint: SSLSessionCache]
[Tue May 27 14:22:56 2014] [notice] Child 4736: Child process is running
[Tue May 27 14:22:56 2014] [notice] Child 4736: Acquired the start mutex.
[Tue May 27 14:22:56 2014] [notice] Child 4736: Starting 64 worker threads.
[Tue May 27 14:22:56 2014] [notice] Child 4736: Starting thread to listen on port 80.
[Tue May 27 14:22:56 2014] [notice] Child 4736: Starting thread to listen on port 80.

编辑 3:使用 w3schools sample code 测试了非 Codeigniter 文件上传。我明白了:

Upload: test.php
Type: application/octet-stream
Size: 26.90234375 kB
Stored in: C:\Wamp\tmp\phpAAB5.tmp

但是当我进入 C:\Wamp\tmp 时,我看不到该文件。但是,还有其他相同类型的临时文件。通过使用保存上传的文件下的代码,上传工作正常,我可以找到我上传的文件。


我很绝望,因为我需要这个给客户。有什么帮助吗?谢谢。

【问题讨论】:

  • 我知道这很基本,但是您检查过文件上传文件夹中的权限吗?你检查过 WAMPP 的 Apache 和 PHP 日志吗?那里可能有一些有用的信息。
  • 同意 Christian -> 很久以前在 windows box 上使用 blueimp 上传器时遇到过这个问题,我发现我必须将权限设置为 777 -> 这很可怕 -> 但是一旦上传文件就可以将权限更改为更可接受的权限,从那时起一切正常。
  • 还要检查临时目录是否可写 -> 我似乎记得这也是一个问题。
  • 我已经检查了日志,我现在将更新主帖。 PHP 错误日志为空。阿帕奇实际上充满了东西。我不能在 Windows 下进入 777,但系统、管理员和用户设置了完全访问权限。
  • @GrahamRitchie 你的意思是 Codeigniter 制作的临时目录吗?据我所知,没有创建任何临时文件..

标签: php .htaccess codeigniter file-upload upload


【解决方案1】:

重写基础/

如果它托管在根目录上,则添加目录名称,例如

RewriteBase /testfolder/

【讨论】:

  • 请尝试使用此 $config['upload_path'] = './uploads/'; 更改您的上传路径变量;
【解决方案2】:
$config['upload_path'] = FCPATH . 'upload/';

路径需要设置为绝对路径。

RewriteEngine on
RewriteBase /websitefolder/

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

你的 .htaccess 应该是这样的

别忘了删除 config.php 中的 index.php

$config['base_url'] = '';

【讨论】:

  • 您的网站是否在 www 的子文件夹下?在这种情况下,您需要在 RewriteBase /website/ 上将 htacces 更改为此 RewriteEngine
  • 是的,它位于子文件夹中,但在 XAMPP 下可以正常工作。为什么要改变?
  • 很遗憾我没有这样做
【解决方案3】:

问题可能与 CodeIgniter 库有关。使用官方文档提供的相同代码,我仍然无法上传 xls 文档,但我能够通过使用相应的标准 PHP 上传表单来实现这一点。

Codeigniter 无法上传文件并在执行此检查时:

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

Web 应用程序崩溃而不是返回错误。如果我禁用此检查,我不会收到任何错误,但显然文件没有上传。

我会将这个 Stackoverflow 讨论报告给 Codeigniter 社区,看看他们是否能证实我刚刚写的内容。

【讨论】:

  • 1) 唷 - 快乐的客户 ;-) 和 2) 感谢您发布更新。
  • 我能做到的最低限度:)
猜你喜欢
  • 2011-07-09
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 2016-05-19
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多