Orientuję się już co nieco w PHP a ostatnio zainteresowałem się tematem
klas przy okazji znalezienia i próby wykorzystania gotowej klasy
imageresizer.class.php z www.phpclasses.org
Dość prosta i fajna klasa do resizowania uploadowanych obrazków.
Nie wiem czy jest sens cytowania całej klasy, zrobię to jeśli będzie konieczne.
Podam tylko sposób wywołania klasy:
<?php
if (isset ($_POST["submit"])) {
include ("imageresizer.class.php");
$image = new Image($_FILES['file']['name']);
$image -> PicDir = "foto_upload/";
$image -> PicURL = "http://www.domena.pl/";
$image -> TmpName = $_FILES['file']['tmp_name'];
$image -> FileSize = $_FILES['file']['size'];
$image -> FileType = $_FILES['file']['type'];
//$image -> Save(); //use this if you wish images without resizing
$image -> Resize ();
// W tym miejscu chciał bym mieć dostępną zmienna z wnętrza klasy zawierającą numer błędu
}
?>
<form name="form" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method=post enctype="multipart/form-data">
<input type="file" name="file" size="40"><br> <input type="submit" name="submit" value="Prześlij >>">
Moim problemem jest to, że chciałem użyć zmiennej $error występującej w fonkcji wewnątrz klasy.
Zmienna ta zawiera numer błędu zwyczajnie cyfry od 0-4 symbolizujące typ błędu.
Klasa zawiera funkcję, która wyświetla (echo) odpowiedni komunikat błędu w zależności od cyferki
w zmiennej $error. I ładnie mi to działa ale ja po wykonaniu (wywołaniu) klasy i wyjściu z niej
chciał bym wykonać stosowne akcje w zależności od wartości błędu $error. A ta zmienna nie jest
dostępna już poza klasą, jedynie wewnątrz niej.
Proszę o jakąś ogólną zasadę jak to można zrobić.
Uzupełnienie - treść klasy:(Od siebie dodałem jedną poprawkę błędu i kilka modyfikacji w sekcji wyświetlającej informacje o obrazku.
Oryginalna klasa dostępna na: www.phpclasses.org)
Należy zwrócić uwagę na funkcję GetError.
<?php
class Image {
var $FileName;
var $FileSize;
var $FileType;
var $AllowedExtentions = array ("image/png", "image/gif", "image/jpeg", "image/jpg"); var $newWidth = 155; // new width
var $newHeight = 116; //new height
var $TmpName;
var $PicDir; //store uploaded images
var $PicURL; //URL bazowy
var $MaxFileSize = 1258291.2; // 1,2 MB w kilobitach
var $ImageQuality = 85; // image compression (max value 100)
function Image($FileName) {
$this->FileName=$FileName;
}
function GetInfo() {
$newfilepath = $this->PicDir . '' .$this->FileName;
echo $newfilepath."<br>"; $out=' <br><br>Obrazek przesłany!<br>
Nazwa plik: <b>'.$this->FileName.'</b><br>
Oryginalny rozmiar: <b>'.round(($this->FileSize/1024)/1024, 2).' MB</b><br> Rozmiar po obróbc: <b>'.round(((filesize($newfilepath)/1024)/1024), 4).' MB</b> czyli <b>'.round((filesize($newfilepath)/1024), 2).' KB</b><br> Typ pliku graficznego: <b>'.$this->FileType.'</b><br><br>
<img border=1 src='. $this->PicURL .''. $this->PicDir . $this->FileName . '><br><br>';
return $out;
}
function GetFileExtention ($FileName) {
if (in_array ($this->FileType, $this -> AllowedExtentions)) { return true;
} else {
return false;
}
}
function ExistFile () {
$fileexist = $_SERVER['DOCUMENT_ROOT'] .
'/' . $this->PicDir .
$this->FileName;
}
function GetError ($error) {
switch ($error) {
case 0 <span style="color: #007700":
echo "Error: Błędny typ pliku <b>$this->FileType</b>! Dozwolone typ: .jpg, .jpeg, .gif, .png <b>$this->FileName</b><br>"; break;
case 1 <span style="color: #007700":
echo "Error: Rozmiar plik: <b>".round(($this->FileSize/1024)/1024, 2)." MB</b> jest za duży!<br>Możesz załadować plik max. do <b>".round(($this->MaxFileSize/1024)/1024, 2)." MB</b> (Megabajta)<br>"; break;
case 2 <span style="color: #007700":
echo "Error: Proszę wskazać plik do przesłania ze swojego dysku lokalnym!<br>"; break;
case 3 <span style="color: #007700":
echo "Error: Plik o nazwie <b>$this->FileName</b><br>już istnieje w katalogu docelowym !<br>"; break;
}
}
function Resize () {
if (empty ($this->TmpName)) {echo $this -> GetError (2
);} else if ($this->FileSize > $this->MaxFileSize) {echo $this -> GetError (1
);} else if ($this -> GetFileExtention ($this->FileName) == false) {echo $this -> GetError (0
);} else if ($this -> ExistFile()) {echo $this -> GetError (3
);}
else {
$ext = explode(".",$this->FileName);
// Get new sizes
list
($width_orig, $height_orig) = getimagesize($this->TmpName);
$ratio_orig = $width_orig/$height_orig;
if ($this->newWidth/$this->newHeight > $ratio_orig) {
$this->newWidth = $this->newHeight*$ratio_orig;
} else {
$this->newHeight = $this->newWidth/$ratio_orig;
}
$normal = imagecreatetruecolor($this->newWidth, $this->newHeight);
if ($ext == "jpg") { $source = imagecreatefromjpeg($this->TmpName); }
else if ($ext == "gif") { $source = imagecreatefromgif ($this->TmpName); }
else if ($ext == "png") { $source = imagecreatefrompng ($this->TmpName); }
imagecopyresampled($normal, $source, 0, 0, 0, 0, $this->newWidth, $this->newHeight, $width_orig, $height_orig);
if ($ext == "jpg") {
//ob_start();
imagejpeg($normal, "$this->PicDir/$this->FileName", "$this->ImageQuality");
//$binaryThumbnail = ob_get_contents();
//ob_end_clean();
}
else if ($ext == "gif") { imagegif ($normal, '', "$this->ImageQuality"); }
else if ($ext == "png") { imagepng ($normal, '', "$this->ImageQuality"); }
imagedestroy($source);
}
}
function Save() {
if (empty ($this->TmpName)) {echo $this -> GetError (2
);} else if ($this->FileSize > $this->MaxFileSize) {echo $this -> GetError (1
);} else if ($this -> GetFileExtention ($this->FileName) == false) {echo $this -> GetError (0
);} else if ($this -> ExistFile ()) {echo $this -> GetError (3
);}
else {
copy($this->TmpName,$this->PicDir.$this->FileName);
}
}
}
?>
Ten post edytował aniol 29.09.2008, 11:48:17