iT邦幫忙

1

PHP 如何確保檔案已下載完成?

php
  • 分享至 

  • xImage

如題:
想請問各位大大,目前正在實作多個PDF合併成一個,但目前遇到的問題是:
合併後會以下載的方式下載到Downloads的資料夾,因無法指定下載的位置,所以想下載後移動到指定的位置,但卻無法判斷出是否已下載完成,若合併的檔案多的時候,直接使用rename('','')就會判斷沒有檔案移動失敗,有嘗試過sleep()也還是無法,想請問各位大大有沒有解?

include "../PDF/PDFMerger-master/PDFMerger.php";
use PDFMerger\PDFMerger;
$pdf=new PDFMerger();
$Paths=['test1.pdf','test2.pdf','test3.pdf','test4.pdf'];
foreach ($Paths as $key=>$path){
    try {
        $pdf->addPDF($Paths[$key]);
    } catch (exception $e) {
        echo $e['message'];
    }
}
$pdf->merge('download','merged.pdf');
rename("C:/Users/test1/Downloads/merged.pdf","C:/Users/test1/Desktop/T/test.pdf")
看更多先前的討論...收起先前的討論...
C:/Users/test1 ,你怎麼敢寫這樣的指定路徑,這鐵定過不了的啊
qpalzm iT邦新手 1 級 ‧ 2022-11-04 09:37:43 檢舉
to 窮嘶發發發 :造成誤會不好意思!! 我原本有指定好路徑 只是貼上去我不能貼我原本的程式碼 !!!!
"合併後會以下載的方式下載到Downloads的資料夾,因無法指定下載的位置,所以想下載後移動到指定的位置" 這個做不到,網站的東西對OS的任何操作行為都要USER 允許,而大多數的USER 會不允許這麼操作,你只能使用瀏覽器預設的路徑,甚至他都不一定是在 %USER%/DOWNLOAD 下面,印象中,有個參數,可以允許下載之後自動開啟資料夾,這個你可以試試看
r567tw iT邦研究生 5 級 ‧ 2022-11-04 10:39:39 檢舉
我覺得用下載這個詞蠻奇怪的, 你明明就是實作[合併], 另外如同上面大大說道 os 的操作基本上都有權限上面的控管
至於要如何看合併的進度我覺得要看PDFMerger 這個 lib 有沒有提供相對應的api 可以呼叫確認?
froce iT邦大師 1 級 ‧ 2022-11-04 13:36:10 檢舉
用網頁方式,前端會在使用者的電腦執行,後端會在伺服器上執行。
前端執行因為網頁安全性的關係,不可能進行檔案的搬移/改名等操作,要不然我寫個網頁,只要瀏覽的人C槽一律移到D槽就好。
而你的php程式碼是後端,所以你這邊會移動到你伺服器哩,你指定的位置。
qpalzm iT邦新手 1 級 ‧ 2022-11-04 17:30:04 檢舉
先感謝各位大大的解惑抱歉現在才回復;
由於是用PHP所以不會有前端操控的問題,我都忘記說明清楚實在抱歉抱歉,
至於r567tw大大說的確認 ,我目前也還是找不到,所以我還在想辦法處理~謝謝各位大大的幫忙
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2022-11-04 15:40:48
最佳解答

若照這裡的範例來改

$pdf->merge('download','merged.pdf');
rename("C:/Users/test1/Downloads/merged.pdf","C:/Users/test1/Desktop/T/test.pdf")

可以改成

$pdf->merge('file','C:/Users/test1/Desktop/T/test.pdf');

試試看 work 不 work

看更多先前的回應...收起先前的回應...
qpalzm iT邦新手 1 級 ‧ 2022-11-04 17:30:33 檢舉

好的 假日小弟來試試看 謝謝海綿大的幫忙~

qpalzm iT邦新手 1 級 ‧ 2022-11-07 08:22:55 檢舉

海綿大的方式可以work,謝謝~
另外想額外問的是對於產生檔案和下載檔案,一樣都是產生檔案為甚麼會有分用file和download,為甚麼會有這樣的差別?

看官方說明
共有browser,download,string,file四種參數
應用在不同情境

我沒有實際使用過
單純從字面上來猜如下(可能有錯):
browser:將結果直接「顯示在browser視窗」
download:將結果透過browser「下載」至browser那台電腦
string:將結果存成「字串」
file:將結果「存成檔案」(先前你稱之為「下載」,造成邦友誤解)

確定的話要去問原作者
不過他好像已經不再維護了...

qpalzm iT邦新手 1 級 ‧ 2022-11-08 13:39:04 檢舉

對...QQ /images/emoticon/emoticon41.gif

1
ahfuyeuem
iT邦研究生 4 級 ‧ 2022-11-04 10:52:43

瀏覽器控制的行為
不應該特別幫使用者搬移到指定路徑

我要發表回答

立即登入回答