2009-08-17 64 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