gpt4 book ai didi

php filesize() 总是返回相同的值

转载 作者:行者123 更新时间:2023-12-05 08:59:13 25 4
gpt4 key购买 nike

我正在尝试通过 PHP 上传图像。上传时,它应该调整大小,使其尺寸与我在配置 [] 数组中定义的一样大,并且其文件大小也小于或等于我的配置 [] 数组中的预定义值。但不知何故,方法 getFileSize() 始终返回相同的大小,即使在调整图像大小之后也是如此。

这是我的代码。解释如下。

$tries = 0;
while ( $image->getFileSize() > $config['image_max_file_size'] && $tries < 10 ) {
$factor = 1 - (0.1 * $tries);

echo $image->getFileSize().PHP_EOL;
if ( !$image->resize($config['image_max_width'], $config['image_max_height'], $factor) ) {
return false;
}

$tries++;
}

$image 是一个 Picture 类型的对象,它只是我需要的与修改图片相关的所有函数的包装类。

$config 是我的配置数组,其中包括所有类型的预定义值。

$tries 保存允许的尝试次数。允许程序调整图像大小不超过 10 次。

getFileSize() 通过 return filesize(path) 返回图像文件大小

resize(maxWidth,maxHeight,factor) 将图像调整为参数中提到的大小。调整图片大小后,将结果保存到相同的路径,从中读取文件大小。

我将只发布 resize() 和 getFileSize() 方法,因为您可能会感兴趣:

function resize($neededwidth, $neededheight, $factor) {

$oldwidth = $this->getWidth($this->file_path);
$oldheight = $this->getHeight($this->file_path);
$neededwidth = $neededwidth * $factor;
$neededheight = $neededheight * $factor;
$fext = $this->getInnerExtension();

$img = null;
if ($fext == ".jpeg" ) {
$img = imagecreatefromjpeg($this->file_path);
} elseif ($fext == ".png") {
$img = imagecreatefrompng($this->file_path);
} elseif ($fext == ".gif") {
$img = imagecreatefromgif($this->file_path);
} else {
return false;
}

$newwidth = 0;
$newheight = 0;
if ($oldwidth > $oldheight && $oldwidth > $neededwidth) { // Landscape Picture
$newwidth = $neededwidth;
$newheight = ($oldheight / $oldwidth) * $newwidth;
} elseif ($oldwidth < $oldheight && $oldheight > $neededheight) { // Portrait Picture
$newheight = $neededheight;
$newwidth = ($oldwidth / $oldheight) * $newheight;
}

$finalimg = imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($finalimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight);

if ($fext == ".jpeg" ) {
if ( !imagejpeg($finalimg, $this->file_path, 100) ) return false;
} elseif ($fext == ".png") {
if ( !imagepng($finalimg, $this->file_path, 9) ) return false;
} elseif ($fext == ".gif") {
if ( !imagegif($finalimg, $this->file_path) ) return false;
} else {
return false;
}

imagedestroy($img);
return true;
}

获取文件大小()

function getFileSize() {

return filesize($this->file_path);
}

谢谢!

最佳答案

尝试 http://www.php.net/manual/en/function.clearstatcache.php

function getFileSize() {
clearstatcache();
return filesize($this->file_path);
}

关于php filesize() 总是返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16695845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com