警告:filesize():stat for..error失败

时间:2018-01-20 20:38:27

标签: php

我有这段代码:

$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。

2 个答案:

答案 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如果你给它一个不存在的文件但是原始代码还有一些问题会产生警告:

  1. 条件块错误。函数filesize以字节为单位返回大小,5kb为~5,000字节。
  2. 也使用了错误的比较运算符。应使用小于运算符<而不是运算符>
  3. 当代码不存在时,代码会尝试检查文件的大小。
  4. 您正在条件块中引用不同的文件路径。
  5. 我修改了示例代码,以便在变量中存储图像的绝对路径,并在需要的地方引用它,修复字节比较并更新条件块要求以防止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);
    }