我有这段代码:
$album_name = $row['album'];
if(!file_exists("cdcovers/$album_name.jpg") && filesize($album_name) > 5){
//gravar as imagens
$imageString = file_get_contents(LastFMArtwork::getArtwork($row['artist'], $row['album'], true, "large"));
$save = file_put_contents('/home/link/public_html/cdcovers/'.$row['album'].'.jpg',$imageString);
}
但我给出了一个错误(警告:filesize():stat失败...)如果图像不存在, 我的意思是如果文件存在并且比5kb大,那么如果它是4kb或以下保存图像则不做任何事情,即使文件存在0kb。
答案 0 :(得分:0)
您必须先检查文件是否存在,然后再检查其大小。
如果"cdcovers/$album_name.jpg"
和$album_name
是不同的文件,您还必须检查第二个。
if (!file_exists("cdcovers/$album_name.jpg") &&
file_exists($album_name) &&
filesize($album_name) > 5) {
如果文件相同,则是错误(缺少文件夹和文件扩展名)。
此外,您使用绝对路径保存文件:'/home/link/public_html/cdcovers/'.$row['album'].'.jpg'
。它可能与"cdcovers/$album_name.jpg"
不同(取决于当前文件夹的脚本执行)。您可以使用__dir__
常量的绝对路径来相对于当前文件夹。
您可以使用变量来存储文件名并通过多次写入来限制错误:
$filename = '/home/link/public_html/cdcovers/'.$row['album'].'.jpg' ;
if (!file_exists($filename) ||
(file_exists($filename) && filesize($filename) < 5000)) {
file_put_contents($filename, ...);
}
另请注意,filesize()
以字节为单位返回大小,而不是Kb。
答案 1 :(得分:0)
根据我的理解,如果图像不存在则要创建图像;如果图像小于5kb,则更新图像。
简而言之,filesize
如果你给它一个不存在的文件但是原始代码还有一些问题会产生警告:
filesize
以字节为单位返回大小,5kb为~5,000字节。 <
而不是运算符>
。我修改了示例代码,以便在变量中存储图像的绝对路径,并在需要的地方引用它,修复字节比较并更新条件块要求以防止filesize
警告。
请查看以下更新的代码:
$albumCoverImg = '/home/link/public_html/cdcovers/' . $row['album'] . '.jpg';
$minSize = 5 * 1000; // 5KB
$fileExist = is_file($albumCoverImg);
if (!$fileExist || ($fileExist && filesize($albumCoverImg) < $minSize)) {
//gravar as imagens
$imageString = file_get_contents(LastFMArtwork::getArtwork($row['artist'], $row['album'], true, "large"));
$save = file_put_contents($albumCoverImg, $imageString);
}