第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當(dāng)使用PHP發(fā)送文件時,可恢復(fù)下載嗎?

當(dāng)使用PHP發(fā)送文件時,可恢復(fù)下載嗎?

PHP
回首憶惘然 2019-07-11 13:41:41
當(dāng)使用PHP發(fā)送文件時,可恢復(fù)下載嗎?我們使用PHP腳本進行文件下載,因為我們不想公開可下載文件的絕對路徑:header("Content-Type: $ctype");header("Content-Length: " . filesize($file)); header("Content-Disposition: attachment; filename=\"$fileName\""); readfile($file);不幸的是,我們注意到通過這個腳本進行的下載不能被最終用戶恢復(fù)。有任何方法來支持這種基于PHP的解決方案的可恢復(fù)下載嗎?
查看完整描述

3 回答

?
拉丁的傳說

TA貢獻1789條經(jīng)驗 獲得超8個贊

您需要做的第一件事是發(fā)送Accept-Ranges: bytes所有響應(yīng)中的標(biāo)頭,以告訴客戶端您支持部分內(nèi)容。然后,如果請求具有Range: bytes=x-y接收到報頭(與xy)解析客戶端請求的范圍,像往常一樣打開文件,查找x前面的字節(jié)并發(fā)送下一個字節(jié)y - x字節(jié)。還將響應(yīng)設(shè)置為HTTP/1.0 206 Partial Content.

在沒有測試過任何東西的情況下,這可以或多或少地發(fā)揮作用:

$filesize = filesize($file);$offset = 0;$length = $filesize;if ( isset($_SERVER['HTTP_RANGE']) ) {
    // if the HTTP_RANGE header is set we're dealing with partial content

    $partialContent = true;

    // find the requested range
    // this might be too simplistic, apparently the client can request
    // multiple ranges, which can become pretty complex, so ignore it for now
    preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;} else {
    $partialContent = false;}$file = fopen($file, 'r');
    // seek to the requested offset, this is 0 if it's not a partial content requestfseek($file, $offset);
    $data = fread($file, $length);fclose($file);if ( $partialContent ) {
    // output the right headers for partial content

    header('HTTP/1.1 206 Partial Content');

    header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);}
    // output the regular HTTP headersheader('Content-Type: ' . $ctype);
    header('Content-Length: ' . $filesize);header('Content-Disposition: attachment; filename="' .
     $fileName . '"');header('Accept-Ranges: bytes');// don't forget to send the data tooprint($data);

我可能錯過了一些顯而易見的東西,而且我肯定忽略了一些潛在的錯誤來源,但這應(yīng)該是一個開始。

有一個部分內(nèi)容的描述我在文檔頁面上找到了一些關(guān)于部分內(nèi)容的信息弗瑞德.


查看完整回答
反對 回復(fù) 2019-07-11
?
白衣非少年

TA貢獻1155條經(jīng)驗 獲得超0個贊

是。支持旁路??匆?/trans>RFC 2616第14.35節(jié) .

這基本上意味著你應(yīng)該閱讀Range標(biāo)頭,然后從指定的偏移量開始為文件提供服務(wù)。

這意味著您不能使用readfile(),因為這為整個文件服務(wù)。相反,使用fopen()先,然后搜尋()到正確的位置,然后使用福斯特魯()提供文件。


查看完整回答
反對 回復(fù) 2019-07-11
  • 3 回答
  • 0 關(guān)注
  • 471 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號