Access denied bei upload per dropdown, seh den fehler einfach nicht

cofter

Erfahrenes Mitglied
Nabend,
ich versuche ein upload Script für einen Adminbereich zu coden.
Ich möchte das Verzeichnis wohin das Bild geladen werden soll in das Dropdown haben was auch funktioniert.
Darunter befindet sich das Feld um die Datei auszuwählen ein
HTML:
 <input type="file">
.
Jetzt möchte ich Verzeichnis und Datei aneinander hängen damit er weiss wohin ect. aber er bringt mir ein Fehler :
Warning: copy(/mkBlue_fo.jpg) [function.copy]: failed to open stream: Permission denied in /opt/lampp/htdocs/xenos/admin.inc/upload.inc.php on line 62
Das Verzeichnis auf meinem Webserver hat natürlich alle erforderlichen Rechte.
Ordnerstruktur zu den Zielverzeichnissen
/opt/lampp/htdocs/xenos/img/{dann ordner wie "aktion", "logos"...}
Hier mein Script:
Zeile 62 habe ich makiert.
PHP:
<?php $domain = $_SERVER['HTTP_HOST']; ?>

<?php
 
   $pfad = $folder;

   $sizeabfrage = "no";

   $filesize = "1000000";

   $sizeanzeige = "no";

   $extend = "jpg|gif|png";

   $extendanzeige = "no";
?>

<html>
<head>
<title>UPLOAD</title>
</head>


<div align="center">
<?PHP
		$verz=opendir ('../img/');
		while ($datei = readdir ($verz)) {
		//echo "$file <br>";
		  
		}
			//echo "<br>Verzeichnis wurde geschlossen.<br>";
	
   $fehler = FALSE;

   if ($senden) {
      if ($file_name == "") {
         echo "<BR><font color=#FF0000><b>Es wurde keine Datei ausgewählt!</b></font>";
         $fehler = TRUE;
      }

      if (!$fehler)
      if (file_exists("$pfad/$file_name")) {
         echo "<BR><font color=#FF0000><b>Dateiname schon vorhanden!</b></font>";
         $fehler = TRUE;
      }

      if (!$fehler)
      if ($sizeabfrage == "yes") {
         if ($file_size > $filesize) {
            echo "<BR><font color=#FF0000><b>Die Datei ist zu groß!</b></font>";
            $fehler = TRUE;
         }
      }

      if (!$fehler)
      if (!eregi("($extend)$", $file_name)) {
         echo "<BR><font color=#FF0000><b>Dieser Dateityp ist nicht erlaubt!</b></font>";
         $fehler = TRUE;
      }

      if (!$fehler) { 
/* Zeile 62 */   if (copy($file, $folder."/".$file_name))		 { 
		
            echo "<meta http-equiv='refresh' content='1; URL=http://$domain/xenos/admin.inc/admin.php?page=21'><BR><font color=#00FF00><b>Datei hochgeladen</b></font><BR>";
            $fehler = FALSE;
         }
         else {
            echo "<BR><font color=#FF0000><b>Datei nicht hochgeladen</b></font>";
            $fehler = TRUE;
         }

      }
   }

   if ($fehler || !$senden) {

?>

<table align="center">
	<tr>
			<td>
<form action="<?php $SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
  <div align="center"><BR>
      <br />
	  <b>Ordner der aktion auswählen:</b><br />
	  <?php
		echo "<select name='pfad' size='1'>";
		
		$folder = "../img/";
		$test = BLUB;
		if ($handle = opendir($folder))
			{
   				while (false !== ($file = readdir($handle))) 
					{
						if (($file != '.') && ($file != '..'))
							{ 
       						if(is_dir($folder.$file)) echo "<option name='pfad' value=" .$file."/".$file_name. ">" .$file ."/".$file_name. "</option>";
   							
							}
					
					}
   				closedir($handle); 
			}
			
			closedir($verz); 
		echo "</select>";
		echo "<br /><br />";
		echo "Filename: " .$file_name. "<br />";
		// $pfad gibt nichts aus
		echo "Pfad: " .$pfad;
		echo "<br />";
		// $file auch nicht
		echo "File: " .$file;
		echo "<br />";
		echo "Folder: " .$folder;
		echo "<br />";
		echo "Verzeichnis: " .$verz;
		?>
		<br />
		
		<br />
	  <b>Bitte Datei auswählen:</b>
      <BR>
      <?
   if ($sizeanzeige == "yes") {
      echo ("Maximale Größe: ".$filesize." Byte");
   }
?>
      <BR>
      <?
   if ($extendanzeige == "yes") {
      echo ("Erlaubte Dateitypen: ".$extend);
   }
?>
      <BR>
      <BR>
      <input type="file" size="30" name="file">
      <BR>
      <input type="Submit" name="senden" value="Hochladen">
  
</div>
</form>	  </td>
	</tr>
</table>

<?
}
?>

