2009-08-17 75 views
2

我有PHP代碼如下,幫助我在腳本中得到照片的縮略圖路徑我該如何改進這個PHP代碼?

這將需要提供的值這樣從MySQL數據庫「2/34/12/thepicture.jpg」 它將然後把它變成這個「2/34/12/thepicture_thumb1.jpg」

我相信有這樣做的更好的表現方式,我願意接受任何幫助,請

而且與50頁用戶的這將運行50次以獲得50張不同的照片

// the photo has it is pulled from the DB, it has the folders and filename as 1 
$photo_url = '2/34/12/thepicture_thumb1.jpg'; 
//build the full photo filepath 
$file = $site_path. 'images/userphoto/' . $photo_url; 
// make sure file name is not empty and the file exist 
if ($photo_url != '' && file_exists($file)) { 
    //get file info 
    $fil_ext1 = pathinfo($file); 
    $fil_ext = $fil_ext1['extension']; 
    $fil_explode = '.' . $fil_ext; 
    $arr = explode($fil_explode, $photo_url); 
    // add "_thumb" or else "_thumb1" inbetween 
    // the file name and the file extension 2/45/12/photo.jpg becomes 2/45/12/photo_thumb1.jpg 
    $pic1 = $arr[0] . "_thumb" . $fil_explode; 
    //make sure the thumbnail image exist 
    if (file_exists("images/userphoto/" . $pic1)) { 
     //retunr the thumbnail image url 
     $img_name = $pic1; 
    } 
} 

1我很好奇的是它如何使用pathinfo()來獲取文件的擴展名,因爲擴展名總是3位數,其他方法會讓這個值的性能更好嗎?

+0

爲什麼使用3位數的擴展名?那麼「thepicture.jpeg」呢?雖然沒有經常使用,但仍然... – 2009-08-17 00:48:39

+0

是的,我想到了後遺症,但是我從來沒有在我的網站上看到100,000多個用戶提交的圖像中的一個,也許他們現在不常見? – JasonDavis 2009-08-17 00:51:44

+2

不要忘記在文件名中放置多個點是有效的。我經常會將文件命名爲:'myLogo.24bit.png','myLogo.bw.png'等 - 此代碼僅在第一個點('$ arr [0]')之前考慮文件名,所以我的文件將會是變成'myLogo.png' – nickf 2009-08-17 01:29:05

回答

6

性能方面反饋意見,如果你調用內置的PHP函數,因爲你正在運行在後臺編譯代碼的性能非常出色。

當然,當你不需要時調用所有這些函數並不是一個好主意。在你的情況下,pathinfo函數返回你需要的各種路徑。你叫的原始名稱explode功能時,你可以建立文件名類似這樣(注意,在「文件名」僅適用,因爲PHP 5.2):

$fInfo = pathinfo($file); 
$thumb_name = $fInfo['dirname'] . '/' . $fInfo['filename'] . '_thumb' . $fInfo['extension']; 

如果您還沒有PHP 5千萬。2,那麼最簡單的方法是忽略的功能和使用strrpossubstr

// gets the position of the last dot 
$lastDot = strrpos($file, '.'); 
// first bit gets everything before the dot, 
// second gets everything from the dot onwards 
$thumbName = substr($file, 0, $lastDot) . '_thumb1' . substr($file, $lastDot); 
+0

謝謝,最終我可能只是重新組織和存儲數據庫中的2個字段,文件夾路徑和圖像名稱分開,然後添加拇指部分到開始,我認爲這將是最好的一個頁面上perforamnce與他們50張照片 – JasonDavis 2009-08-17 12:54:53

-2

$img_name = preg_replace ('/^(.*)(\..*?)$/', '\1_thumb\2', $file);

編輯:設置高亮消失與\。

+2

,雖然這會將兩行代碼合併爲一個,使用正則表達式來表達一些簡單的東西,因爲這不是一個好主意。 – Josiah 2009-08-17 01:18:20

+0

...加上你錯過了一個點 – nickf 2009-08-17 01:24:29

+1

現在你有很多問題;)但是,嚴重的是,正則表達式對於這個問題是不必要的和太複雜的。 – DisgruntledGoat 2009-08-17 01:50:38

0

爲什麼你甚至關心這個功能的性能?假設你只調用它一次(比如生成「main」文件名時)並存儲結果,與DB和文件系統訪問相比,它的運行時間應該基本爲零。如果您在每次訪問時調用它以重新計算縮略圖路徑,那麼這太浪費了,但它仍然不會對運行時產生重大影響。

現在,如果您希望它看起來更漂亮並且更易於維護,那麼這是一個有價值的目標。

+0

是的,即使這是非常低效的代碼,它可能不會對他的系統造成巨大的瓶頸,但是*想要編寫更好,更高效的代碼沒有任何問題! !* – nickf 2009-08-17 01:25:31

+0

@nickf想要編寫更好,更高效的代碼沒有什麼不妥,但總的來說,提高* this *代碼的效率不太可能會在整體質量和效率方面產生重大影響。代碼在整個系統中。借用一種普通的口語:沒有錯,希望你的甲板椅子安排得很好,但重新安排在泰坦尼克號上的甲板椅子不僅沒用,反而適得其反。 – Imagist 2009-08-17 02:25:35

+0

@nickf(續)鑑於此代碼難以理解,其性能相比而言是一個小問題(除非性能分析另有說明)。 – Imagist 2009-08-17 02:27:41

7

這段代碼是否存在性能問題,還是隻是過早優化?除非性能足夠糟糕才成爲可用性問題,並且分析器告訴您這個代碼是應該承擔責任的,否則此代碼存在更多緊迫問題。

要回答這個問題:「我該如何改進此PHP代碼?」 添加空格。

2

此代碼的最好的優化就是提高它的可讀性:

// make sure file name is not empty and the file exist 
if ($photo_url != '' && file_exists($file)) { 

    // Get information about the file path 
    $path_info = pathinfo($file); 

    // determine the thumbnail name 
    // add "_thumb" or else "_thumb1" inbetween 
    // the file name and the file extension 2/45/12/photo.jpg 
    // becomes 2/45/12/photo_thumb.jpg 
    $pic1 = "{$path_info['dirname']}/{$path_info['basename']}_thumb.{$fil_ext}"; 

    // if this calculated thumbnail file exists, use it in place of 
    // the image name 
    if (file_exists("images/userphoto/" . $pic1)) { 
     $img_name = $pic1; 
    } 
} 

我一直在使用換行符打散功能的部件,並用從pathinfo()返回的信息,以簡化確定的過程縮略圖名稱。

更新從@DisgruntledGoat

+0

pathinfo函數返回你從'dirname'和'basename'得到的變量。據我所知,你還沒有添加_thumb1。 – DisgruntledGoat 2009-08-17 01:53:56

+0

增強的可讀性不是優化。 – slypete 2009-08-17 02:22:04

+0

感謝@DisgruntledGoat的反饋,您的權利和我已經修改了相應的答案 @slypete - 我不同意,事實上,只要維護成本是最重要的因素之一,並且增強的可讀性會導致所需時間更少讓維護人員瞭解代碼。 – Josiah 2009-08-17 04:29:45

0

解決這個問題的最簡單方法是縮略圖手之前的所有用戶個人資料照片,並保持它周圍,所以你不保持調整。

+0

他們被調整大小,有幾個尺寸的縮略圖保存,這個功能獲得我需要的大小 – JasonDavis 2009-08-17 12:56:29