Hallo Leute!
Also ich bin wiedermal am verzweifeln!
Hab ein upload Script geschrieben. doch jedesmal wenn ich dann auf senden klicke bekomme ich folgende Fehlermeldung:
Warning: open_basedir restriction in effect. File is in wrong directory in /home/.sites/33/site449/web/up2.php on line 3
Hier einmal das Script:
<?PHP
if(!empty($file_name)){
if(copy($file,"album/$file_name")){
if(is_uploaded_file($file)){
echo "<b>Upload beendet!</b><br>";
echo "Dateiname: $file_name";
echo "<br>";
echo "Dateigröße: $file_size Byte";
}
}
}
else{
echo"<html><head></head>";
echo"<body bgcolor=\"#FFFFFF\" text=\"#000000\">";
echo"<form name=\"form1\" enctype=\"multipart/form-data\" method=\"post\" action=\"up2.php\">";
echo"<p><input type=\"file\" name=\"file\"><br>";
echo"<input type=\"submit\" name=\"Abschicken\" value=\"Download beginnen\">";
echo"</p></form>";
echo"</body></html>";
}
?>
Hier ein Auszug meiner phpinfo:
PHP Version: 4.2.3
open_basedir: /home/.sites/33/site449/web
upload_tmp_dir: /home/tmp
user_dir: no value
Hat vielleicht jemand einen Tip was da sein kann, bzw wie ich es ändern muß damit der upload klappt??
Bin für jeden Tip dankbar!! ;)
Sooo..weil ich mal so gnädig bin ist hier meine gerade geschriebene Upload klasse: :D :D :D
<?php
class Upload
{
# Variabeln für die Upload Klasse:
# Datei im Temp Ordner des Servers
var $temp;
# Ziel Ordner
var $ziel;
var $dateityp;
var $dateiname;
var $dateigroesse;
# Die Dateitypen
var $typs = array('Platzhalter','gif', 'jpeg', 'png', 'swf');
var $alltyps = array('Platzhalter','gif', 'jpeg', 'png', 'swf');
var $breite;
var $hoehe;
# Diese Funktion ermittelt den Dateityp der Datei und gibt ihn aus:
function UploadReturnFileTyp($file){
# Dateityp ermitteln:
$index = getimagesize($file);
$this->dateityp = $this->typs[$index[2]];
# Ausgabe des Dateityps
return $this->dateityp;
}
function UploadReturnBreite($file){
$index_breite = getimagesize($file);
return $index_breite[0];
}
function UploadReturnHoehe($file){
$index_hoehe = getimagesize($file);
return $index_hoehe[1];
}
function UploadFile($filename,$targetdir,$fupload,$fupload_size,$maxsize,$fupload_type,$breite,$hoehe){
# Überprüfen ob die Datei kleiner bzw. gleichgross wie die festgelegte Grösse ist!
if(empty($fupload))
{
$this->display_error("No File selectet or unknown file");
return 0;
}
if($fupload_size <= $maxsize)
{
# Durchlaufen einer Schleife:
while($ii <=4)
{
if($fupload_type == "image/".$this->alltyps[$ii]."")
{
# Der Variable Dateityp den ermittelten Dateityp zuweisen:
# Aber NUR wenn $fupload_type den verfügbaren entspricht...
$this->dateityp = "".$this->alltyps[$ii]."";
}
$ii = $ii+1;
}
if(empty($this->dateityp)){
$this->display_error("I dont know this file type:");
echo "<b>$fupload_type</b>";
return 0;
}
# "Echte" breite und Höhe ermitteln lassen:
$this->breite = $this->UploadReturnBreite($fupload);
$this->hoehe = $this->UploadReturnHoehe($fupload);
# Fehlerausgeben wenn die Proportionen überschritten werden:
if($this->breite >= $breite)
{
$this->display_error("Die Proportionen deines Bildes sind <b>zu gross</b>. Die Breite deines Bildes <b>beträgt ".$this->breite."</b>.Erlaubt sind aber nur <b>$breite</b>");
return 0;
}
elseif($this->hoehe >= $hoehe)
{
$this->display_error("Die Proportionen deines Bildes sind <b>zu gross</b>. Die Höhe deines Bildes <b>beträgt ".$this->hoehe."<</b>.Erlaubt sind aber nur <b>$hoehe/b>");
return 0;
}
# Überprüfen ob der Ordner beschreibar ist:
if(is_writable($targetdir))
{
# Nur hochladen wenn die Datei noch nicht existiert!
if(!file_exists("$targetdir/$filename")){
if(!move_uploaded_file($fupload, "$targetdir/$filename")){
$this->display_error("Can't Upload File");
return 0;
}
else
{
$this->display_info("Picture Uploaded");
@chmod("$targetdir/$filename", 0644);
return 0;
}
# Nötige Dateirechte geben:
}
else
{
$this->display_info("File Already Exists");
return 0;
}
}
else{
$this->display_error("Target directory is not Writable");
return 0;
}
}
else
{
$this->display_error("The File is too large");
return 0;
}
}
function display_error($error){
echo "<b>Error:</b> $error";
}
function display_info($info){
echo "<b>Information:</b> $info";
}
}
###########################################
/**
*
*
* @version $Id$
* @copyright 2003 David Heidrich ->> Genutec Studios
**/
?>
Fragt mich jetzt nicht warum einige teile in englisch sind...ging irgendwie schneller zu schreiben statt: "Ein Fehler ist aufgetreten bla"...
Achja..ich hoffe du weist wie man die klasse aufruft..falls nicht:
$bla = new Upload;
$bla->UploadFile($filename,$uploadDir,$fupload,$fupload_size,$maxUploadFileSize,$fupload_type,$maxwidh,$maxheight);
Die Klasse dann nur noch mit variabeln ansprechen (wie oben gezeigt) und feddich ist das ganze...*G*
[Editiert am 15/9/2003 von SiteAssistant BowlingX]
Okay, hab mir dein Script mal kopiert!
Mein Problem hab ich mittlerweile zwar schon gelöst (Member_Photoupload etwas umgeschrieben),
aber ein Uploadscript kann man ja immer mal benötigen! ;)
Mal "Danke" sag!
:BD:
null problem!
die klasse ist im prinzip noch net feddich...später soll sie auch noch "normale" Dateiendungne hochladen können...deswegen sind die variabeln da *G*
Zitatwürd ich davor ein umask (000); setzen, sonst kann es
unliebsame Effekte geben.
Ok..dange für den Tipp...bisher ging aber alles..ich machs aber mal trotzdem *G*...mal schauen, vielleicht kannst du die klasse dann für die gallery verwenden oder so
Hmmm ....
@BowlingX:
Wozu sind eigentlich im Kopf der Klasse die variablen
Zitatvar $ziel;
var $temp;
var $dateigroesse;
definiert. Die werden doch nirgends gebraucht (oder überseh ich da was)???
Weiter bei
Zitat@chmod("$targetdir/$filename", 0644);
würd ich davor ein
umask (000); setzen, sonst kann es
unliebsame Effekte geben.
MfG
jubilee
[Editiert am 16/9/2003 von SiteAdmin jubilee]
Hallo !
Zitatdie klasse ist im prinzip noch net feddich...
Ja, deswegen. hatte mir schon soetwas gedacht....
Zitatvielleicht kannst du die klasse dann für die gallery verwenden
Ja, in der nächsten Version der Gallery,
(die mit Sicherheit ganz ganz anders aussehen wird als die jetzige)
kann ich mir das schon vorstellen. Obwohl Deine klasse dann eher in die API gehört, damit man das auch Systemweit nutzen kann.
MfG
jubilee