即使将其设置为全局变量也无法在函数外部使用变量

Can't use variable outside function even after setting it global

我已经制作了一个脚本来使用 PHP 的 GD 库生成缩略图。问题是原始图像位于分配给 'gallery/'.$section; 的各自目录中,拇指将进入目录 'gallery/thumbs/'.$section

现在,每次执行脚本时,我都希望它检查缩略图是否已经存在,如果不存在则创建它,但每当我调用该函数并重新加载页面时,它每次都会创建新的缩略图。

我知道是关于函数内外变量的作用域,但具体是什么我想不通。我已尝试将变量设置为全局变量,但仍然无法正常工作。

这是预先声明。 idir 用于图像目录,tdir 用于拇指目录。

<?php
$idir = "gallery/".$section.'/';
$tdir="gallery/thumbs/".$section.'/';
if(!file_exists($tdir)){
mkdir($tdir);
}

这是我正在使用的功能。

function createThumbs($idir, $tdir, $tw, $th){
    $dir=opendir($idir);
    while(($fname = readdir($dir)) != false){
        if($fname!='.' && $fname != '..'){
        $img = imagecreatefromjpeg($idir.$fname);

        $width = imagesx($img);
        $height = imagesy($img);

        if($width>$height){
            $new_width=$tw;
            $new_height=$height*($tw/$width);
        }
        if ($width < $height) 
        {
            $new_width=$width*($th/$height);
            $new_height=$th;
        }
        if ($width == $height) 
        {
            $new_width=$tw;
            $new_height=$th;
        }


        $tmp_img = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($tmp_img, $img, 0,0,0,0, $new_width, $new_height, $width, $height);

        imagejpeg($tmp_img, $tdir.$fname, 100);

        imagedestroy($tmp_img); 
        imagedestroy($img); 
    }
}
closedir($dir); 
}

然后我就这样调用函数了。

if (!file_exists($tdir.$fname)) {
    createThumbs($idir,$tdir,250, 200);
}

此外,在调用该函数时会出现错误 - undefined variable .$fname

您在函数内部初始化了 $fname 的值,然后您第一次尝试获取 $fname 值时,它从未被初始化,因此您得到了错误。

它可以帮助您将 if 语句移动到 while 循环中:

function createThumbs($idir, $tdir, $tw, $th){

    $dir=opendir($idir);
    while(($fname = readdir($dir)) != false){
        if($fname!='.' && $fname != '..' && !file_exists($tdir.$fname)){
        $img = imagecreatefromjpeg($idir.$fname);

        $width = imagesx($img);
        $height = imagesy($img);

        if($width>$height){
            $new_width=$tw;
            $new_height=$height*($tw/$width);
        }
        if ($width < $height) 
        {
            $new_width=$width*($th/$height);
            $new_height=$th;
        }
        if ($width == $height) 
        {
            $new_width=$tw;
            $new_height=$th;
        }


        $tmp_img = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($tmp_img, $img, 0,0,0,0, $new_width, $new_height, $width, $height);

        imagejpeg($tmp_img, $tdir.$fname, 100);

        imagedestroy($tmp_img); 
        imagedestroy($img); 
        }
    }
    closedir($dir); 
}

然后总是调用缩略图创建:

//if (!file_exists($tdir.$fname)) {
    createThumbs($idir,$tdir,250, 200);
//}