2012-01-03 13 views
1

私たちのサーバーからかなり大きいファイルを提供しているので、XSendfileの使用を強く推奨しました。サーバーはCpanelを実行しています。これまでは、一部のブラウザではうまくいかなかったストレートフォースダウンロードスクリプトを使用していました。 XSendfileで一石で2羽の鳥を殺すことを願っています。XSendfileが動作しない - PHP、Apache、Cpanel

OK、私たちのホストは、私たちのサーバー上でXsendfileを有効にしました。

$file = "/home/deli/central/testfile.doc"; 
header("X-Sendfile: $file"); 
header("Content-type: application/octet-stream"); 
header('Content-Disposition: attachment; filename="' . basename($file) . '"'); 
exit; 

これを実行すると、ダウンロードプロンプトが表示されます。しかし、送信されるファイルは常に0kbです。

少しの調査では、apache設定ファイルまたはhtaccessファイルのいろいろなものを設定する必要があるようです。また、それをApacheの設定に追加するのは良い考えではないと言われました。そうしないと、アップデートで上書きされる可能性があります。私はむしろhtaccess aywayでそれを行うでしょう。なぜなら、私はApacheの設定に直接アクセスすることができず、むしろhtaccessを使ってそれを行うという制御を提供しているからです。

私はそれがうまく動作することができます。

だから、私はhtaccessをファイルに以下を追加しました:

XSendFile XSendFilePath /ホーム/デリ/中央 XSendFileAllowAbove上

オン(中央のファイルディレクトリへのスクリプトからの相対パス../../deli/central)

これらの行をhtaccessに追加してpublic_htmlディレクトリ(テストスクリプトと同じディレクトリ)に入れると、テストスクリプトを実行すると500エラー。エラーログを簡単に見には示しています

/home/north/public_html/.htaccess:XSendFilePathここでは使用できません

誰もが私が間違っているのかもしれないものへと私を啓発でしたか?

ps - 私は、Apacheの設定でそれを行う方がはるかに効率的だと読んだので、サーバはすべてのhtaccessファイルをクロールして読み込む必要はありません。これが本当かどうかわからない。

ヘルプは非常に高く評価され、これは事業上の致命のビットです:)私は言及を忘れてしまった

PS - 私はスクリプトにまっすぐ力のダウンロードに入れた場合、同じ$ファイルを使用してパスは、ファイルが正常にダウンロードします。その道は正しいと思われるでしょう。

+0

あなたは '/ home/deli/...'からファイルを提供しようとしていますが、あなたの '.htaccess'ファイルは'/home/north/... 'の別のパスにあります。 (Apacheプロセスを実行している)正しいユーザーが '/ home/deli'パスにアクセスできることは確かですか? – leftclickben

答えて

1

0バイトを取得すると、出力の圧縮が必要になる可能性があります。here for moreを参照してください。 ここでXSendFilePathは許可されていません。 .htaccessの構文上の問題です。適切な場所にあることを確認するには、手動でチェックしてください。per the documentation

+0

こんにちはお返事ありがとうございます。 XSendFile On XSendFileAllowAbove On - 彼らはこれをやったと言いますが、何を試してもまだ0バイトのファイルを受け取ります。また、これらの2行をルート.htaccessファイルに追加しようとします。このファイルでは、私は、次のしている - オプション-Indexes のErrorDocument 404 /index.htmlが のErrorDocument 403 /index.htmlが XSendFile –

+0

..psで XSendFileAllowAboveでも、私は.htaccessの中XSendFilePathを使用して試してみましたが、また、この私に500エラーを与える。 –

+0

こんにちは - これ以上の助けが必要なくなりました。ご協力いただきありがとうございます。 –

3

私はこれが誰かを助けることを願っています...

私はこの種の問題を抱えていた。いつでも、何でも - 私は解決> 0バイト

これはディレクトリセクションにVirtualHostセクション

<VirtualHost *:80> 

    DocumentRoot "/var/{{ app_name }}/web" 
    ServerName {{ app_name }}.dev 

    # here was the problem 
    XSendFile On 
    XSendFilePath /var/1000italy/data/offline 

    <Directory "/var/{{ app_name }}/web"> 
     allow from all 
     Options -Indexes 
     AllowOverride All 
    </Directory> 

    ErrorLog /var/log/apache2/{{ app_name }}_error.log 
    CustomLog /var/log/apache2/{{ app_name }}_access.log combined 

</VirtualHost> 

から

XSendFile On 
XSendFilePath /var/1000italy/data/offline 

を動かします

<VirtualHost *:80> 

    DocumentRoot "/var/{{ app_name }}/web" 
    ServerName {{ app_name }}.dev 

    <Directory "/var/{{ app_name }}/web"> 
     allow from all 
     Options -Indexes 
     AllowOverride All 

     # HERE EVERYTHING WORKS FINE 
     XSendFile On 
     XSendFilePath /var/1000italy/data/offline 
    </Directory> 

    ErrorLog /var/log/apache2/{{ app_name }}_error.log 
    CustomLog /var/log/apache2/{{ app_name }}_access.log combined 

</VirtualHost> 

Ciao

+1

ディレクトリセクションも私のサーバー上で動作します。ありがとうございました – Sergey

関連する問題