</font>
</div>
</body>
</html>


Ichh hoffe ihr könnt mir helfen.
mfg
Marko
 
PHP:
/* Zeile 62 */   if (copy($file, $folder."/".$file_name))         {
$file gibt nur den Dateinamen der hochgeladenen Datei an, nicht aber den Pfad und den Dateinamen der Datei auf dem Server. Am besten sollte man hier move_uploaded_file($_FILES['file']['tmp_name'], $folder.'/'.$_FILES['file']['name']); verwenden, und auch sonst auf das superglobale Array $_FILES zurückgreifen.
 
In $file ist der Ordner in dem das Bild geladen werden soll, also der Ordner der aus dem Dropdown ausgewählt wurde.

Irgendwie bin ich total durcheinander gekommen. :/
 
Ähm... in $file steht das Verzeichnis? Verwirrend. Ich steig bei deinem Script sowieso nicht so ganz durch, da ist viel Unnötiges drin... wie wäre es mit einmal tief durchatmen und nochmal von vorn anfangen? :)
 
Oh gott, oh Gott.... :eek:

Du hast Recht, ich werde alles verwerfen und nochmal komplett Neu schreiben.
Leider sind meine PHP-Kenntnisse noch nicht so gross. Ich nutze gerade das Projekt um weiter in die Materie ein zu steigen aber es gibt leider hier und da noch Holpersteine.

Was sind denn superglobale Variablen? sowas wie $SERVER[''] oder $_REQUEST[''] ?
 
Zuletzt bearbeitet:
Ja, $_SERVER und $_REQUEST wären Beispiele für superglobale Arrays. Selbige werden von PHP zur Verfügung gestellt, um Informationen "von außen" in das Script zu bringen. Es wird dringend empfohlen, auf diese Arrays zurückzugreifen und register_globals in der php.ini auf off zu setzen.
 
Ich habe das Script jetzt nochmal komplett Neu geschrieben.
Wenn ich es ausführe kommt die Meldung das er das Verzeichnis net findet.

Warning: copy(../img/aktion/mkBlue_fo.jpg) [function.copy]: failed to open stream: No such file or directory in /opt/lampp/htdocs/xenos/admin.inc/upload2.php on line 36

Die Vars sind auch mit den richtigen Inhalten gefüllt:

Complete Path: aktion/mkBlue_fo.jpg
ordner_selected: aktion
selected_file: mkBlue_fo.jpg

Die verzeichnis struktur auf dem Webserver sieht folgendermaßen aus:

root/
|
|
__admin.inc/upload2.php
|
|
__img/ordner/


Ich hoffe ihr könnt mir mit meinem Ordnerproblem helfen. :)

mfg

PHP:
<html>
<head>
<title>Upload</title>
</head>
<body>
<form name="upload" action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
Wählen sie den Ordner aus in den, die Datei geladen werden soll.
<br />
<select name="ordner_select">
<?php 
$folder = "../img/";  

if ($handle = opendir($folder))
			{
   				while (false !== ($ordner = readdir($handle))) 
					{
						if (($ordner != '.') && ($ordner != '..'))
							{ 
       						if(is_dir($folder.$ordner)) echo "<option name='selected_folder' value='$ordner'>$ordner</option>";
   							
							}
					}
   				closedir($handle); 
			}
