【问题标题】:wamp server and production acting differentlywamp 服务器和生产行为不同
【发布时间】: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&hellip;</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 工具)并报告。弗雷德,我试过去掉分号没有效果......

标签: php apache wamp


【解决方案1】:

您的生产服务器是否运行*NIX OS

如果是,这条线很可能会引起它的抱怨

ini_set('include_path', ini_get('include_path').';../Classes/');

在 *NIX 中,路径分隔符是冒号 : 而不是分号 ;

有一个名为 PATH_SEPERATOR 的预定义常量允许您与操作系统无关,因此请尝试使用此方法

set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');

【讨论】:

  • 生产服务器正在运行 Windows 2012。不过,关于 PATH_SEPARATOR 的信息很好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2013-11-19
  • 1970-01-01
相关资源
最近更新 更多