Apache mod_xsendfile 在 Windows/WAMP 上运行 - 无法正常工作

Apache mod_xsendfile 在 Windows/WAMP 上运行 - 无法正常工作

好的 - 我有一个安装了 mod_xsendfile 的 WAMP 设置 - 它被加载到modulesWAMP 下的 Apache 文件夹中的文件夹中,并且已添加相应的行httpd.conf,并且当我通过 WAMP 图标检查可用模块时,该模块会显示在列表中。

但是,我无论如何都无法让它真正发挥作用。我在开发的网页中使用它来将缩略图/图像/文件发送到图库,这在我第一次开发的 MAMP 服务器上运行良好。我使用 PHP 作为后端,并在此处发布相关代码 - 如果您需要其他任何东西,我很乐意提供。

第一的:httpd.conf

LoadModule xsendfile_module modules/mod_xsendfile.so
<IfModule mod_xsendfile.so>
  <Files *.php>
    XSendFile On
    SetEnv MOD_X_SENDFILE_ENABLED 1
  </Files>
</IfModule>

我不太确定这一点,但我也尝试过这个,但没有成功:

# Enable mod_xsendfile
#permitted values on/off
XSendFile on
# XSendFilePath allow you to add additional paths to some
# kind of white list. All files within these paths are
#allowed to get served through mod_xsendfile
XSendFilePath "c:\wamp\www\uploadr\users\"

以下是通过 X-Sendfile 返回文件的 PHP 文件:

<?php
require_once('conf/config.php');
if (!session_id()) { session_start(); };

$username = (($isloggedin && isset($_GET['user'])) ? $_GET['user'].'/' : ((!$isloggedin) ? 'public/' : $username));
if (!empty($_SERVER['QUERY_STRING']) && $username != 'public/') {
    $potential_public_file = explode('__',explode('=',$_SERVER['QUERY_STRING'])[1])[0];
    for ($i = 0; $i < count($user_array); $i++) {
        $exploded_user_array = explode('//',$user_array[$i]);
        if (($potential_public_file == trim($exploded_user_array[0]))) {
            $username = 'public/';
        }
    }
}
    if ($debug == true) {
        logThis('showfile_processing','Username is set to '.$username.''."\r\n",FILE_APPEND);
    }
    if (isset($_GET['imgfile'])) {
        header('Content-type: image/jpeg');
        if (isset($_GET['thumbs'])) {
            header('X-Sendfile: '.$_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.'pictures/thumbs/'.$_GET['imgfile']);
        } else {
            header('X-Sendfile: '.$_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.'pictures/'.$_GET['imgfile'].'');
        }
    } elseif (isset($_GET['docfile'])) {
        header('Content-Disposition: attachment; filename='.$_GET['docfile'].'');
        header('X-Sendfile: '.$_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.'documents/'.$_GET['docfile'].'');
    } elseif (isset($_GET['vidfile'])) {
        if (isset($_GET['thumbs'])) {
            if ($debug == true) {
                logThis('showfile_processing','Thumbs loaded '.$_GET['vidfile']."\r\n",FILE_APPEND);    
            }
            header('Content-type: image/jpeg');
            header('X-Sendfile: '.$_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.'video/thumbs/'.$_GET['vidfile']);
        } else {
            if ($debug == true) {
                logThis('showfile_processing','Video returned '.$_GET['vidfile']."\r\n",FILE_APPEND);
            }
            header('Content-Disposition: attachment; filename='.$_GET['vidfile'].'');
            header('X-Sendfile: '.$_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.'video/'.$_GET['vidfile'].'');
        }
    }
    exit;
?>

我从 gallery.php 文件中调用这些文件,如下所示:showfile.php?imgfile=<name_of_file>- 它基本上读取一个目录,并通过 X-Sendfile 提取文件,以向用户掩盖文件在服务器上的位置。

(这个问题最初是在 Server Fault 上提出的,但他们建议我将其移到这里)

更新 我尝试直接转到 showfile.php 并在那里加载图像,然后出现新错误: The image “http://uploadr.loc/showfile?imgfile=05_196132738.jpg” cannot be displayed because it contains errors.as an alt-text。无论我尝试加载哪个图像,它都会返回此错误。在我的 MAMP 设置上测试了完全相同的图片,它们工作正常。所以我想知道 Windows 设置或文件路径是否存在特定问题导致了问题?

答案1

哇,我花了很长时间才发现这一点,但我在这里找到了答案:https://stackoverflow.com/questions/7133819/x-sendfile-on-apache2-php-serving-0b-file-no-errors-though

我必须将其设置XSendFilePathC:/- 然后它神奇地起作用了。这就是 Windows 为您准备的...

相关内容