PHP File-Upload


phwert

Erfahrenes Mitglied
Hallo,

ich habe hier eine File-Upload-Routine, die bis auf zwei Ausnahmen das tut, was ich will. Es geht nur um lokal auf meinen Rechner vorhandene Files.
  • ich brauche unbedingt den Pfad, von dem die Files geholt werden; momentan werden nur temporäre Pfade angezeigt, z. B. "/tmp/phpz4XvIB"
  • die Files werden nicht im angegebenen Verzeichnis "upload/" gespeichert, obwohl das Verzeichnis existiert; sie werden gar nicht gespeichert (kopiert).
Hat jemand eine Idee, warum es bei den beiden Punkten hakt?

Gruß

Code:
<!doctype html>
<html>
<head>

    <?php
 
include("config.php");

if(isset($_POST['submit'])){
 
    for($i=0;  $i < count($_FILES['upload']['name']); $i++) {

  $name = $_FILES['upload']['name'][$i];
  $target_dir = "upload/";
  $target_file = $target_dir . basename($_FILES["upload"]["name"][$i]);

  // Select file type
  $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

  // Valid file extensions
  $extensions_arr = array("jpg","jpeg","png","gif");

  // Check extension
  if( in_array($imageFileType,$extensions_arr) ){
 
 
     // Insert record
     $query = "insert into images (name, image) values('".$name."', ' ')";
 
     mysqli_query($con,$query) or die(mysqli_error($con));
   

     // Upload file
     move_uploaded_file($_FILES['upload']['tmp_name'][$i],$target_dir.$name);
 

  }

    }

}
?>

<form action="" enctype="multipart/form-data" method="post">
    <input id='upload' name="upload[]" type="file" multiple="multiple" />
    <input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

Code:
create database temp;

use temp;

CREATE TABLE `images` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `image` longtext NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Code:
<?php

$host       = "localhost";  /* Host name */
$user       = "temp";       /* User */
$password   = "temp";       /* Password */
$dbname     = "temp";   /* Database name */

// Create connection
$con = mysqli_connect($host, $user, $password, $dbname);

// Check connection
if (!$con) {
    die("Connection failed: " . mysqli_connect_error());
}

?>
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
ich brauche unbedingt den Pfad, von dem die Files geholt wird; momentan werden nur temporäre Pfade angezeigt, z. B. "/tmp/phpz4XvIB"
Nach allem, was ich bisher über dieses Thema gelernt habe, ist der Pfad aus Sicherheitsgründen in Javascript nicht verfügbar.
 

Sempervivum

Erfahrenes Mitglied
die Files werden nicht im angegebenen Verzeichnis "upload/" gespeichert, obwohl das Verzeichnis existiert; sie werden gar nicht gespeichert (kopiert).
Bei mir werden sie gespeichert, nachdem ich das, was mit der Datenbank zu tun hat, entfernt habe. Möglicher Weise ein Fehler bei den Datenbankoperationen, mal die Fehleranzeige einschalten.
 

phwert

Erfahrenes Mitglied
Guter Hinweis. Nachdem ich die Verzeichnis-Berechtigungen geändert habe, werden die Files nun kopiert.
 

EuroCent

Erfahrenes Mitglied
Wenn Du wissen willst was alles bei einem Upload mitkommt dann versuch mal dieses:
PHP:
<?php
/* Zur besserer Lesbarkeit und Übersicht,
der Wert true bei print_r ist deshalb wichtig,
da Du alles aus der GLOBALEN-Variable haben willst,
mit false oder keinem Wert würde er dir nur das erste/letzte zeigen */
printf('<pre>%s</pre>', print_r($_FILES, true));
?>
 

phwert

Erfahrenes Mitglied
Und das sieht dann so aus:
Code:
Array
(
    [upload] => Array
        (
            [name] => Array
                (
                    [0] => test1.jpg
                    [1] => test2.jpg
                )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                )

            [tmp_name] => Array
                (
                    [0] => /tmp/php9RxqAm
                    [1] => /tmp/phpMQ3JNp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 75505
                    [1] => 137770
                )

        )

)
Es gibt also keine Möglichkeit, an das Verzeichnis zu kommen, in dem die Files ausgewählt wurden?
 

EuroCent

Erfahrenes Mitglied
nicht dass Ich wüsste.
Möglichkeit wäre eventuell via JavaScript, dort zu prüfen was gewählt wurde.

Das wäre noch eine Möglichkeit :)
Per PHP gibt es keine soweit mir bekannt ist :)
 

Sempervivum

Erfahrenes Mitglied
Nach allem was mir bekannt ist, ist der Zugriff auf den Dateipfad vom Browser aus Sicherheitsgründen blockiert. Nur der Dateiname ist verfügbar.