1

サーバーから非常に大きなファイルを提供しているため、XSendfile を使用することを強くお勧めします。サーバーは Cpanel を実行しています。以前は、単純な強制ダウンロード スクリプトを使用していましたが、これも一部のブラウザーではうまく機能しませんでした。XSendfile で一石二鳥を狙う。

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 でそれを行いたいと思っています。なぜなら、私は apache の設定に直接アクセスすることができず、htaccess でそれを行うことで提供される制御をしたいからです。

もちろん、それを機能させることができれば。

そこで、htaccess ファイルに以下を追加しました。

XSendFile 上の XSendFilePath /home/deli/central XSendFileAllowAbove オン

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

これらの行を htaccess に追加して public_html ディレクトリ (テスト スクリプトと同じディレクトリ) に配置すると、テスト スクリプトを実行すると 500 エラーが発生します。エラーログを簡単に見ると、次のように表示されます。

/home/north/public_html/.htaccess: ここでは XSendFilePath は許可されていません

私が間違っているかもしれないことについて、誰かが私を啓発してくれますか?

ps - apache config で実行する方がはるかに効率的であるため、サーバーがすべての htaccess ファイルをクロールしてロードする必要がないことを読んだところです。これが本当かどうかはわかりません。

ヘルプは大歓迎です。これはプロジェクトのちょっとしたショーストッパーです:)

ps 言及するのを忘れていました-同じ $file パスを使用して、スクリプトに直接強制ダウンロードを入れると、ファイルは問題なくダウンロードされます。したがって、パスは正しいように見えます。

4

2 に答える 2

3

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

私はこの種の問題を抱えていました:いつでも何でも-> 0バイト

私はこれを動かして解決します

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

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>

ディレクトリセクションへ

<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>

チャオ

于 2014-05-08T16:48:28.317 に答える
1

0 バイトを取得している場合は、出力圧縮を無効にする必要がある可能性があります。詳細については、こちらを参照してくださいXSendFilePath not allowed hereエラーの場合、これは .htaccess の構文の問題です。ドキュメントに従って適切な場所にあることを確認できる場合は、手動で確認してください。

于 2012-01-05T15:29:58.510 に答える