Apache mod_xsendfile работает на Windows / WAMP - работает не так, как должно

644
junkfoodjunkie

Хорошо, у меня есть 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-text. Независимо от того, какое изображение я пытаюсь загрузить, оно возвращает эту ошибку. Протестировал точно такие же картинки на моей MAMP-настройке, они работают просто отлично. Так что мне интересно, есть ли что-то конкретное либо с установкой Windows, либо путем к файлу, который создает проблему?

-1

1 ответ на вопрос

0
junkfoodjunkie

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

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

Похожие вопросы