iT邦幫忙

0

PHP上傳下載動作,能否保留原檔修改時間?

問題可能說的有點模糊,我再詳細解釋一下。
其實現在我希望無論是上傳或是下載。不管是FTP的方式、POST或是其它任何一個方式。
我都希望能原檔COPY過去。不要去變動其建立或修改時間。

目前試了PHP中的FTP方式跟檔案POST的方式。是一定辦不到這件事的。
FTP上傳下載有在網路上找到說好像可以做宣告讓它可以保留檔案時間。可惜一直沒辦法成功。

後期我又試了ZipArchive壓縮後再上傳的方式。可以確定壓縮檔內的檔案時間是有保留的。
可是一樣利用ZipArchive做解壓。它還是會依解壓的時間點為修改時間。

但可以確定的是,如果是用SSH操作或是用解壓軟體來做解壓的話。是會保留住檔案的時間。
但是,我PHP上我並不太想開放能操作內部命令的函數。

所以,想問看看有無大佬有研究過這一類的設計方式。是否有其它任何可行的方式。
或是在套件操作上有什麼我沒注意到的地方。

麻煩了


後續處理回報:
其實在發問這篇後,我也一直再想方式來解決。後期我終於找到解決的方式了。
方法還是利用了ZipArchive。將要上傳的檔案,先全部打包起來後。再用ftp上傳壓縮檔。
最後再利用curl遠端運行解壓。
解壓完成後,取得得該壓縮檔內記錄的檔案修改時間。
幸好ZipArchive有提供提取的方法。雖然一開始我眼殘沒注意到其實可預取壓縮檔內的資訊

再用touch的方式修正。
這是目前能找到的最好的方式了。

看更多先前的討論...收起先前的討論...
froce iT邦大師 5 級 ‧ 2019-09-11 12:00:32 檢舉
https://developer.mozilla.org/en-US/docs/Web/API/File/lastModified
https://www.php.net/manual/zh/function.touch.php

前端上傳時先拿到資訊,然後到後端建完檔案再去設定吧。
dragonH iT邦大師 6 級 ‧ 2019-09-11 12:06:09 檢舉
我也跟 froce 大的想法一樣

不過看這篇

https://stackoverflow.com/questions/4898534/php-copy-file-without-changing-the-last-modified-date

留言說會增加 30% 處理時間

不知道是真假
我目前也的確是往上傳後再去修改時間的方式。
我還在研究中。目前的研究方向是看看能否利用壓縮檔的方式。

雖然確實可以傳送一份原檔資訊過去提供修改。
但我還是想省下這個步驟。

畢竟認真來說,檔案的修改時間照理說也因該存在其壓縮檔內了。
我還在試著看看能否提出壓縮檔內的資訊。
froce iT邦大師 5 級 ‧ 2019-09-11 16:10:00 檢舉
如果真的會要增加30%的處理時間,那我會建議另外建DB去存必要資訊就好。
其實另存時間也並非是我要的東西。雖然那也是一種解決方式也沒錯。
但並非是我真的要的行為做法。

畢竟我要的是實體檔案的變動。需要去偵測任何可能性的更改及變動的處理。
所以另存檔案資訊的做法。是不能達到我的需求的。

反正現在用壓縮檔的方式,也是可以達到我要的需求了。

2 個回答

0
firecold
iT邦新手 5 級 ‧ 2019-09-11 11:58:56

ftp我記得aws上面的不會去動到原檔的時間
是跟其他服務商租借的?

如果是用ftp軟體上傳是不會動到原檔時間沒錯。
目前是用php內的ftp操作的方式。
它是沒辦法獲得原檔的修改時間的。

具我所查看到的資料,其實php的ftp動作。只是單純的將內容傳送上去後,在新的地方建立新檔。所以自然修改時間就會是依上傳時間為主。而不會是原檔時間。至少我目前實驗的結果也的確是如此。
使用php內的ftp上傳確實修改時間會變動。
但使用ftp軟體來上傳是不會變動的。

firecold iT邦新手 5 級 ‧ 2019-09-11 14:47:02 檢舉

感謝星空大講解

0
海綿寶寶
iT邦超人 1 級 ‧ 2019-09-11 12:36:23

如果願意考慮「取得檔案修改時間當參數另外傳」的話

這裡有一篇 2019 年的用 javascript 取得檔案修改時間
JSFiddle /FireFox 測過可以

居然 xmlhttp 元件可以操控檔案的修改時間。讓我學到新的知識了。
雖然我沒用這樣的方式。畢竟php也可修改檔案時間。
但還是感謝你的提供了。

我要發表回答

立即登入回答