Skriptproblem
Alex
- php
0 Christoph Schnauß0 Alex0 Christoph Schnauß
0 mbr0 dedlfix
Hallo.
Ich habe ein Skript zum uploaden von Bildern geschreiben.
Diese Bilder weden beim uploaden umbenannt in 1, 2, 3 usw . jpg.
Wenn ich jetzt jedoch dieses Skript auf meinen Webspace hochlade, werden beim uplaoden keine Bilder übertragen.
<?php
include "inc/constant.php";
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());
$directory="bildergalerie/";
$file = $_FILES['probe']['tmp_name'];
$max_bilder = count(glob('bildergalerie/*'));
$bilder = $max_bilder++;
$name = "$bilder.jpg";
if (is_array($name)) rsort($name);
if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {
move_uploaded_file($file,$directory.$name);
printf("Die Datei %s steht jetzt als " .
"$bilder.jpg zur Verfügung.<br />\n",
$_FILES['probe']['name']);
printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
$_FILES['probe']['size'], $_FILES['probe']['type']);
echo" <a href="adminbereich.php">Zurück</a>";
}
$sql = "INSERT INTO bildergalerie
(Bild,Beschreibung,Datum)
VALUES
('".$bilder.jpg."',
'".$_POST['beschreibung']."',
NOW())";
mysql_query($sql) OR die(mysql_error());
?>
Kann mir jemand sagen was hir dran falsch ist und was ich vllt besser machen könnte?
mfg Alex
hallo,
Kann mir jemand sagen was hir dran falsch ist
So weit ich sehe, hat dein Script keine Ahnung davon, daß es Bilder von deinem Rechner holen soll, sondern sucht auf dem Server herum, wo es natürlich keine Bilder findet. Ich kann nicht erkennen, daß dein Script überhaupt irgendwas mit "Upload" zu tun hat - es sei denn, das steckt in dem zweiten Script "constant.php" irgendwo drin. Aber ich bin eh kurzsichtig und sehe die für einen Upload nötigen Scriptzeilen vielleicht einfach nicht, weil ich meine Brille vor 12 Stunden das letztemal geputzt habe.
und was ich vllt besser machen könnte?
Eventuell im PHP-Handbuch noch einmal gründlich nachlesen.
Grüße aus Berlin
Christoph S.
<h2>Bildergalerie Upload</h2>
<form action="bilderupload.php" method="post" enctype="multipart/form-data">
<input type="file" name="probe" />
<p>Inhalt:<br><textarea name="beschreibung" cols="50" rows="10"></textarea></p>
<input type="submit" value="Hochladen!" />
</form>
----
Das ist das script zum uploaden. Hatte das nicht mit begeschrieben.
Mir werden immer diese Fehlermeldungen angezeigt wenn ich dies über meinen Webspace laufen lasse. Local funktioniert alles.
----
Warning: move_uploaded_file(bildergalerie/1.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /srv/www/vhosts/alexander-surmann.de/httpdocs/bilderupload.php on line 14
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpoLWntq' to 'bildergalerie/1.jpg' in /srv/www/vhosts/alexander-surmann.de/httpdocs/bilderupload.php on line 14
hallo,
<form action="bilderupload.php" method="post" enctype="multipart/form-data">
Das ist das script zum uploaden. Hatte das nicht mit begeschrieben.
Nö, das ist ein Formular, das dein Script aktivieren soll. Und in dem Script steckt vermutlich dein "Upload-Problem". Ist denn dieses "bilderupload.php" das von dir bereits gepostete Script?
Warning: move_uploaded_file(bildergalerie/1.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /srv/www/vhosts/alexander-surmann.de/httpdocs/bilderupload.php on line 14
Oh. "Permission denied" deutet in diesem Fall auf noch weit mehr Probleme hin. Möglicherweise ist dein Script sogar korrekt, aber dein Server kann nichts damit anfangen. Was steht denn in Zeile 14 deines Scripts?
move_uploaded_file($file,$directory.$name);
ist möglicherweise die "angemeckerte" Zeile. Der Fehler müßte also in einer der drei Variablen stecken. Eine davon ist
$directory="bildergalerie/";
Ich bin mir zwar keineswegs sicher, aber ich meine, hier fehlt ein vorangestellter Slash, so daß es eigentlich "/bildergalerie/" heißen müßte. Außerdem klebst du erst in dieser "Klammer" $directory und $name zu einem String zusammen - prinzipiell sollte das zwar gehen, ich würde es aber bereits vorher im Script in einer weiteren Variablen zusammenführen.
Es bleibt dir nichts anderes, als genau nachzuschauen, welchen Inhalt deine drei Variablen zur Laufzeit haben.
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpoLWntq' to 'bildergalerie/1.jpg' in /srv/www/vhosts/alexander-surmann.de/httpdocs/bilderupload.php on line 14
Du stellst irgendwas mit deinem temp-Verzeichnis an, wobei deine Bilder eben erstmal zu solchen Monsternamen wie "phpoLWntq" kommen, die dann wieder in einfachere Namen umgewandelt werden sollen. Möglicherweise handelt es sich aber um einen Folgefehler, weil eine deiner drei Variablen nicht korrekt ist und "/tmp/phpoLWntq" gar nicht erst erstellt, folglich also auch nicht umbenannt und verschoben werden kann.
Grüße aus Berlin
Christoph S.
Zu Antwort 1 bzw. Frage.
Die "bilderupload.php" Datei ist das von mir bereits gepostete Skript.
Zu 2
Ich habe mal einfach einen Slash davor gemacht. Auf meinem Space ist die erste Fehlermeldung weggegangen. Auf meinem localen server jedoch nicht also dort ist sie aufgetaucht.
Zu 3
Ich habe doch nichts von einem tmp Verzeichniss angegeben. Warum will das Skript denn die Bilder in dieses Verzeichniss kopieren und dann noch so komisch umbennen? Kann der nicht einfach Die Bilder sofort in das Verzeichniss "bildergalerie" kopieren?
mfg Alex
PS: schon mal vielen Dank für deine Antworten.
Hi Alex,
Zu 2
Ich habe mal einfach einen Slash davor gemacht. Auf meinem
Space ist die erste Fehlermeldung weggegangen. Auf meinem
lokalen Server jedoch nicht also dort ist sie aufgetaucht.
Bist du dir ganz Sicher dass, die Verzeichnisstruktur auf dem
Lokalen Test-Server, und dem Live-Server identisch ist?
/srv/www/vhosts/alexander-surmann.de/httpdocs/bilderupload.php
Sollte der Live-Server sein, bei dir zu Hause (oder im Buero), sollte
die Verzeichnisvariable etwas anders aussehen.
Zu 3
Ich habe doch nichts von einem tmp Verzeichnis angegeben.
Das geschieht Automatisch. PHP braucht ein Verzeichnis um
Dateien zu Speichern, die nicht Bestaendig sind. Solche Dateien
nennt man dann "Temporaere Dateien". Dazu gehoeren, Upload
oder Session Dateien.
Warum will das Skript denn die Bilder in dieses Verzeichnis
kopieren und dann noch so komisch umbenennen? Kann der nicht
einfach Die Bilder sofort in das Verzeichnis "bildergalerie"
kopieren?
Weil die Datei erst einmal auf den Server kopiert werden muss.
Die Datei wird auf den Server ueberspielt, und dieser weiss ja gar
nicht, was er damit anfangen soll. Das Bedeutet, der Server speichert
die Datei, zuerst einmal im Temp Verzeichnis.
Erst dann kannst du ueber das Upload-Script auf die Datei
Temporäres Verzeichnis, in dem Dateien während des Uploads
gespeichert werden. Für dieses Verzeichnis muss der Benutzer,
unter dem PHP läuft, Schreibberechtigung haben. Wenn hier nichts
angeben wird, benutzt PHP das Standardverzeichnis für temporäre
Dateien auf Ihrem System.
gruesse aus'm ruhrpott
jens mueller
Hi,
Du stellst irgendwas mit deinem temp-Verzeichnis an, wobei deine Bilder eben erstmal zu solchen Monsternamen wie "phpoLWntq" kommen, die dann wieder in einfachere Namen umgewandelt werden sollen.
Nicht er stellt etwas mit dem temp-Verzeichnis an. Das macht der Server ;-)
Wenn eine Datei hochgeladen wird, wird sie unter einem eindeutigen kryptischen Namen
im temp-Verzeichnis abgelegt. Mit move_uploaded_file kann man sie dann an die
gewünschte Stelle verschieben.
Als erstes würde ich mal den Zielpfad absolut setzen. Dann solltest Du auf Deinem
Webspace die Berechtigungen für den Ordner überprüfen. Die Datei wurde übertragen,
sonst wäre laut Deinem Code move_uploaded_file nicht ausgeführt worden.
LG
Hallo Alex,
wie ja im weiteren Thread festgestellt wurde, liegt das Problem anscheinend darin, dass die Funktion move_uploaded_file() ein false zurückgibt und zusätzlich die Warnung generiert (siehe die Beschreibung auf www.php.net)
Hast du schonmal probiert, den Aufruf zu kapseln? also etwa so:
if(move_uploaded_file($file,$directory.$name))
{
printf("Die Datei %s steht jetzt als " .
"$bilder.jpg zur Verfügung.<br />\n",
$_FILES['probe']['name']);
}
else
{
printf("Es gab einen Fehler beim Hochladen der Datei. Fehlermeldung:%s",$_FILES['probe']['error']);
}
Liebe Grüße
mbr
echo $begrüßung;
Hast du schonmal probiert, den Aufruf zu kapseln? also etwa so:
if(move_uploaded_file($file,$directory.$name))
[...]
else
{
printf("Es gab einen Fehler beim Hochladen der Datei. Fehlermeldung:%s",$_FILES['probe']['error']);
}
move\_uploaded\_file() schreibt nicht rückwirkend einen Meldungstext in das $\_FILES-Array. Dieses wird vor dem Scriptstart angelegt und von PHP nicht weiter verändert.
move\_uploaded\_file() kann aufgrund eines vorangegangenen Fehlers fehlschlagen, aber dieser lässt sich bereits vor Aufruf von move\_uploaded\_file() oder is\_uploaded\_file() aus dem entsprechenden Werten in $\_FILES erkennen.
echo "$verabschiedung $name";