【发布时间】: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