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

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

Jun 13, 2016 am 10:50 AM
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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
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)

鴻蒙原生應用隨機詩詞 鴻蒙原生應用隨機詩詞 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.length()函數取得檔案的大小 使用java的File.length()函數取得檔案的大小 Jul 24, 2023 am 08:36 AM

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

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.renameTo()函數重命名文件 使用java的File.renameTo()函數重命名文件 Jul 25, 2023 pm 03:45 PM

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

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文件,開發者能夠更好地利用系統資源,提高程式碼的可讀性和可維護性。

使用java的File.getParentFile()函數取得檔案的父目錄 使用java的File.getParentFile()函數取得檔案的父目錄 Jul 27, 2023 am 11:45 AM

使用java的File.getParentFile()函數取得檔案的父目錄在Java程式設計中,我們經常需要操作檔案和資料夾。當我們需要取得檔案的父目錄時,可以使用Java提供的File.getParentFile()函數來完成。本文將介紹如何使用這個函數並提供程式碼範例。 Java中的File類別是用於操作檔案和資料夾的主要類別。它提供了許多方法來取得和操作文件的屬性

See all articles