2012-10-10 30 views
2

這是一個很「那裏」的問題,但我一直在想我的應用程序簡化一些,如果這是在所有可能將是一個非常乾淨的方式做事。是否有可能將任意數據附加到實際的文件在PHP

請注意:我不在尋找關於不需要的優化等的意見。我很清楚,這是,但這是我最近一直在想的事情,並想知道是否有可能。

背景信息:

如果你想象一個用戶的封面照片「類似的看到在Facebook和Google+。在這些應用程序中,您可以通過在個人資料頁面上向上或向下拖動來調整圖像的垂直位置。

此功能在我的應用程序中完全相同。用戶在他們的個人資料頁面上拖動圖像,當他們放開鼠標按鈕時,將ajax信息發送到服務器,並使用新的「頂部」值更新數據庫。根據需要和當然的CSS被相應地設置時

此「頂部」值是從數據庫中讀取。一切工作正常

問:

因此,所有考慮到這一點,有沒有什麼辦法,通過PHP的元數據存儲到文件本身。在這種情況下,一個.jpg文件。我知道你可以從文件中讀取某些文件信息數據,但是這可以直接定製?是否可以設置一個名爲'top'的簡單元數據屬性並給它一個整數,從而允許在應用程序中讀取完整數據庫的數據?如果是的話,這種方法有什麼缺點?

如果當然這是不可能的/可取的然後罰款。這也被認爲是一個正確的答案,但請解釋原因。

我知道一個不尋常的問題。希望有人會對此有所瞭解。

+1

是的,你可以基於他們的exif信息或任何文件與他們的元數據排序圖像 – Baba

+0

@Baba +1是OP正在尋找。但這是一個非常迂迴的做法。 –

+0

如果我找到你的話,你會想操縱圖像的exif數據,你可以做到這一點。例如與http://lsolesen.github.com/pel/ – markus

回答

2

您可以操作exif數據,這是存儲在圖像中的元數據。所以理論上你可以'保存'在元數據領域的最高價值......但。不要這樣做!這可能會過於昂貴,因爲你只是想保存一個整數。你不能用標準的方式來測試它,它不是一種標準的做事方式,所以如果你沒有很好地記錄它,下一個人會錯過它等等。無論如何,你的數據庫連接是開放的,可能你有用戶在內存中,所以從用戶配置文件中編寫和讀取這個值並不是什麼大事。總而言之,我認爲這不是一個好主意,即使它是原創的。

+0

我想你是正確的markus。謝謝......在你的回答中,我已經做了一些更深入的exif函數的研究,如果我準備好了它們,可能會比我們現在做的更昂貴。出於這個原因,除非有人提出相反的證據,或者在接下來的幾分鐘內做出這種做法甚至是冷漠的做法,否則我會給你答案。 :) – gordyr

+0

只是要注意,這是關於檢索可能數以千計/數百萬其他用戶的數據,這些用戶可能在懸停在他們的頭像(通過用戶ID沒有數據庫查找)檢索到的活動/項目並獲取他們的迷你coverphoto的正確頂部值是在他們的hovercard上顯示的,當他們真的在瀏覽他們的個人資料時,這當然不是問題......正是你提到 – gordyr

0

雖然它可能是可能的,我相信你最好的選擇是與這個數據庫堅持。只是因爲它更有意義,而且效率更高。

主要點:數據庫可以很容易地索引。

+0

這是事實,但如果他要保持一個每個用戶的緩存文件,將不需要索引,因爲查詢將在固定時間內完成。 –

0

或者,你可能有興趣在這些現代化的NoSQL數據庫的一個 - 我聽說Redis功能非常好這種事情。

+0

有趣?謝謝喬納森。不會修改文件本身的實際「內容」不會使圖像無法讀取(我想將此數據存儲爲.jpg文件) – gordyr

+0

剛剛看到您正在編輯,所以我猜想它不可能以這種方式。無論如何,謝謝你的信息。 :) – gordyr

+0

是的,我最初錯過了你想要在圖像本身存儲這個元數據的部分。如果您願意單獨存儲數據,那麼您可以打開選項,例如我在編輯過的部分中描述的內容,或者同樣提到pp19dd。 –

1

如果效率不超需要,您可以用序列化()和反序列化做到這一點()。

function save($file, $data) { 
    file_put_contents($file, serialize($data)); 
} 

function load($file) { 
    return(unserialize(file_get_contents($file))); 
} 

這將允許您在文件中存儲/檢索可變長度和合成數據結構。限制是不能將文件指針和其他資源鏈接轉儲到文件中,並且可能會遇到保存二進制信息的問題。

對此不太確定,但是如果您確實有二進制信息,則可能需要先base64_encode(),然後使用base64_decode()進行解碼。

+0

+1的原因,謝謝。這確實會做我想要的。然而,正如你所說的,效率是一個問題。然而,這是一個很好的方法,在技術上是一個有效的答案。儘管在這種情況下,由於前面提到的缺點,我不會採用這種方法。雖然謝謝! – gordyr

相關問題