Hallo,
Ich hab meinen Rootserver (Suse) mit Visas formatiert und Confixx installiert. Nun habe ich neben ein paar Problemen mit Birnen (Pear) auch ein Problem mit dem Upload von Bildern. Hierfür habe ich eine kleine Klasse geschrieben, welche sehr den Aufbau von C# ähnelt (vom Prinzip her - war es leid, dauerhaft für so Kleinigkeiten wie Änderungen an Textboxen & Co sämtlichen Code durchzugehen). Wer mich bereits ein bisschen im Forum beobachtet hat, wird evtl. gemerkt haben, dass ich nur sehr ungern von mir verfassten Quellcode präsentiere. Darausfolgend handelt es sich um wirkliche Verzweiflung .
classPictures: (bitte keinen Kommentar zur deutschen Fehlerausgabe. Normalerweise ist es MLS fähig...)
Hier der Code des Aufrufes (in kurzform zusammengefasst):
Und jetzt zur Stelle mit dem Fehler:
Ich habe bereits das Errorhandling auskommentiert und mir die "wirklichen" Fehler ausgeben lassen. Allerdings scheint es irgendein Rechteproblem auf dem Root zu sein. Er will irgendwie das Bild mit einem anderen Benutzer verschieben als er dieses hochgeladen hat! Evtl. weiss jemand, woran es liegen kann bzw. wie man den Fehler beseitigt... Auch würden mir euere Meinungen zu meinem Ansatz mit den Klassen für so kleinigkeiten wie das Bilderhochladen gefallen.
Ausgabe des Fehlers:
Ich hab meinen Rootserver (Suse) mit Visas formatiert und Confixx installiert. Nun habe ich neben ein paar Problemen mit Birnen (Pear) auch ein Problem mit dem Upload von Bildern. Hierfür habe ich eine kleine Klasse geschrieben, welche sehr den Aufbau von C# ähnelt (vom Prinzip her - war es leid, dauerhaft für so Kleinigkeiten wie Änderungen an Textboxen & Co sämtlichen Code durchzugehen). Wer mich bereits ein bisschen im Forum beobachtet hat, wird evtl. gemerkt haben, dass ich nur sehr ungern von mir verfassten Quellcode präsentiere. Darausfolgend handelt es sich um wirkliche Verzweiflung .
classPictures: (bitte keinen Kommentar zur deutschen Fehlerausgabe. Normalerweise ist es MLS fähig...)
PHP:
<?
class classPictures
{
var $PicPath;
var $PicDirec;
var $PicWidth;
var $PicHeight;
var $PicSize;
var $PicExtension;
var $TextBoxName;
function classPictures($cTextBoxName = "", $cPicPath = "", $cPicDirec = "", $cPicWidth = 0, $cPicHeight = 0, $cPicSize = 0, $cPicExtension = ""){
$this->PicPath = $cPicPath;
$this->PicDirec = $cPicDirec;
$this->PicWidth = $cPicWidth;
$this->PicHeight = $cPicHeight;
$this->PicSize = $cPicSize;
$this->PicExtension = $cPicExtension;
$this->TextBoxName = $cTextBoxName;
}
function Show(){
if($this->TextBoxName != "") {
echo "<input type=\"file\" name=\"".$this->TextBoxName."\">";
return true;
} else {
echo "Kein Name für die Textbox gesetzt";
return false;
}
}
function Upload() {
$typ = $_FILES[$this->TextBoxName]['type'];
$size = $_FILES[$this->TextBoxName]['size'];
$name = $_FILES[$this->TextBoxName]['name'];
$tmpname = $_FILES[$this->TextBoxName]['tmp_name'];
$imgsize = getimagesize($tmpname);
if($imgsize[0] == $this->PicWidth && $imgsize[1] == $this->PicHeight) {
if(eregi($this->PicExtension, $typ)) {
if($size < $this->PicSize){
if($this->CreateDirectory()){
if($this->Delete()){
/*if(@copy($tmpname, $this->PicPath)){
return "Bild wurde hochgeladen.";
} else {
return "Bild nicht hochgeladen.";
}*/
echo $tmpname.'<br>';
echo copy($tmpname, $this->PicPath);
} else {
return "Altes Bild konnte nicht gelöscht werden";
}
} else {
return "Ordner konnte nicht angelegt werden!";
}
} else {
return "Die Datei ".$name." ist ".($size - $this->PicSize)." KB zu groß!";
}
} else {
return "Falsches Dateiformat...<br>Nur .gif und .jpeg";
}
} else {
return "Größe ungültig. ".$this->PicWidth."x".$this->PicHeight." (Breite x Höhe)";
}
}
function Delete(){
if(file_exists($bildpath)) {
if(!@unlink($bildpath)) {
return false;
}
}
return true;
}
function CreateDirectory() {
if(!file_exists($this->PicDirec)) {
if(!mkdir($this->PicDirec, 0777)) {
return false;
}
}
return true;
}
}
?>
Hier der Code des Aufrufes (in kurzform zusammengefasst):
PHP:
include_once "_class/classPictures.php";
$pic_path = "_pictures/user/".$user_id."/profil_small.jpg";
$pic_direc = "_pictures/user/".$user_id."/";
$pic_width = 100;
$pic_size = 819200;
$pic_height = 133;
$pic_ext = "(jpg|jpeg)$";
$textbox = "upload_file";
if($_POST["add"]){
$pic = new classPictures($textbox, $pic_path, $pic_direc, $pic_width, $pic_height, $pic_size, $pic_ext);
echo $pic->Upload();
} else { ?>
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
<?php
$pic = new classPictures($textbox);
$pic->Show();
?>
<br><input type="submit" name="add" value="Abschicken">
</form>
<?php
}
Und jetzt zur Stelle mit dem Fehler:
PHP:
/*if(@copy($tmpname, $this->PicPath)){
return "Bild wurde hochgeladen.";
} else {
return "Bild nicht hochgeladen.";
}*/
echo $tmpname.'<br>';
echo copy($tmpname, $this->PicPath);
Ausgabe des Fehlers:
/srv/www/htdocs/web0/phptmp/phpPYqf9r
Warning: copy(): SAFE MODE Restriction in effect. The script whose uid is 636 is not allowed to access /srv/www/htdocs/web0/html/www/_pictures/user/1 owned by uid 30 in /srv/www/htdocs/web0/html/www/_class/classPictures.php on line 80
Warning: copy(_pictures/user/1/profil_small.jpg): failed to open stream: No such file or directory in /srv/www/htdocs/web0/html/www/_class/classPictures.php on line 80
Zuletzt bearbeitet: