HTMLWorld - HTML, CSS, JavaScript, PHP, Java, Flash und vieles mehrHTMLWorld:   Home | Impressum
 

 
 

Anzeige 
 
HTMLWorld » Forum

Thema anzeigen - Dateiupload funktioniert nicht, was mache ich falsch?

 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Dateiupload funktioniert nicht, was mache ich falsch?

 

Neues Thema eröffnen   Neue Antwort erstellen    HTMLWorld Foren-Übersicht
   PHP
Vorheriges Thema:
Nächstes Thema:  
Autor Nachricht
Adana
Forumsteilnehmer


Anmeldungsdatum: 07.02.2010
Beiträge: 7

BeitragVerfasst am: 07.02.2010 12:11:31    Titel: Dateiupload funktioniert nicht, was mache ich falsch? Antworten mit Zitat

Hallo Leute!

Ich wühle mich nun schon länger durch Dokumentationen Tutorials usw., um endlich einen Dateiupload zu realisieren, aber ich komme einfach nicht weiter. Hier habe ich nun halbwegs verständliche Erklärungen gefunden und bin auch etwas weiter gekommen, doch am Ziel bin ich noch lange nicht.

Folgendes will ich realisieren:

In einem internen bereich sollen Zugriffsberechtigte (wird mittels .htacces schon erledigt) User die Möglichkeit haben, pdf-Files hochzuladen.
Bevor ich das ganze online bringe, werde ich es auf meinem eigenen kleinen Server daheim testen.

In der HTML-Datei habe ich folgenden Formularcode drin:
Code:
<form method="post" action="upload.php"
      enctype="multipart/form-data" >
Datei: <input name="Datei" type="file">
<input type="submit" name="senden" value="Senden">
</form>


Der Inhalt der upload.php sieht so aus:

Code:
<?php
  if (move_uploaded_file($_FILES['Datei']['tmp_name'],
   'dateien/'.$_FILES['userfile']['name']))
{echo 'Ok.';}
else{echo 'Fehler, Datei konnte nicht geladen werden.';}
?>


Nun bekomme ich folgende Fehlermeldung:

Code:
Warning: move_uploaded_file(dateien/) [function.move-uploaded-file]: failed to open stream: Is a directory in /var/www/apache2-default/feuerwehr/intern/upload.php on line 7

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/var/www/apache2-default/feuerwehr/intern/tmp/phppUFfLw' to 'dateien/' in /var/www/apache2-default/feuerwehr/intern/upload.php on line 7
Fehler, Datei konnte nicht geladen werden.


Die Berechtigung der Verzeichnisse und auch der upload.php habe ich auf 777 gesetzt. Mit Line 7 ist folgende Zeile gemeint:
Code:
   'dateien/'.$_FILES['userfile']['name']))


Was genau mache ich falsch?

Ich bedanke mich schon mal für Eure Hilfe!

[edit] Könnte wichtig sein, meine PHP-Version: PHP Version 4.4.4-8+etch4[/edit]

gruß,

Adana
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bob



Anmeldungsdatum: 08.02.2010
Beiträge: 4

BeitragVerfasst am: 08.02.2010 23:00:06    Titel: Antworten mit Zitat

Hi Adana,



versuche es mal mit:

Code:
<?php
  if (move_uploaded_file($_FILES['Datei']['tmp_name'],
   'dateien/'.$_FILES['Datei']['name']))
{echo 'Ok.';}
else{echo 'Fehler, Datei konnte nicht geladen werden.';}
?>


Ein Input mit dem Namen: "userfile" ist in Deinem Formular nicht vorhanden!

Bye!
Bob
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Adana
Forumsteilnehmer


Anmeldungsdatum: 07.02.2010
Beiträge: 7

BeitragVerfasst am: 08.02.2010 23:09:14    Titel: Antworten mit Zitat

Hallo Bob!

Hey Super, genau das war es! Herzlichen Dank!

Nun muß ich nur noch versuchen, das Script soweit auszubauen, daß die hochgeladene Datei dann auf der Seite auch als Link angezeigt wird. Ich fürchte, da komme ich um eine Datenbank nicht herum, oder?

Gruß,

Adana
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bob



Anmeldungsdatum: 08.02.2010
Beiträge: 4

BeitragVerfasst am: 08.02.2010 23:22:39    Titel: Antworten mit Zitat

Hi Adana,


das kommt darauf an...
vielleicht reicht ein wenig php - einige Zeilen, die den Inhalt eines Ordners auslesen und die gefundenen Dateien (z.B. nur jpg's) als Links in einer Liste darstellen.
Ansonsten kannst Du auch mal mit einer txt-Datei versuchen - da kannst Du auch einige Informationen speichern.

CU
Bob
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Adana
Forumsteilnehmer


Anmeldungsdatum: 07.02.2010
Beiträge: 7

BeitragVerfasst am: 08.02.2010 23:42:21    Titel: Antworten mit Zitat

Hi Bob!

Hmm, klingt interessant, allerdings habe ich auf meiner Suche nur ein Beispiel gefunden um in eine Datei zu schreiben, aber nichts darüber, wie man php ein Verzeichnis nach Dateien auslesen läßt.

Könntest Du mir 'nen Tip geben, wo ich das finden kann?

Herzlichen Dank schon mal!

Gruß,

Adana
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bob



Anmeldungsdatum: 08.02.2010
Beiträge: 4

BeitragVerfasst am: 09.02.2010 01:25:48    Titel: Antworten mit Zitat

Hallo Adana,


versuche mal das hier:

Code:
function get_files($directory) {
  $dp = opendir($directory);
  $files = array();
  while($file = readdir($dp)) {
    if($file != '.' && $file != '..') {
      $files[] = array (
        'name'=>$file,
        'mtime'=>filemtime("$directory/$file")
        );
    }
  }
  closedir($dp);
  return($files);
}


Aufruf mit:

Code:
$mydir = 'meine_bilder';
$dir_content = get_files($mydir);


Und nun einfach das array "$dir_content" ausgeben:

Code:
foreach($dir_content as $file) {
echo '<a href="'.$mydir.$file['name'].'">Bild '.$i.'</a><br />';
$i++;
}



Ohne Gewähr! Smile
Viel Erfolg!


Bye!
Bob
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Adana
Forumsteilnehmer


Anmeldungsdatum: 07.02.2010
Beiträge: 7

BeitragVerfasst am: 09.02.2010 20:56:44    Titel: Antworten mit Zitat

Hallo Bob!

Vielen lieben Dank für dies Codeblöcke! Smile

Die letzten Beiden Code-Blöcke leuchten mir ein. Bei
Code:
$mydir = 'Meine_Bilder';
setze ich für 'Meine_Bilder' dann meinen Verzeichnisnamen ein.

Aber in dem ersten Codeblock, muß das
Code:
$directory

auch durch meinen Verzeichnisnamen ersetzt werden?

Oder kann ich ihm quasi hiermit
Code:
$directory = 'Verzeichnisname';

sagen, wie das Verzeichnis heißt, das er auslesen soll? Dem
Code:
function get_files($directory)

vorangestellt?
Und diese Codeblöcke kommen dann alle mit in die upload.php (nach dem Teil für den Upload)?

Sorry, ich versuche ja auch selber so viel wie möglich zu ermitteln, aber irgendwie finde ich das gesuchte nicht. Gibt es auf dieser Seite vielleicht auch sowas wie eine Befehlsreferenz? Damit könnte ich mir dann auch selbst noch etwas mehr helfen.

Nochmals herzlichen Dank!

Gruß,

Adana
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bob



Anmeldungsdatum: 08.02.2010
Beiträge: 4

BeitragVerfasst am: 09.02.2010 22:36:02    Titel: Antworten mit Zitat

Hallo Adana,

also:
1. $mydir = 'Meine_Bilder' - hier gibst Du den Namen Deines Ordners ein (relativ zu dem ausführenden Script)

2. Du übergibst diesen Ordnernamen an die Funktion "get_files" -> get_files($mydir);

3. Die Funktion erwartet einen Parameter: $directory - Du lieferst diesen Parameter - sein Name lautet: $mydir.

4. Somit hat der Parameter innerhalb der Funktion den Wert von $mydir, also "Meine_Bilder". Du kann genauso gut schreiben: get_files('Meine_Bilder');


Mit dieser Funktion hast Du die Möglichkeit alle Dateien eines Ordners auszulesen und in ein Array zu packen - was Du damit machst und an welcher Stelle - das bleibt Dir überlassen! Smile

Um etwas zu lernen oder schnell nachzusehen:

1. http://www.selfphp.de (auch als Download verfügbar)
2. Der Klassiker: http://www.php.net/


Viel Spaß und Erfolg!!

Bye!
Robert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Adana
Forumsteilnehmer


Anmeldungsdatum: 07.02.2010
Beiträge: 7

BeitragVerfasst am: 09.02.2010 22:51:06    Titel: Antworten mit Zitat

Hallo Robert!

Herzlichen Dank für Deine Erläuterungen!
Ich habe in der Zwischenzeit herum.experimentiert und soweit klappt das alles.

Nun möchte ich aber, daß php nun das Ergebnis von foreach in eine html-Datei schreibt, die nach Möglichkeit auch noch in einem anderen Frame geladen wird (Das Formular wird in den unteren, schmalen Frame geladen und die Liste, die ja mit jedem Upload größer wird, soll dann in dem oberen, breiteren Frame geladen werden).

Folgendes habe ich zum 'in eine Datei schreiben' gefunden:

Code:
<?php
// Pfad festlegen:
$path = "./dateien/";
// Datei festlegen:
$filename = "liste.htm";
// prüfen, ob es diesen Pfad schon gibt:
if(!dirname($path)!= $path)
{
 // wenn es den Ordner noch nicht gibt, wird er angelegt
 echo "Der Pfad existiert noch nicht.<br>";
 $pfadangelegt = mkdir($path);
 if (dirname($path))
 { echo "Der Pfad wurde angelegt<br>"; }
 else
 { die("Der Pfad konnte nicht angelegt werden."); }
}

// prüfen, ob es die Datei schon gibt
if(file_exists($path.$filename))
{ echo "Die Datei existiert schon.<br>"; }
else
{ echo "Die Datei existiert noch nicht.<br>"; }

// Datei neu anlegen bzw. öffnen
$file = fopen($path.$filename, "w");
// in die Datei schreiben
$geschrieben = fwrite($file, "Mein Text");
// Datei schliessen
fclose($file);
?>


Ich habe aber keinen Plan, wie ich das nun in meiner Upload.php einbauen kann.

Vielleicht kannst Du mir da ja auch noch 'nen Tipp geben.

In jedem Falle werde ich morgen nach Feierabend mal die von Dir genannten Adressen besuchen, vielleicht finde ich da ja auch noch was...

Nochmals herzlichen Dank und Gute Nacht!

Gruß,

Adana
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Adana
Forumsteilnehmer


Anmeldungsdatum: 07.02.2010
Beiträge: 7

BeitragVerfasst am: 10.02.2010 21:01:41    Titel: Antworten mit Zitat

Hallo Robert!

Ich komme leider nicht weiter.

Zunächst einmal hätte ich es gerne, daß der Link, welcher ja mit diesem Code erzeugt wird,
Code:
foreach($dir_content as $file) {
echo '<a href="'.$mydir.$file['name'].'">Bild '.$i.'</a><br />';
$i++;


Nach Möglichkeit den Dateinamen als Linktext anzeigt, und nicht, wie in desem Fall 'Bild' und fortlaufende Nummer.

Als nächstes soll php dann den Link auch in eine html-Datei schreiben, damit der nächst, der die Seite aufruft, der vielleicht nichts hochladen möchte, sehen kann, was schon hochgeladen ist, so daß er es sich ggfs herunterladen kann.

Ich habe mal versucht den Code, den ich gefunden habe (und in meinem letzten Beitrag gepostet habe) mit der Upload.php zu kombinieren, aber das haut leider nicht hin.

[edit]So, ich bekomme es jetzt doch schon mal soweit hin, daß er mir tatsächlich Text in die von mir dafpr vorgesehene Datewi schreibt. So sieht nun der Inhalt der php-Upload aus:

Code:
<?php
  if (move_uploaded_file($_FILES['Datei']['tmp_name'],
   'dateien/'.$_FILES['Datei']['name']))
{echo 'Ok.';}
else{echo 'Fehler, Datei konnte nicht geladen werden.';}


function get_files($dateien) {
  $dp = opendir($dateien);
  $files = array();
  while($file = readdir($dp)) {
    if($file != '.' && $file != '..') {
      $files[] = array (
        'name'=>$file,
        'mtime'=>filemtime("$dateien/$file")
        );
    }
  }
  closedir($dp);
  return($files);
}

$mydir = 'dateien/';
$dir_content = get_files($mydir);


foreach($dir_content as $file) {
echo '<a href="'.$mydir.$file['name'].'">Bild '.$i.'</a><br />';
$i++;
}


// Datei festlegen:
$filename = "liste.htm";


// Datei neu anlegen bzw. öffnen
$file = fopen($filename, "w");
// in die Datei schreiben
$geschrieben = fwrite($file, "Mein Text");
// Datei schliessen
fclose($file);

?>


Jetzt müsste er mir an Stelle von 'mein Text' dort einen Link hinein schreiben, der den Namen der Datei Enthält, z. B. Dokument.pdf[/edit]

Könntest Du mir da noch mal auf die Sprünge helfen?
Ich wäre sehr dankbar dafür.

Gruß,

Adana
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Adana
Forumsteilnehmer


Anmeldungsdatum: 07.02.2010
Beiträge: 7

BeitragVerfasst am: 10.02.2010 22:26:57    Titel: Antworten mit Zitat

Hallo Robert!

So, stepp, by stepp komm ich der Sache näher.
Meinen ersten Fehler habe ich schon gefunden und zwar muss ich die " durch ' ersetzen. beim einfachen text sind es die ": "Mein text" Wenn jedoch eine bestimmte Aufgabe durch Code gefordert wird, so muß die in ' stehen:
Code:
'<a href="'.$mydir.$file['name'].'">Bild '.$i.'</a><br />'


Nun aber das merkwürdige: Wenn ich ihm nun sage, er soll den Link mit dem Dateinamen
Code:
'<a href="'.$mydir.$file['name'].'">'.$file['name'].'</a><br />'

schreiben, anstelle von
Code:
'<a href="'.$mydir.$file['name'].'">Bild '.$i.'</a><br />'

dann bekomme ich nur eine leere Seite. Damit meine ich die Datei, in die er den Link schreiben soll. Die php Ausgabe von echo selber ist korrekt.
Hier noch mal der Teil, von dem ich meine daß er aussehen müsste, aber nicht ganz funktioniert:


Code:
foreach($dir_content as $file) {
echo '<a href="'.$mydir.$file['name'].'">'.$file['name'].' '.$i.'</a><br />';
$i++;
}


// Datei festlegen:
$filename = "liste.htm";


// Datei neu anlegen bzw. öffnen
$file = fopen($filename, "w");
// in die Datei schreiben
$geschrieben = fwrite($file, '<a href="'.$mydir.$file['name'].'">'.$file['name'].'</a><br />');
// Datei schliessen
fclose($file);


Kannst Du mir sagen, warum das nicht funktioniert?

Herzlichen Gruß,

Adana
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    HTMLWorld Foren-Übersicht
   PHP
Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.