1. 程式人生 > 其它 >PHP傳輸檔案流及檔案流的儲存

PHP傳輸檔案流及檔案流的儲存

什麼是檔案流

在HTTP資料傳送過程中,傳輸一方直接以二進位制流方式傳送檔案內容,這樣就形成了一個檔案流;

檔案流的接收通常涉及到預定義變數函式 $HTTP_RAW_POST_DATA 和 file_get_contents

我在哪些方面用到了檔案流

  1. 在開發微信公眾平臺系統的時候用到過,主要是資料的接收
  2. 在和APP做對接開發的時候用到過,主要是檔案資料的接收和儲存

如何接收流檔案並儲存

/*
 * PHP 模擬傳送流檔案
 * #param String $receive_url 接收流檔案請求的網址
 * #param String $send_file_name  傳送的檔名,帶路徑
 * @return boolean
 
*/ function send_stream_file($receive_url, $send_file_name) { if (!file_exists($send_file_name)) { return false; } $options = [ // 設定檔案流的引數 'http' => [ 'method' => 'POST', // POST方式傳遞 'header' => 'content-type:application/x-www-form-urlencoded', //
POST 方式傳遞資料的標準編碼格式 'content' => file_get_contents($send_file_name), // 將檔案寫入到字串中 ], ]; $context = stream_context_create($options); // 將檔案轉換成檔案流 $response = file_get_contents($receive_url, false, $context); // 傳送請求 if ($response !== false) {
return true; } return false; }

使用PHP模擬傳送流檔案內容

/***
 * PHP 接收流檔案
 * @param String $$receive_file_name 接收後儲存的檔名
 * @return boolean
 */
function receive_stream_file($receive_file_name)
{
    $stream_data = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';      //  使用 $GLOBALS['HTTP_RAW_POST_DATA'] 接收資料
    if (empty($stream_data)) {      //  不存在資料則使用 file_get_contents 方式來接收
        $stream_data = file_get_contents('php://input');
    }
 
    $result = false;
    if ($stream_data != '') {
        $result = file_put_contents($receive_file_name, $stream_data, true);        //  儲存檔案
    }
 
    return $result;
}

PHP通過檔案流複製檔案

/*
 * 複製檔案流到檔案中
 * @param String $src 源
 * @param String $dest 新資源
 */
function copy_stream($src, $dest)
{
    $fsrc = fopen($src, 'r');
    $fdest = fopen($dest, 'w+');
    $len = stream_copy_to_stream($fsrc, $fdest);    //  流的複製
    fclose($fsrc);
    fclose($fdest);
 
    return $len;
}

PHP流的相關函式