?>
</select>
<br />
<br />
Wählen sie die Datei aus die Hochgeladen werden soll.
<br />
<input type="file" name="selected_file" size="30">
<?php
$img = "../img/";
if ($_REQUEST['selected_file'] && $_REQUEST['ordner_select']) {
$complete_path = ("$ordner_select/$selected_file");
 copy($img.$ordner_select."/".$selected_file, $ordner_select."/".$selected_file); /* ZEILE 36 */
	 }
	 // DEBUG INFOS
echo "<br />";
echo "Complete Path: " .$complete_path;
echo "<br />";
echo "ordner_selected: " .$ordner_select;
echo "<br />";
echo "selected_file: " .$selected_file;
?>

<br />
<input type="submit" name"send" value="Hochladen">
</form>

</body>
</html>
 
Zuletzt bearbeitet:
Na ja, [phpf]copy[/phpf] erwartet ja eine Quelle und ein Ziel... zu übergibst irgendwie zweimal das Ziel, aber keine korrekte Quelle. Wie ich ja schon geschrieben habe, solltest du [phpf]copy[/phpf] weglassen und stattdessen [phpf]move_uploaded_file[/phpf] verwenden.
 
Ich habe jetzt move_uploaded_file() einbaut, er lädt aber immernoch nichts hoch.
Mit $_FILES seh ich erstmal noch garnet durch wie das benutzt wird, ich habe mir ein paar Beispiele angesehen und garnichts verstanden. Es muss doch auch so funktionieren.

Bitte helft mir. :(

Nachtrag: Ich hab noch etwas drann gearbeitet und ich bin der Überzeugung das es so stimmen müsste. Aber es geht noch immer nichts. :/

PHP:
<html>
<head>
<title>Upload</title>
</head>
<body>
<form name="upload" action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
Wählen sie den Ordner aus in den, die Datei geladen werden soll.
<br />
<select name="ordner_select">
<?php 
$folder = "../img/";  

if ($handle = opendir($folder))
			{
   				while (false !== ($ordner = readdir($handle))) 
					{
						if (($ordner != '.') && ($ordner != '..'))
							{ 
       						if(is_dir($folder.$ordner)) echo "<option name='selected_folder' value='$ordner'>$ordner</option>";
   							
							}
					}
   				closedir($handle); 
			}
?>
</select>
<br />
<br />
Wählen sie die Datei aus die Hochgeladen werden soll.
<br />
<input type="file" name="selected_file" size="30" enctype="multipart/form-data">
<?php
$host = $_SERVER['HTTP_HOST'];
$web_path_server = "http://".$host."/xenos/".$_POST['ordner_select']."/";

$name = $_FILES['selected_file']['name'];
$type = $_FILES['selected_file']['type'];
$size = $_FILES['selected_file']['size'];
$tmp_name = $_FILES['selected_file']['tmp_name'];
$error = $_FILES['selected_file']['error'];

$folder_path_server = "/opt/lampp/htdocs/xenos/img/". $_POST['ordner_select']."/";
$uploadfile = $folder_path_server . basename($_FILES['selected_file']['name']);

if ($_REQUEST['selected_file'] && $_REQUEST['ordner_select']) {
 move_uploaded_file($tmp_name, $uploadfile);
}

	 // DEBUG INFOS
echo "<br />";
echo "UploadFile: " .$uploadfile . basename($_FILES['selected_file']['name']);
echo "<br />";
echo $size;
echo "<br />";
echo $type;
echo "<br />";
echo "web_path_server: " .$web_path_server;
echo "<br />";
echo "folder_path_server: " .$folder_path_server;
echo "<br />";
echo "ordner_selected: " .$_POST['ordner_select'];
echo "<br />";
echo "selected_file: " .$_POST['selected_file'];
?>
<br />
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
<input type="submit" name"send" value="Hochladen">
</form>
</body>
</html>
 
Zuletzt bearbeitet:
Ich merke gerade das $_FILES leer bleibt.
Warum is das so?
$_FILES funktioniert jetzt, ich hatte enctype="multipart/form-data" an der falschen stelle. :rolleyes:
Er lädt aber noch immer nichts hoch.
Habe das Script nochmal bearbeitet, ein Post höher.
 
Zuletzt bearbeitet:
Zurück