# Apache 2.0 + PHP Probleme



## Cemil (17. August 2004)

Hi Leute,
bin am Ende.

Versuche mit PHP eine Datei hochzuladen und dann in eine Datenbank zu speichern, aber vergebens. Jedesmal erhalte ich die Meldung:

Forbidden
You don't have permission to access /beispiele/< on this server.
--------------------------------------------------------------------------------
Apache/2.0.50 (Win32) mod_ssl/2.0.50 OpenSSL/0.9.7c PHP/5.0.1 Server at localhost Port 80

Hier der Code:

index.html

```
<html>
<head>
<title> Bild upload direkt aus dem Browser </title>
</head>
<body>
<form action="<?=$PHP_SELF?>" method=post>
<input type=hidden name=modul value=1>
Wählen Sie eine Datei
<input type=file name=datei> <br>
<input type=submit value=hochladen>
</form>
</body>
</html>
```

index.php

```
<?php
mysql_connect("localhost","root","");
mysql_select_db("test");

if($modul ==1)
{
print "<html><head><title>Bild in eine mysql Datenbank einspeisen mit PHP</title></head>
<body>";
$bild=addslashes(fread(fopen($datei, "r"), filesize($datei)));
$Name=$HTTP_POST_FILES['datei']['name'];
mysql_query("insert into bilder(Name,bild) values ('$Name','$bild')");
$zahl= mysql_insert_id();
echo "Der Name des Files ist ".$HTTP_POST_FILES['datei']['name']."<br>";
echo "Der Grösse des Files ist ".$HTTP_POST_FILES['datei']['size']."<br>";
echo "Der File ist vom Typ: ".$HTTP_POST_FILES['datei']['type']."<br>";
echo "Der Name des Files ist ".$HTTP_POST_FILES['datei']['name']."<br>";
$dateiname=$HTTP_POST_FILES['datei']['name'];
echo "Der File wurde upgeloaded. Die Nummer des Bildes ist $zahl";
print "</body></html>";
}

if($modul ==2)
{
$zeiger=mysql_query("select Bild from bilder where Ident=$nummer");
$ergebnis=mysql_fetch_array($zeiger);
print $ergebnis['bild'];
}

if($modul ==3)
{
$zeiger=mysql_query("select Bild from bilder where Ident=$nummer");
while($ergebnis=mysql_fetch_array($zeiger))
{
print $ergebnis['bild'];
}
}
mysql_close();
?>
```

Ich bedanke mich im voraus für eure Hilfe.

Grüsse


----------



## Ben Ben (17. August 2004)

Das liegt aber nicht an der php-Datei, sondern eher an den Zugriffsrechten von Apache auf das Verzeichnis.
Welche Rechte bzw. Owner und Group hat denn das Verzeichnis beispiele?
Ansonsten mal den zetlich passenden Eitnrag aus der error.log oder ggf. auch access.log von Apache posten.

Zu denem Code:
Fehlerbehandlung solltest du durchaus einbauen, sowohl bei den SQL-Sachen, als auch bei fopen und co.
$_HTTP_POST_FILES ist deprecated. Stattdessen $_FILES verwenden.
Logisch sinnvoller wäre deine If-Konstruktion, wenn du if, elseif, elseif, else verwendest. Denn so könnte der Anweisungsblock von if($modul==1) ausgeführt werden, und anschliessend auch der Anweisungsblock von if($modul==2), oder ein anderer, wenn beispielsweise $modul warum auch immer im ersten Anweisungsblock den Wert 2 annimmt.....
Nur so nebenbei...


----------



## Cemil (17. August 2004)

Hallo Ben Ben,
erst einmal vielen Dank für Deine Antwort.



> Das liegt aber nicht an der php-Datei, sondern eher an den Zugriffsrechten von Apache auf das Verzeichnis.
> Welche Rechte bzw. Owner und Group hat denn das Verzeichnis beispiele?


 Ehrlich gesagt, weiss ich gerade nicht wovon Du sprichst. Habe sehr wenig Kenntnisse mit dem Apache 2.0.
Kannst Du mir vielleicht Schritt für Schritt erklären, wie ich das ganze einstellen kann oder vielleicht gibt es eine Website, wo das ganze erklärt wird. Habe mich bis heute dumm und dämlich gesucht, aber leider nichts vernünftiges gefunden, oder besser gesagt gefunden, aber nicht nachvollziehen können .

Ich sende Dir die access.log und error.log von Apache.

access.log
127.0.0.1 - - [17/Aug/2004:11:34:19 +0200] "GET /beispiele/ HTTP/1.1" 304 -
127.0.0.1 - - [17/Aug/2004:11:34:34 +0200] "POST /beispiele/<?=$PHP_SELF?> HTTP/1.1" 403 332

error.log
[Tue Aug 17 11:28:54 2004] [notice] Parent: Created child process 3316
[Tue Aug 17 11:28:54 2004] [notice] Disabled use of AcceptEx() WinSock2 API
[Tue Aug 17 11:28:55 2004] [notice] Child 3316: Child process is running
[Tue Aug 17 11:28:55 2004] [notice] Child 3316: Acquired the start mutex.
[Tue Aug 17 11:28:55 2004] [notice] Child 3316: Starting 250 worker threads.
[Tue Aug 17 11:28:55 2004] [notice] Child 3316: Listening on port 443.
[Tue Aug 17 11:28:55 2004] [notice] Child 3316: Listening on port 80.
Grüsse


----------



## Ben Ben (17. August 2004)

Hmmm ok. Ist wohl ein Windowssystem?
Der Fehler liegt würde ich sagen doch bei denen Skripten 

Denn die index.html wird vom Apache als html-Datei behandelt.
Dennoch verwendest du ein Teil von PHP:



> <form action="<?=$PHP_SELF?>" method=post>


Zum einen müsste das <?php echo $PHP_SELF ?> sein und die Datei müsste zum andern dann auch die Endung .php haben.

Ich würde stattdessen aber einfach eine absolute Datei angeben, also Beispielsweise dann so:


> <form action="index.php" method="post">


----------



## Cemil (17. August 2004)

Wenigstens erhalte ich jetzt keine Fehlermeldung.

Ich denke, das im PHP-Code keine Fehler enthalten sind, aber Zugriff auf die Datenbank habe ich nicht, um die Bilder aufzulisten.

Werde mich mal an die Socken machen.

Nochmals vielen Dank für Deine Bemühungen.

Grüsse


----------

