即使将其设置为全局变量也无法在函数外部使用变量
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);
//}
我已经制作了一个脚本来使用 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);
//}