2015-03-10 4 views
0

Я пытаюсь предоставить загрузку с X-Sendfile на моем сервере nginx. У меня самая актуальная версия nginx и php5.nginx php x-sendfile загрузить 0kb

Файл с запрошенным файлом существует, но он просто загружает пустой файл 0kb без содержимого, но с правильным именем файла. Я не делаю никакого вывода до начала загрузки.

В начале у меня был выход после «загрузки», и все, что я выводил, было доступно для чтения в файле.

Я заглянул в документ nginx http://wiki.nginx.org/XSendfile и установил папку, содержащую файл загрузки, в «внутренний».

Вот мой код:

if(file_exists($filepath)) 
{ 
    header('X-Sendfile: ' . $filepath); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename="' . $filename . '"'); 
} 

PS: Там нет никаких сообщений об ошибках в "/var/log/nginx/error.log".

Edit:

if(file_exists($filepath)) 
{ 
    header('Cache-Control: public, must-revalidate'); 
    header('Pragma: no-cache'); 
    header('Content-Type: application\zip'); 
    header('Content-Length: ' .(string)(filesize($filepath))); 
    header('Content-Disposition: attachment; filename='.$filename.''); 
    header('Content-Transfer-Encoding: binary'); 

    header('X-Accel-Redirect: /dl/' . $filename); 
} 

Edit 2:

nginx.cong:

user www-data; 
worker_processes 4; 
pid /run/nginx.pid; 

events { 

     worker_connections 768; 
} 

http { 

     gzip on; 
     gzip_types  text/plain application/xml; 
     gzip_disable  "MSIE [1-6]\."; 

     sendfile on; 
     tcp_nopush on; 
     tcp_nodelay on; 
     keepalive_timeout 65; 
     types_hash_max_size 2048; 

     include /etc/nginx/mime.types; 
     default_type application/octet-stream; 

     server { 
       listen   127.0.0.1; 
       listen   80; 
       server_name  XXX.XXX.XXX.XXX; 
       root   /home/uploader/; 

       location/{ 
         try_files $uri $uri/ /index.html; 
       } 

       location /Download/ { 

         internal; 
         alias /dl/; 
       } 

       location ~ .php$ { 


         fastcgi_pass 127.0.0.1:9000; 
         fastcgi_index index.php; 
         #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
         include   fastcgi.conf; 
       } 
     } 
} 
+0

Вы должны использовать 'X-Accel-Redirect: URI'. И обратите внимание, что nginx ожидает URI, а не путь к файлу. –

+0

Я отредактировал мое сообщение, как мой код выглядит сейчас, но он все еще не работает, мои файлы сейчас 1kb. с содержанием: \t \t – RaverTiny

+0

И что в Nginx конфигурации? –

ответ

0

Вы имеете смутное URI и диска путь. Вы конфиг должен быть

location ^~ /dl/ { 
    internal; 
    alias /real/path/to/Download/; 
} 

Я добавил модификатор ^~ для предотвращения случайного выполнения PHP файлов в /dl/.

+0

Большое спасибо :) – RaverTiny

 Смежные вопросы

  • Нет связанных вопросов^_^