Fehler 403 bei Upload

Alles, was PHP betrifft, kann hier besprochen werden.

Fehler 403 bei Upload

Postby vinter » 28. October 2008 16:49

Hallo,
bei mir stellt sich folgendes Problem ein:

Ich möchte per PHP-Befehl ein Bilder-upload realisieren.

Script scheint ok, nach absenden erscheint aber Fehler 403 mit folgender Meldung:

Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt..

Ich arbeite lokal mit xampp auf win XP.

Kann mir jemand helfen?
Danke

Vinter
vinter
 
Posts: 7
Joined: 27. October 2008 14:10
Location: Raum Speyer/Neustadt W.

Postby Wiedmann » 28. October 2008 16:53

Script scheint ok, nach absenden erscheint aber Fehler 403 mit folgender Meldung:

Betonung auf "scheint"...

(Jedenfalls scheint das "Ziel" des Scriptes nicht zu stimmen.)
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby vinter » 28. October 2008 17:03

Ja, das würde ich nach eingehender Prüfung dann auch sagen. Soll ich's posten?
vinter
 
Posts: 7
Joined: 27. October 2008 14:10
Location: Raum Speyer/Neustadt W.

Postby glitzi85 » 28. October 2008 17:42

vinter wrote:Soll ich's posten?


Kannst du machen. Hast du das Script selber geschrieben? Bei einem fertigen kann es nämlich sein dass da eine .htaccess im Ordner liegt die die URIs mit mod_rewrite umschreibt und das bei dir nicht aktiviert ist. Dann kann das natürlich nicht funktionieren.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby vinter » 29. October 2008 17:02

Hier dann das script in den wesentlichen Auszügen:

Mit den Pfagangaben habe ich herumgespielt und erfolglos mehrere Varianten, kurz,lang, indirekt .. ausprobiert.
Code: Select all


<?php
$pfad = "localhost/projekt12/modellsammlung/admin/upload/test/";

