WAMP或Codeigniter严重上传错误 - 无法上传文件

时间:2014-05-27 12:11:35

标签: php .htaccess codeigniter file-upload upload

我正在努力尝试实现一些非常简单的事情。首先,我有以下上传表格,在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时,我看不到该文件。但是还有其他同类临时文件。通过使用保存上传文件下的代码,上传工作正常,我可以找到我上传的文件。


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

3 个答案:

答案 0 :(得分:1)

$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'] = '';

答案 1 :(得分:1)

  

RewriteBase /

如果它托管在root上,则另外明智地添加目录名称,如

  

RewriteBase / testfolder /

答案 2 :(得分:0)

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

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

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

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

我会将此Stackoverflow讨论报告给Codeigniter社区,看看他们是否可以确认我刚写的内容。