von DJOtti |
Vielen Dank, Languitar.
Manchmal steht man da, wie ein Ochs vorm Berg. Natürlich hast du recht, jetzt funktioniert es auch.
Gruss |
von languitar |
du führst den in $sql gespeicherten Query ja gar nicht aus. dann kann auch nichts in der DB landen. |
von DJOtti |
Hallo,
kann mir auch jemand helfen, bin nicht so das Programmiergenie. Versuche mit diesem Code die Datei auf einen Server zu laden und gleichzeitig den Datei-Namen (strFileName) und die Beschreibung (bildername) in eine DB-Tabelle (newsbilder) zu schreiben. Aber irgendwie bekomme ich hiermit nur den Upload hin, er schreib mir nichts in die DB.
Wäre nett, wenn mir irgendeiner helfen könnte.
Gruss
Frank
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68: | <?php
//Verbindung zum Datenbankserver
include ("mysql.php");
?>
<?php
$pfad = "/home/www/web***/images/news"; # absoluter Pfad zum Uploadordner / Chmod 7-7-7
$numfiles = "1"; # Anzahl der Uploadfelder
$b_min = "10"; # minimale Bytes
$b_max = "1048576"; # maximale Bytes / 1024 Bytes = 1 KB / 1024 KB = 1 MB
$mb = $b_max/1048576;
$mb = round($mb, 2);
// Datei hochladen
if (isset($sendfiles)){
if ("$bildername" == "" ) {
echo ("<p> <p>Es muss mindestens der Name eingetragen werden !!!<p><a href='javascript:history.back()'>zurück</a><p>");
exit();
} else {
$numsendfiles = count($HTTP_POST_FILES);
foreach($HTTP_POST_FILES as $strFieldName => $arrPostFiles){
if ($arrPostFiles['size'] > $b_min && $arrPostFiles['size'] < $b_max){
$strFileName = $arrPostFiles['name'];
$strFileTemp = $arrPostFiles['tmp_name'];
@copy ($strFileTemp, "$pfad/$strFileName");
echo "<br><span class=\"grossschrift\"><font color=#820000><b>Datei <u>$strFileName</u> erfolgreich hochgeladen.</b></font></span><br>";
$bildername = strip_tags($bildername);
$strFileName = strip_tags($strFileName);
$bildername = str_replace('"', "'", $bildername);
$strFileName = str_replace('"', "'", $strFileName);
// $sql = "insert into (bildername,strFileName) VALUES( '$bildername', '$strFileName')";
$sql = "insert into newsbilder set
bildername = '$bildername',
strFileName = '$strFileName'";
}else{
echo "<br><span class=\"grossschrift\"><font color=red><b>Die Datei muß größer als $b_min Bytes und kleiner als $mb MB sein!</b></font></span><br>";}
}
} // if
} // if (isset($sendfiles))
?>
<table cellspacing="0" cellpadding="0" border="0"><tr><td>
Die Datei darf nicht größer als <?php echo "$mb"; ?> MB sein.<br>
<form enctype="multipart/form-data" method="post" action="<? echo $PHP_SELF ?>">
<?php
echo " Bildername:<br><input name=bildername type=text class=text size=40><br><br>";
echo "<b>$numfiles</b> ";
echo $numfiles == '1' ? 'Datei kann' : 'Dateien können';
echo ' hochgeladen werden.<p>';
for ($i=1; $i<=$numfiles; $i++){
echo "<input type=\"File\" name=\"myfile$i\" class=\"input\"><br>\n";}
echo '<br><br><input type="Submit" name="sendfiles" value="hochladen" class="button"><br>';
?>
</form> |
|
von subjective |
Ich hatte das ja schon darauf eingeschränkt, das Upload- und Seitenserver identisch wären.
Du hast natürlich recht. Bei einem solchen verteilten System, wie du es beschreibst, macht es sehr viel Sinn den zweiten Teil der Strecke FTP zu nutzen. |
von raiserle |
achso, vergessen...
bei anderen scripten von mir, wird natürlich nur http(php) benutzt,
um bilder hochzuladen...
wie bei dem mit ftp, wird der pfad dann wieder in der mysql hinterlegt....
hätte vielleicht nen anderes script raussuchen sollen, um das hier nicht
unnötig zu komplizieren. das war aber gleich das erste, was ich in die finger bekommen
habe. |
von raiserle |
@ subjective:
es macht schon sinn bei mir...
die normale ist wohl schon, wie du sagst.... nur hatte ich glaub schon dazu gesagt,
oder nicht?, das meicn webserver hier local bei mir steht.
damit die bilder nicht so viel traffic bei mir verursachen, lade ich sie per ftp zu lycos hoch
und setze den pfad zum bild in der sql ein.... |
von monolit |
Okay wenn du das so unterscheidest, hab ich mich wohl falsch ausgedrückt *g*
Ich meinte in Bezug auf den obigen Post die erste Möglichkeit ;) |
von subjective |
Drei Varianten
1. HTTP-Upload - Metadaten in die DB
2. HTTP-Upload - Alles in die DB
3. FTP-Upload - Sync in die DB
Der erste Fall ist die "normale" und wohl häufigste Variante. Einfach hochladen in ein bestimmtes Verzeichnis (möglichst außerhalb des Document-Root). Die zweite Variante ist bei verteilten Systemen denkbar, welche auf eine zentrale Datenbank zugreifen. Jedoch sollten die einzelnen Webserver die Bilder dann lokal cachen (im Dateisystem).
Der letzte Fall spielt seinne Vorteil aus, wenn man den Upload nicht mehr nur über den Browser erledigt. FTP ist deutlich schneller und kommt auch mit sehr großen Dateien zurecht. Die Vorteile kommen jedoch nur zum Tragen, wenn man einen speziellen Client nutzt.
|
von monolit |
Naja - ich denke wir können uns darauf einigen, dass je nach Nutzen die entsprechede Lösung (DB Store, FTP) praktibal ist. Das muss man eben abwägen. Hat beides seine Vor- und Nachteile. |
von subjective |
Das laden auf den "FTP" ist auch nur in Sonderfällen sinnvoll. Damit PHP Bilder auf einen FTP-SErver laden kann, müssen sie erstmal per HTTP-Upload auf den Rechner, auf welchem PHP läuft. Wenn dieser mit dem Webseiten-Auslieferer identisch ist, mahct es wenig Sinn die Dateien noch mal über FTP zu senden, da man sie auch direkt in den Zielpfad verschieben kann. |
von monolit |
Hallo,
ich möchte dir nicht den Tag versauen, kann mich aber den Vorrednern nur anschliessen.
Bildupload macht in der Regel in eine DB wenig Sinn. Die Gründe dafür haben meine Vorredner bereits genannt. Sowas macht nur in ganz speziellen Fällen Sinn.
Wobei ich denke dass so ein Thema wieder ne Diskussion auslösen könnte
Ansonsten:
Bild auf nen FTP laden -> Pfad dann in der MySQL speichert
Das ist wesentlich ressourcenfreundlicher und deine MySQL wirds dir auch danken.
Gruß Stefan |
von raiserle |
naja, ist bissel viel jetz. hab den code einfach mal rauskopiert.
ich lad die bilder zb auf tripod hoch und benutz nen anderen webserver...
meinen eignen local-webserver...
ich schreiben die daten, die benötigt werden in die mysql...
welcher tripod-acc usw... es funktioniert echt super.
falls ihr irgendwo nicht klar kommt, oder ein modifiziertes script braucht,
einfach nochmal fragen.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157: | <?php
session_start();
##################################################
# FTP Verbindung zu einem Server herstellen #
# H. Raböse #
# 17. 05. 2005 #
# v 1.0 #
##################################################
?>
<body onunload="mywin.close()">
<script LANGUAGE="javascript">
function popup()
{
mywin = window.open("timer.htm","untitled","width=310,height=400,left=0,top=0");
}
</script>
<?php
require"image.func.php";
$cnx=mysql_connect('localhost','**********','**********')or die(mysql_error());
mysql_select_db('index')or die(mysql_error());
$tab_bilderkat="pictures_cat";
$tab_bilder="pictures";
$server="ftp.mitglied.lycos.de";
$port =21;
$ftpuser="**********";
$ftppass="*********";
$upload="bilder";
$date=time();
if(!$_POST['save']){
$result=mysql_query("select * from $tab_bilder group by category order by category asc");
echo"<FORM action=\"".$_SERVER[PHP_SELF]."\" method=\"POST\" enctype=\"multipart/form-data\">
Kategorie:
<SELECT name=\"cat\">
<option selected></option>";
while($row=@mysql_fetch_array($result)){
echo"<option>".$row['category']."</option>";
}
echo"</SELECT> oder neue Kategorie <INPUT TYPE=\"TEXT\" name=\"catnew\"><br>
Datei: <input type=\"FILE\" name=\"pic\"><br>
URL: <input type=\"text\" name=\"url\"><br>
Beschreibung: <TEXTAREA name=\"beschreibung\" rows=\"5\" cols=\"20\"></TEXTAREA><br>
<INPUT TYPE=\"SUBMIT\" name=\"save\" value=\"Speichern\" onClick=popup()>
</FORM>";
}
if($_POST['save']){
/*
echo " <script language=javascript>
mywin = window.open(\"timer.htm\",\"untitled\",\"width=310,height=400,left=0,top=0\");
</script>";
*/
$cat =$_POST['cat'];
$catnew =$_POST['catnew'];
$url =$_POST['url'];
if($_POST['cat']=="" && $_POST['catnew']==""){
echo"Es muss eine Kategorie angegeben werden<br>";
exit();
}
if($catnew!="") $cat="";
$image=getimagesize($_FILES['pic']['tmp_name']);
//print_r($image);echo"<br>";
if(!$image[2]==1 || !$image[2]==2 || !$image[2]==3)
{
echo"Falsches Format. Nur <b>gif</b>, <b>jpg</b> oder <b>png</b>.<br>";
exit();
}
$name=$_FILES['pic']['name'];
$width=$image[0];
$height=$image[1];
##################################################################
### bild in den tempordner kopieren und mit temp_NAME versehen ###
##################################################################
copy($_FILES['pic']['tmp_name'],"temp/temp_".$_FILES['pic']['name']);
$filename1="temp/temp_".$_FILES['pic']['name'];
echo"Dateigröße=".filesize($filename1)." bytes<br>";
###########################################################################
#### Thumbnail erzeugen und unter thumb_NAME abspeichrn im ordner temp/ ###
###########################################################################
if(thumbnail($_FILES['pic']['tmp_name'],70,'temp',"thumb_".$_FILES['pic']['name'])!=1){
copy($_FILES['pic']['tmp_name'],"temp/thumb_".$_FILES['pic']['name']);
}
$filename2="temp/thumb_".$_FILES['pic']['name'];
$ftp_id=@ftp_connect($server,$port);
$login=@ftp_login($ftp_id,$ftpuser,$ftppass);
if((!$ftp_id) || (!$login)){
echo "<br>FTP-Connect faild!<br>";
}
else{
echo "Connected!<br>";
}
if(!@ftp_chdir($ftp_id,$upload)){ //--> in den bilderordner wecheln
echo "Directory $upload not found<br>";
}
#############################################
#### Bild wird übermittelt ##################
#############################################
if($cat!=""){
ftp_chdir($ftp_id,$cat); //--> in den categoryordner wecheln
$category=$cat;
}//--> alte category nutzen
else{
$category=$_POST['catnew'];
ftp_mkdir($ftp_id,$catnew); //--> categoryordner erzeugen
ftp_chdir($ftp_id,$catnew); //--> in categoryordner wecheln
ftp_mkdir($ftp_id,"thumb"); //--> ordenr in cat-ordner für thumbnails erstellen
}//--> neue category anlegen
mysql_query("insert into $tab_bilder set
name='$name',
dest='$url',
_describe='$beschreibung',
_width='$width',
_height='$height',
category='$category',
_date='$date' ")or die(mysql_error());
$fp1=fopen($filename1,"r");
$fp2=fopen($filename2,"r");
ftp_fput($ftp_id,"$name",$fp1,FTP_BINARY); //--> Orgbild übertragen
ftp_chdir($ftp_id,"thumb"); //--> in thumbordner wechseln
ftp_fput($ftp_id,"$name",$fp2,FTP_BINARY); //--> Thumbbild übertragen
fclose($fp1);
fclose($fp2);
unlink($filename1);
unlink($filename2);
if(ftp_close($ftp_id)) echo "Connetion closed<br>";
echo " <head>
<meta http-equiv=\"refresh\" content=\"0; URL=$_SERVER[PHP_SELF]\">
<!-- ... andere Angaben im Dateikopf ... -->
</head>";
//echo "<script language=javascript>mywin.close()</script>";
}//-- ende post[save]
?> |
gruß raiserle aka Henrik |
von zeTo |
ich weiß es zwar nicht, aber ich könnte mir vorstellen, dass es genau so ist, wie beim email mit anhang versenden mit php.
d.h. man muss es erst encode:
base64_encode($file_data)
aber wie gesagt, ich hab keine ahnung, ich hab so was noch nie gemacht... |
von jans16 |
DIe Bilder die ich testweise mit phpMyAdmin in die DB hochgeladen habe konnte ich auch einfach mit folgender bild.php (gekürzt) ausgeben:
1:
2: | header("Content-Type: image/".$dsatz['format']);
echo $dsatz['bild']; |
Aber bei dem oben gegannten PHP-Code landet gar nichts in der DB.
Mit außnahme, wenn es sich bei der hochgeladenen Bild-Datei nicht wirklich um ein Bild handelt also eine 0 Byte Datei oder eine Text-Datei die 'nur' *.jpg heißt.
Deshalb muss doch warscheinlich noch eine Umwandlung des Strings stattfinden, bevor er an die DB geschrieben wird.
PS: Aus bestimmten Gründen wollte ich eigendlich schon die Bilder selbst in der DB speichern und nicht nur die Pfade, und das sollte doch eigendlich auch mit PHP realisierbar sein... |
von pizzataxi |
Nur mal als Vorschlag:
Du kannst doch die Pfade zu den hochgeladenen Bildern in der Datenbank speichern.
Das hat den Vorteil, dass Du - wie Rieke schon geschrieben hat - die DB nicht unnötig aufblähst und alle Vorteile von Datenbanken ausnutzen kannst.
Du würdest also zeilenweise die Tabelle auslesen und setzt in den <img> Tag dann den Bildpfad aus der DB. |
von Rieke |
Ich kann sowas zwar nicht programmieren, aber ich weis das Bilder als text Datei geöffnet eben auch genau aus sollchen Zeichenketten besteht.
Funktioniert die Ausgabe nicht oder landet gar nichts in der DB ?
Noch bessere Frage... warum zur Hölle damit in die DB .. Bilder in die DB zu packen ist Verschwendung, es bläht eine Datenbank unnötig auf .. je aufgeblähter die DB ist um so mehr Performance geht flöten... in den meißten referenzbüchern wird davon abgeraten und das zu Recht |
von jans16 |
Hallo!
Ich wollte gern Bilder vom Upload per PHP in einer MySQL Datenbank speichern.
Habe das mit folgenden PHP-Code Veruscht:
(der Name vom File-Formularfeld heißt 'bild', und ein weiteres Text-Feld 'bild_name')
1:
2:
3:
4:
5:
6: | $format = substr($_FILES['bild']['type'],6);
$handle = fopen ($_FILES['bild']['tmp_name'], "rb");
$datei = fread($handle, filesize($_FILES['bild']['tmp_name']));
fclose ($handle);
$sql = 'INSERT INTO `bilder` (`name`, `bild`, `format`) VALUES ("'.$bild_name.'", "'.$datei.'", "'.$format.'")';
mysql_query($sql); |
Ich habe es auch schon mit 1: | $datei = file_get_contents($_FILES['bild']['tmp_name']); |
versucht, leider ohne erfolg.
Wenn ich Test-Weise $datei ausgebe bekomme ich solch Zeichenketten ÒØ\¯”îΪACwØÝûuúU*W
Der Feld-Typ von 'bild' in der DB ist "mediumblob"
Hat jemand ne Idee was ich da noch falsch mache???
Gruß Jan |
|