首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使将变量设置为全局函数,也不能使用变量外部函数

即使将变量设置为全局函数,也不能使用变量外部函数
EN

Stack Overflow用户
提问于 2016-01-22 18:34:29
回答 1查看 61关注 0票数 1

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

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

,我知道它是关于函数内外变量的范围,但是我不知道它是什么。我尝试过将变量设置为全局变量,但它仍然不起作用。

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

代码语言:javascript
复制
<?php
$idir = "gallery/".$section.'/';
$tdir="gallery/thumbs/".$section.'/';
if(!file_exists($tdir)){
mkdir($tdir);
}

这是我正在使用的函数。

代码语言:javascript
复制
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); 
}

在此之后,我会这样称呼这个函数。

代码语言:javascript
复制
if (!file_exists($tdir.$fname)) {
    createThumbs($idir,$tdir,250, 200);
}

另外,在调用函数时,它会给出一个错误-- undefined variable .$fname

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-22 18:54:50

您在函数中对$fname的值进行了细化,然后当您第一次尝试获取$fname值时,它从未被初始化过,因此出现了错误。

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

代码语言:javascript
复制
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); 
}

然后总是叫缩略图创作:

代码语言:javascript
复制
//if (!file_exists($tdir.$fname)) {
    createThumbs($idir,$tdir,250, 200);
//}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34953650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档