我在下面的php代码可以帮助我在脚本中获取照片的缩略图图像路径
它将从mysql DB'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;
}
}
我很好奇的是它如何使用pathinfo()来获取文件扩展名,因为扩展名总是3位数,其他方法可以获得更好的性能吗?
答案 0 :(得分:7)
此代码是否存在性能问题,或者您只是过早优化?除非性能严重到可用性问题并且分析器告诉您这个代码应该受到责备,否则此代码会遇到更多紧迫的问题。
回答这个问题:“我如何改进这个PHP代码?” 添加空格。
答案 1 :(得分:6)
性能方面,如果您调用内置PHP函数,性能非常好,因为您在后台运行已编译的代码。
当然,在您不需要时调用所有这些功能并不是一个好主意。在您的情况下,pathinfo
函数返回您需要的各种路径。当您可以像这样构建文件名时,可以在原始名称上调用explode
函数(注意,'filename'仅在PHP 5.2之后可用):
$fInfo = pathinfo($file);
$thumb_name = $fInfo['dirname'] . '/' . $fInfo['filename'] . '_thumb' . $fInfo['extension'];
如果您没有PHP 5.2,那么最简单的方法是忽略该功能并使用strrpos
和substr
:
// 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);
答案 2 :(得分: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的反馈
答案 3 :(得分:0)
为什么你甚至担心这个功能的表现?假设您只调用一次(例如,生成“main”文件名时)并存储结果,则与DB和文件系统访问相比,其运行时应基本为零。如果您在每次访问时都调用它来重新计算缩略图路径,那么这很浪费,但它仍然不会对运行时产生重大影响。
现在,如果您希望它看起来更好,更易于维护,那么这是一个有价值的目标。
答案 4 :(得分:0)
解决此问题的最简单方法是预先缩略所有用户个人资料照片,并将其保留,以免不断调整大小。
答案 5 :(得分:-2)
$img_name = preg_replace('/^(.*)(\..*?)$/', '\1_thumb\2', $file);
编辑:bbcode消失了\。