if($datei == "none")
{
$hinweis = "Es wurde keine Datei ausgewählt";
$speichern =f alse; #Prüfvariable auf false setzen
}
else
{
if($datei_size > $maxgroesse) #vorgegebene Filegröße überschritten
{
$hinweis = "Übertragene Datei zu groß. Max.Größe:".$maxgroesse." byte";
$speichern =false;
}

if($speichern)
{
$fdatei = $datei;
$fdatei_name = $datei_name;
copy($fdatei,$pfad.$fdatei_name);
echo "<b>Datei wurde gespeichert unter: ".$pfad.$fdatei_name."</b><br><br>";
echo "<a href = ' ".$PHP_SELF." '> zurück zum Uploadfomular</a>";
exit;
?>


ht access gibt es nicht, kann ich auch leider nicht mit umgehen.
vinter
 
Posts: 7
Joined: 27. October 2008 14:10
Location: Raum Speyer/Neustadt W.

Postby glitzi85 » 29. October 2008 17:16

Die Variable $pfad kann so eigentlich überhaupt nicht stimmen. Wo liegt denn das Script und wo soll die Datei hinverschoben werden?

Beispiel:

Script: C:\xampp\htdocs\projekt12\modellsammlung\admin\upload.php

Dann müsste das so aussehen:

$pfad = "C:\xampp\htdocs\projekt12\modellsammlung\admin\upload\";

Bin mir jetzt grad nicht sicher ob PHP Back- oder Forwardslash erwartet, probiers einfach aus.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby Xardas der Dunkle » 29. October 2008 18:09

Nicht nur der Pfad sondern das ganze Script kann so nicht stimmen.

1. false wird zusammen geschrieben
2. Die Klammern stimmen nicht, mehrfach wird eine geöffnet aber nicht wieder geschlossen :P. Einrücken könnte helfen :roll:.
3. Register-Globals ist rotz ...

@Glitzi
Es ist egal welchen Slash du benutzt unter Windows frisst php beides.
Nur sollte man Backslashes mit einem zweitem Backslash escapen!

Code: Select all
$pfad = "C:\\xampp\\htdocs\\projekt12\\modellsammlung\\admin\\upload\\";
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby vinter » 29. October 2008 18:11

Nun, das Bild das ich uploaden möchte, liegt in: f:/bilder.

Das script liegt in : c/xampp/htdocs/projekt12/modellsammlung/upload

Das Zielverzeichnis ist : c/xampp/htdocs/projekt12/modellsammlung/upload/img_upload

Wie gesagt, ohne htaccess oder von mir gesetzten Beschränkungen, nur solche, die in der xampp-Standartkonfig. eingestellt sind
vinter
 
Posts: 7
Joined: 27. October 2008 14:10
Location: Raum Speyer/Neustadt W.

Postby glitzi85 » 29. October 2008 18:19

Xardas der Dunkle wrote:3. Register-Globals ist rotz ...

8)

Xardas der Dunkle wrote:Es ist egal welchen Slash du benutzt unter Windows frisst php beides.

Gut zu wissen. War mir da nicht mehr so sicher, hab schon ein weilchen nichts mehr mit PHP gemacht. Wenn die Scripte portabel bleiben sollen empfiehlt sich dann ja die verwendung von /.

Xardas der Dunkle wrote:Nur sollte man Backslashes mit einem zweitem Backslash escapen!

Fällt bei mir flach, da ich eigentlich immer Hochkomma verwende anstatt Gänsefüßchen.

@vinter:
$pfad = "C:/xampp/htdocs/projekt12/modellsammlung/upload/img_upload/";

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby Wiedmann » 29. October 2008 18:23

Mal ganz unabhängig davon wie "korrekt" der PHP-Teil ist (den ihr grad disskutiert).

vinter wrote:
Wiedmann wrote:
vinter wrote:nach absenden erscheint aber Fehler 403 mit folgender Meldung:

(Jedenfalls scheint das "Ziel" des Scriptes nicht zu stimmen.)

Hier dann das script in den wesentlichen Auszügen:

Der Fehler aus deinem ursprünglichen Post kommt durch eine falsche Definition deines Formulares im HTML.

glitzi85 wrote:Fällt bei mir flach, da ich eigentlich immer Hochkomma verwende anstatt Gänsefüßchen.

Selbst da sollte man Backslashs (u.u.) mit einem Backslash escapen.
Last edited by Wiedmann on 29. October 2008 18:27, edited 2 times in total.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Xardas der Dunkle » 29. October 2008 18:25

Code: Select all
<?php
$pfad = 'C:\\xampp\\htdocs\\projekt12\\modellsammlung\\upload';

if($datei == "none") {
    $hinweis   = "Es wurde keine Datei ausgewählt";
    $speichern = false; // Prüfvariable auf false setzen
} else {
    // vorgegebene Filegröße überschritten
    if($datei_size > $maxgroesse) {
        $hinweis    = "Übertragene Datei zu groß. Max.Größe:" . $maxgroesse . " byte";
        $speichern  = false;
    }

    if($speichern) {
        $fdatei         = $datei;
        $fdatei_name    = $datei_name;

        copy($fdatei, $pfad . $fdatei_name);

        echo "<b>Datei wurde gespeichert unter: " . $pfad . $fdatei_name . "</b><br /><br />";
        echo '<a href="' . $_SERVER['PHP_SELF'] . '">zurück zum Uploadfomular</a>';
        exit;
    }
}


Ich benutze auch immer Hochkommata und dort gibt es genau 2 Escapesequenz und eine davon heißt Backslash :P.

@vinter
Ist das eig. nur ein Ausschnitt?, den so ist das Script nicht lauffähig ...
Last edited by Xardas der Dunkle on 04. November 2008 17:40, edited 1 time in total.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby glitzi85 » 29. October 2008 18:28

Wiedmann wrote:Der Fehler aus deinem ursprünglichen Post kommt durch eine falsche Definition deines Formulares im HTML.

Stimmt, ganz vergessen. Irgendwie hat sich das grad in meinem Hirn mit dem Post wo einer die Datei nach http verschieben wollte vermischt...

Xardas hat ja das Script hübsch bereinigt. Vielleicht noch copy durch move_uploaded_file ersetzen, dazu ist es schliesslich da:

http://de2.php.net/manual/en/function.m ... d-file.php

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby vinter » 29. October 2008 19:35

Da ist ja viel Hilfe gekommen, das baut mich auf. Danke !!

Dennoch habe ich weiterhin die Fehlermeldung.

Daher poste ich mal das ganze Script:
Code: Select all

<?
if($sent): #Abfrage ob Upload gestartet

$maxgroesse=5000000; # max Größe hier jetzt 5000kbyte

$pfad = 'C:\\a_localhost\\modellbahn_static\\modellsammlung\\admin\\upload\\test\\';

$hinweis="";

$speichern=true;
if($datei == "none")
 {
    $hinweis   = "Es wurde keine Datei ausgewählt";
    $speichern = false; // Prüfvariable auf false setzen
}
else {
        // vorgegebene Filegröße überschritten
        if($datei_size > $maxgroesse)
        {
            $hinweis    = "Übertragene Datei zu groß. Max.Größe:" . $maxgroesse . " byte";
            $speichern  = false;
        }
        $dattyp="";
        $dattyp=split("\.",$datei_name);
        $dattyp[count($dattyp)-1];
        $endung=strtolower($dattyp[count($dattyp)-1]);
        if($endung!="jpg" and $endung!="png" and $endung!="gif")
        {
          $hinweis="Datei enthält kein gültiges Grafikformat";
          $speichern=false;
        }
     } // end else

if($speichern)
{
    $fdatei = $datei;
    $fdatei_name =  $datei_name;
    move_uploaded_file($fdatei,$pfad.$fdatei_name);
    echo "<b>Datei wurde  gespeichert unter: ".$pfad.$fdatei_name."</b><br><br>";
    echo "<a href='".$PHP_SELF."'> zurück zum Uploadfomular</a>";
    exit;
}
echo "<b>Fehler:".$hinweis."</b><br>"; #Fehlermeldung schreiben.

endif
?>


<form action=<? echo $PHP_SELF ?> ENCTYPE="multipart/form-data" method="post">
<input type="hidden" name="sent" value="ok" />
<b>Bitte die Upload-Datei wählen:<br></b>
<input type="file" name="datei" /><br/>
<input type="submit" name="send" value="upload" 7> <br />
(es werden nur jpg/png/gif-Dateien mit max. 5 kb zugelassen).

</form>
</html>



Darf ich nochmal auf Hilfe hoffen ?

Danke
Vinter
vinter
 
Posts: 7
Joined: 27. October 2008 14:10
Location: Raum Speyer/Neustadt W.

Postby Wiedmann » 29. October 2008 19:50

Die Variable $PHP_SELF gibt es so nicht. Siehe:
http://de.php.net/manual/en/reserved.va ... server.php


BTW:
Wenn du das nächste (oder dieses mal) ein Script debuggen tust, dann schreib als erste Anweisung "error_reporting(E_ALL);" in das Script. Dann wäre dir das gleich aufgefallen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Xardas der Dunkle » 29. October 2008 19:52

Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
    <head>
        <title>Upload</title>
    </head>
    <body>
<?php
// Abfrage ob Upload gestartet
if(isset($_POST['send'])) {
    $maxgroesse = 5000000; # max Größe hier jetzt 5000kbyte
    $pfad       = 'C:\\a_localhost\\modellbahn_static\\modellsammlung\\admin\\upload\\test\\';
    $hinweis    = '';
    $speichern  = true;
    $datei_size = $_FILES['datei']['size'];

    if($datei == "none") {
        $hinweis   = "Es wurde keine Datei ausgewählt";
        $speichern = false; // Prüfvariable auf false setzen
    } else {
        // vorgegebene Filegröße überschritten
        if($datei_size > $maxgroesse) {
            $hinweis    = "Übertragene Datei zu groß. Max.Größe:" . $maxgroesse . " byte";
            $speichern  = false;
        }

        $endung = strtolower(substr($_FILES['datei']['name'], 0, strrpos($_FILES['datei']['name'], '.') + 1));
        if($endung != "jpg" and $endung != "png" and $endung != "gif") {
            $hinweis    = "Datei enthält kein gültiges Grafikformat";
            $speichern  = false;
        }
    } // end else

    if($speichern && move_uploaded_file($_FILES['datei']['tmp_name'], $pfad . $_FILES['datei']['name'])) {
        echo "<b>Datei wurde  gespeichert unter: " . $pfad . $_FILES['datei']['name'] . "</b><br><br>";
        echo "<a href='" . $_SERVER['PHP_SELF'] . "'> zurück zum Uploadfomular</a>";
    }
    echo "<b>Fehler:" . $hinweis . "</b><br>"; #Fehlermeldung schreiben.
}
?>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
            <p><input type="hidden" name="sent" value="ok" />
            <b>Bitte die Upload-Datei wählen:<br /></b>
            <input type="file" name="datei" /><br />
            <input type="submit" name="send" value="upload" /></p>
            <p>(es werden nur jpg/png/gif-Dateien mit max. 5 kb zugelassen).</p>
        </form>
    </body>
</html>


http://de3.php.net/manual/de/features.file-upload.php
http://de3.php.net/manual/de/language.v ... ternal.php
http://de3.php.net/manual/de/ini.sect.d ... er-globals

Btw. Deutsche Variablennamen sucken :mrgreen:.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 4 guests