首頁 後端開發 php教程 有没有思忖过用PHP来做多线程操作

有没有思忖过用PHP来做多线程操作

Jun 13, 2016 pm 01:09 PM
file header quot range Seek

有没有考虑过用PHP来做多线程操作~
最近完善下载类中一个远程下载文件 考虑是不是可以分别分段读取文件内容 最后组合。经测试可行哦~ 这是我测试的本地文件~
我想的是咋个可以最简单封装针对任意本地文件 or远程文件 进行操作! 请看:
//PHP分段读取文件 这里我只分了两段 实际上可以通过文件大小 按照预定段大小 进行分段..
$file = dirname(__FILE__).'/bullyframework_zend.7z';

echo filesize($file);

$handle = fopen($file, "rb");

$contents = fread($handle, ceil(filesize($file)/2)); //分两次读取文件组合

$now_tell = ftell($handle); //获取当前指针

$end = fread($handle, filesize($file) - $now_tell); //从当前指针处读取剩余文件

fclose($handle);

file_put_contents('test.7z', $contents.$end); //写入文件 验证文件是否完整

echo "
";

echo filesize('test.7z');
?>

------解决方案--------------------
分块下载需要双方都支持“断点续传”

一般下载工具都支持,所以你需要做的是服务器端。php实现的断点续传服务大致如下

PHP code
    //   Begin writing headers 
    header("Cache-Control:"); 
    header("Cache-Control: public"); 
    header("Content-Type: $ctype"); 

    $filespaces = str_replace("_", " ", $filename); 
    // if your filename contains underscores, replace them with spaces 

    $header='Content-Disposition: attachment; filename='.$filespaces; 
    header($header); 
    header("Accept-Ranges: bytes"); 
     
    $size = filesize($file);    
    //   check if http_range is sent by browser (or download manager)    
    if(isset($_SERVER['HTTP_RANGE'])) { 
        // if yes, download missing part       

        $seek_range = substr($_SERVER['HTTP_RANGE'] , 6); 
        $range = explode( '-', $seek_range); 
         if($range[0] > 0) { $seek_start = intval($range[0]); } 
         if($range[1] > 0) { $seek_end  =  intval($range[1]); } 
             
        header("HTTP/1.1 206 Partial Content"); 
        header("Content-Length: " . ($seek_end - $seek_start + 1)); 
        header("Content-Range: bytes $seek_start-$seek_end/$size"); 
     } else { 
        header("Content-Range: bytes 0-$seek_end/$size"); 
        header("Content-Length: $size"); 
     }    
    //open the file 
    $fp = fopen("$file","rb"); 
     
    //seek to start of missing part    
    fseek($fp,$seek_start); 
    
    //start buffered download 
    $n = 0;
    while(!feof($fp)) {        
        //reset time limit for big files 
        echo fread($fp,1024*$speed); 
     } 
    fclose($fp); 
     exit; <div class="clear">
                 
              
              
        
            </div>
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
Seek Thermal 發布 Nano 200 和 Nano 300 熱成像相機 - 方便發現超頻 PC 中的冷卻問題 Seek Thermal 發布 Nano 200 和 Nano 300 熱成像相機 - 方便發現超頻 PC 中的冷卻問題 Aug 12, 2024 pm 09:50 PM

Seek Thermal發布了適用於Android和iOS手機的改良Nano 200和Nano 300熱像儀。紅外線相機可以看到熱量,並幫助 PC 改裝者在超頻 CPU 和 GPU 時快速檢測冷卻和發熱問題。一個傳統

php blob怎麼轉file php blob怎麼轉file Mar 16, 2023 am 10:47 AM

php blob轉file的方法:1.建立一個php範例檔;2、透過「function blobToFile(blob) {return new File([blob], 'screenshot.png', { type: 'image/jpeg' })} 」方法實作Blob轉File即可。

使用java的File.length()函數取得檔案的大小 使用java的File.length()函數取得檔案的大小 Jul 24, 2023 am 08:36 AM

使用Java的File.length()函數取得檔案的大小檔案大小是在處理檔案作業時很常見的一個需求,Java提供了一個很方便的方法來取得檔案的大小,即使用File類別的length()方法。本文將介紹如何使用此方法來取得檔案的大小,並給出對應的程式碼範例。首先,我們需要建立一個File物件來表示我們想要取得大小的檔案。以下是建立File物件的方法:Filef

鴻蒙原生應用隨機詩詞 鴻蒙原生應用隨機詩詞 Feb 19, 2024 pm 01:36 PM

想了解更多關於開源的內容,請造訪:51CTO鴻蒙開發者社群https://ost.51cto.com運行環境DAYU200:4.0.10.16SDK:4.0.10.15IDE:4.0.600一、建立應用程式點擊File- >newFile->CreateProgect。選擇模版:【OpenHarmony】EmptyAbility:填寫項目名,shici,應用包名com.nut.shici,應用儲存位置XXX(不要有中文,特殊字符,空格)。 CompileSDK10,Model:Stage。 Device

使用java的File.renameTo()函數重命名文件 使用java的File.renameTo()函數重命名文件 Jul 25, 2023 pm 03:45 PM

使用Java的File.renameTo()函數重命名檔案在Java程式設計中,我們經常需要對檔案進行重命名的操作。 Java提供了File類別來處理檔案操作,其中的renameTo()函數可以方便地重新命名檔案。本文將介紹如何使用Java的File.renameTo()函數來重新命名文件,並提供對應的程式碼範例。 File.renameTo()函數是File類別的一個方法,

使用java的File.getParent()函數取得檔案的父路徑 使用java的File.getParent()函數取得檔案的父路徑 Jul 24, 2023 pm 01:40 PM

使用java的File.getParent()函數取得檔案的父路徑在Java程式設計中,我們經常需要操作檔案和資料夾。有時候,我們需要取得一個檔案的父路徑,也就是該檔案所在資料夾的路徑。 Java的File類別提供了getParent()方法用來取得檔案或資料夾的父路徑。 File類別是Java對檔案和資料夾的抽象表示,它提供了一系列操作檔案和資料夾的方法。其中,get

SpringBoot怎麼透過Feign呼叫傳遞Header中參數 SpringBoot怎麼透過Feign呼叫傳遞Header中參數 May 16, 2023 pm 08:38 PM

【SpringBoot】透過Feign呼叫傳遞Header中參數如何透過Feign傳遞Header參數問題描述我們在SpringCloud中使用Feign請求另一個服務的Api介面時,有將Header中參數傳遞下去的需求,如果不做特殊處理,就會將Header中的參數遺失。解決方案方案一:透過@RequestHeader(name="headerName")來傳遞例如:Feign定義如下@FeignClient(name="service-name")pub

linux的header是什麼意思 linux的header是什麼意思 Jul 18, 2023 pm 03:34 PM

linux的header是指在文件或資料流中的開頭部分,用於包含關於內容的元數據,透過正確地編寫和使用Header文件,開發者能夠更好地利用系統資源,提高程式碼的可讀性和可維護性。

See all articles