-1

Хорошо, у меня есть WAMP-установка с установленным mod_xsendfile - он загружается в папку modules в папке Apache под WAMP, и соответствующие строки добавляются в 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\"

Вот PHP-файл, который возвращает файлы через X-Sendfile:

<?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, чтобы маскировать размещение файлов на сервере от пользователя.

(Этот вопрос был впервые задан при сбое сервера, но они предложили перенести его сюда)

ОБНОВЛЕНИЕ Я попытался перейти непосредственно к showfile.php и загрузить туда изображение, и я получил новую ошибку:The image “http://uploadr.loc/showfile?imgfile=05_196132738.jpg” cannot be displayed because it contains errors. как alt текст. Независимо от того, какое изображение я пытаюсь загрузить, оно возвращает эту ошибку. Протестировал точно такие же картинки на моей MAMP-настройке, они работают просто отлично. Так что мне интересно, есть ли что-то конкретное либо с установкой Windows, либо путем к файлу, который создает проблему?

1 ответ1

0

И, вау, мне потребовалось много времени, чтобы выяснить это, но я нашел ответ здесь: https://stackoverflow.com/questions/7133819/x-sendfile-on-apache2-php-serving-0b-file -no-ошибка, хотя

Мне пришлось установить XSendFilePath на C:/ - и он волшебным образом работает. Это Windows для вас ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .