1. 程式人生 > >php檔案上傳與下載的配置

php檔案上傳與下載的配置

php.ini中檔案上傳功能配置選項說明  用文字工具(推薦EditPlus)開啟php.ini 配置檔案,查詢 File Uploads ,在這個區域有以下3個選項:  file_uploads = On  是否允許HTTP檔案上傳。預設值為On允許HTTP檔案上傳,此選項不能設定為Off。  upload_tmp_dir =  檔案上傳的臨時存放目錄。如果沒指定則PHP會使用系統預設的臨時目錄。該選項預設為空,此選項在手動配置PHP執行環境時,也容易遺忘,如果不配置這個選項,檔案上傳功能就無法實現,你必須給這個選項賦值,比如upload_tmp_dir = "d:/fileuploadtmp" ,代表在D盤目錄下有一個fileuploadtmp目錄,並且給這目錄讀寫許可權。

 upload_max_filesize = 2M  上傳檔案的最大尺寸。這個選項預設值為2M,即檔案上傳的大小為2M,如果你想上傳一個50M的檔案,你必須設定 upload_max_filesize = 50M。 但是僅設定upload_max_filesize = 50M 還是無法實現大檔案的上傳功能,我們還必須修改php.ini檔案中的 post_max_size 選項。  繼續在 php.ini 中查詢 Data Handling ,在這個區域有1個選項:  post_max_size = 8M  指通過表單POST給PHP的所能接收的最大值,包括表單裡的所有值。預設為8M。如果POST資料超出限制,那麼$_POST和$_FILES將會為空。
 要上傳大檔案,你必須設定該選項值大於upload_max_filesize選項的值,例如你設定了upload_max_filesize = 50M ,這裡可以把post_max_size = 100M。 另外如果啟用了記憶體限制,那麼該值應當小於memory_limit 選項的值。

下載功能

1.如果是其他檔案,直接在a標籤的href屬性中填寫路徑,可以下載。

2.如果是一個圖片檔案,那麼直接在a標籤的href屬性中,填寫路徑是不能進行下載。

那麼需要進行以下操作步驟:

        PHP檔案下載固定4句話:

    header("Content-type: application/octet-stream");

    header('Content-Disposition: attachment; filename="'. basename($path) .'"');

    header("Content-Length: ". filesize($path));

    readfile($path);

        所需的引數是:檔案路徑 

思路:建立Doc/download方法,在方法中獲取要下載的檔案路徑,呼叫上面4句話進行下載 

  1.  修改檔案下載地址,將檔案的doc_id傳遞到download方法中 
{volist name="sourcelist" id="list"}
<div class="max-box">
    <div class="image-box"><img src="/images/{$list.image}"></div>
    <div class="text-box">
        <div class="text-left-box">
            <p>{$list.name}</p>
            <p>{$list.description}</p>
        </div>
        <div class="text-right-box">
            <a href="{:url('source/sourcedownload',['id'=>$list.id])}"
               class="btn btn-primary btn-sm shiny">
                <i class="glyphicon glyphicon-save"></i> 下載
            </a>
        </div>
    </div>
    <hr/>
</div>
{/volist}
  1.  建立Doc/download方法,接收doc_id,根據id查詢對應的路徑,再呼叫4句下載函式,進行下載操作。

function download(){

    //接收公文id    $id = I('get.id');

    //根據公文id查詢對應的附件路徑    $data = D('Doc')->field('doc_file')->find($id);

    $path = $data['doc_file'];

    header("Content-type: application/octet-stream");

    header('Content-Disposition: attachment; filename="'. basename($path) .'"');

    header("Content-Length: ". filesize($path));

    readfile($path);

}