【发布时间】:2014-12-29 00:00:54
【问题描述】:
我的网页允许用户拖放上传输入文件,进行一些操作和转换,然后将输出文件保存到 Web 服务器上可公开访问的位置。最后,向用户提供生成文件的链接。
下面的代码(缩写)在我的 WAMP 服务器上运行良好,但是当我将代码上传到生产主机时,它不再运行。 WAMP Apache 版本是 2.4.9,WAMP PHP 版本是 5.5.12。生产服务器是 Apache 2.2 版和 PHP 5.3.27 版。我意识到版本不一样 - 这可能是问题吗?我宁愿不要弄乱生产服务器的版本,但如果需要的话我会这样做。
我已经检查了我的脚本尝试写入的文件夹的 Windows 权限,并且作为故障排除的一部分,我已将它们打开以供所有人完全控制。 (这实际上是一个内部网络服务器,所以我不是很担心)
编辑/更新:根据@Itay Moav -Malimovka 的建议,我包含了萤火虫输出。我是 firebug 新手,所以我不完全确定显示结果的最佳方式(显然有大量数据)。
dragover 和 drop 事件似乎运行良好。与 fileSetup 事件、send 和 inputSetup 事件一样(尽管深入挖掘,有很多隐藏的红色和“未定义”值)。然后,POST 事件在 filehandler.php 中有 500 内部服务器错误。
- 响应标头
- 连接关闭
- 内容长度 0
- 内容类型 text/html
- 日期 2014 年 11 月 2 日星期日 03:05:06 GMT
- 服务器 Apache/2.2.22 (Win32) PHP/5.3.27
- 请求标头
- 接受 text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
- 接受编码 gzip,放气
- 接受语言 en-US,en;q=0.5
- 内容长度h 34124
- 内容类型 application/octet-stream
- 主机 domain.com
- 推荐人 http://domain.com/path/index.html
- 用户代理 Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0
- X 文件日期 2014 年 9 月 23 日星期二 22:10:03 GMT
- X-文件名 smallInputFile.rdb
- X 文件大小 34124
- X-Requested-With FileDrop-XHR-FileAPI
我不确定还要检查什么。你接下来会检查什么?我相信它与服务器设置有关,而不是代码(因为它在默认 WAMP 服务器上工作),但为了完整起见,我在下面包含(缩写)相关代码:
(index.html) -- 请注意,警报在生产服务器上时甚至不会触发。
<html>
<head>
<script type="text/javascript" src="includes/ddup/filedrop.js"></script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<fieldset id="zone">
<legend>Drop a file inside…</legend>
<p>Or click here to <em>Browse</em>..</p>
</fieldset>
<span id="status"></span>
<script type="text/javascript">
var zone = new FileDrop('zone', options);
// Do something when a user chooses or drops a file:
zone.event('send', function (files) {
// Depending on browser support files (FileList) might contain multiple items.
files.each(function (file) {
// React on successful AJAX upload:
var p = document.createElement('p');
zone.el.appendChild(p);
file.event('done', function (xhr) {
// 'this' here points to fd.File instance that has triggered the event.
alert('Done uploading ' + this.name);
document.getElementById('status').innerHTML=xhr.responseText;
alert('Done uploading ' + this.name + ', response:\n\n' + xhr.responseText);
});
file.event('progress', function (sent, total) {
p.textContent = 'Uploaded ' + Math.round(sent / total * 100) + '%...';
})
// Send the file:
file.sendTo('fileHandler.php');
});
});
</script>
</body>
</html>
(fileHandler.php)
<?php
/** Error reporting */
error_reporting(E_ALL);
// If an error causes output to be generated before headers are sent - catch it.
ob_start();
/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');
if (!empty($_FILES['fd-file']) and is_uploaded_file($_FILES['fd-file']['tmp_name'])) {
// Regular multipart/form-data upload.
$filename = $_FILES['fd-file']['name'];
$filedata = file_get_contents($_FILES['fd-file']['tmp_name']);
} else {
// Raw POST data.
$filename = urldecode(@$_SERVER['HTTP_X_FILE_NAME']);
$filecontents = file_get_contents("php://input");
$filedata = explode("\n",$filecontents);
}
//**** do stuff to file ****//
// Save Excel 2007 file
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$fileBase = explode(".",$filename);
$outFilename = $fileBase[0] . date('His') . ".xlsx";
$url = "xlsxFiles/$outFilename";
$objWriter->save($url);
echo "<br><table class=\"rulesTable\" id=\"linkRow\"><tr><td><span id=\"finalLink\">Link to generated XLS file: <a href=\"$url\">$outFilename</a></span></td></tr></table>";
?>
【问题讨论】:
-
你能启动你的萤火虫,看看控制台标签里有什么吗?
-
将尝试 firebug(我一直在使用 Chrome 工具)并报告。弗雷德,我试过去掉分号没有效果......