PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : was ist hier drin falsch??


Silencer
16.09.2002, 17:32:15
Kann mir jemand helfen?
was ist am folgenden code falsch?
es ist ein upload script das nur für bilddateien mit der endung bmp jpg oder gif ist und zusätzlich einen link ausgibt wie man das bild zb in einem newssystem anzeigt


<?php
$file_dir="uploads/";

$url_prefix="URL zur Domain";
$url_prefix2="2te url als relativer link";
if($userfile) {
$userfile_name=basename($userfile_name);
if(!stristr($userfile_name, ".gif")||!stristr($userfile_name, ".jpg")||!stristr($userfile_name, ".bmp") ) {
die("Sorry es sind nur BMP, JPG oder GIF erlaubt.");
}
if(copy($userfile, $file_dir.$userfile_name)) {
unlink($userfile);
echo "Image vollständig hochgeladen.<br>";
echo "Nimm als Url <h3>$url_prefix$userfile_name</h3>";
echo "oder <h3>$url_prefix2$userfile_name</h3> damit das Bild in den News erscheint";
} else {
echo "Upload fehlgeschlagen...";
}
}

?>

MiH
16.09.2002, 17:42:06
ich persönlich würde die prüfung nicht auf der dateiendung aufbauen da auch eine *.zip als *.bmp durchgeht wenn man einfach nur ein *.zip.bmp anhängt.

besser ist es da, wenn du den upload-type prüfst.
das machst du per $_FILES["userfile"]["type"] nun liefert dir das array element beispielsweise bei einem *.jpg den wert "image/jpeg" mit einem preg_match kannst du nun prüfen ob es eine erlaubte datei ist oder nicht.

statt copy + unlink kannst du einfach rename() benutzen das hat den gleichen effekt.

Silencer
16.09.2002, 17:49:38
und wie baue ich das in das script ein?

sorry aber ich habe fast 2 wochen gebraucht um dieses uploadscript zu basteln. ich bin darin noch ein totaler n00b

kann man mir das korrigierte per pm oder sowas schicken?

MiH
17.09.2002, 08:23:58
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$file_dir="uploads/";
if(isset($_POST["submit"])){
$a_patter = array("^image/gif$","^image/jpeg$","^image/png$","^image/x-MS-bmp$");
if(preg_match($a_patter,$_FILE["usrfile"]["type"])){
if($_FILE["usrfile"]["size"] > 0){
rename($_FILE["usrfile"]["tmp_name"], $file_dir.$_FILE["usrfile"]["name"]);
echo "Image vollständig hochgeladen.<br />";
}else{
echo "Datei hat keinen inhalt...";
}
}else{
echo "ne es geht nur GIF, JPG, PNG und MS-BMP";
}
?>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="usrfile" /><br />
<input type="submit" name="submit" value="senden" /><br />
</form>
</body>
</html>

Silencer
18.09.2002, 02:34:10
wenn ich das so mache bekomme ich zuerst einen parse error weil eine klammer fehlt und ist der fehler behoben bekomme ich sowas

Warning: Delimiter must not be alphanumeric or backslash in /home/web60/html/test.php on line 11
ne es geht nur GIF, JPG, PNG und MS-BMP

und zeile 11 ist das hier


if(preg_match($a_patter,$_FILE["usrfile"]["type"])){

MiH
18.09.2002, 08:36:41
das
$a_patter = array("^image/gif$","^image/jpeg$","^image/png$","^image/x-MS-bmp$");
durch das ersetzen
$a_patter = array("|^image/gif$|i","|^image/jpeg$|i","|^image/png$|i","|^image/x-MS-bmp$|i");

Silencer
18.09.2002, 10:56:03
dann bekomme ich wieder die selbe fehlermeldung

Warning: Delimiter must not be alphanumeric or backslash in /home/web60/html/test.php on line 11
ne es geht nur GIF, JPG, PNG und MS-BMP

MiH
18.09.2002, 23:36:02
sorry aber das passiert eben wenn man es nicht testen kann.
hier mal ein fnktionierender code.


<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$file_dir="uploads/";

if(isset($_POST["submit"])){
$a_patter = array("|^image/gif$|","|^image/jpeg$|","|^image/png$|","|^image/x-MS-bmp$|");
for($a=0;$a<count($a_patter);$a++){
if(preg_match($a_patter[$a],$_FILES["usrfile"]["type"])){
if($_FILES["usrfile"]["size"] > 0){
rename($_FILES["usrfile"]["tmp_name"], $file_dir.$_FILES["usrfile"]["name"]);
echo "Image vollständig hochgeladen.<br />";
$ok = 1;
}else{
echo "Datei hat keinen inhalt...";
}
}
}

if(!isset($ok)){
echo "falscher dateityp";
}
}
?>
<form action="_test.php" method="post" enctype="multipart/form-data">
<input type="file" name="usrfile" /><br />
<input type="submit" name="submit" value="senden" /><br />
</form>
</body>
</html>


arrays als patter geht nur bei preg_replace... *g*

Silencer
19.09.2002, 11:47:55
jetzt versteh ich nix mehr???


wenn ich das jetzt so mache dann klappt der upload bei gif
bei jpg jpeg bmp png sagt der dann falscher dateityp

wieso das?

irgendwo ein kleiner fehler drin?

ich bin mit meinem latein am ende

MiH
19.09.2002, 12:50:23
dann stimmen die angaben in den patter nicht.
es kann sein das der mime type bei PNG anders lautet als image/png und bei BMP genauso.

mein tip. lade einfach mal ein PNG + BMP hoch und lass dir den mime type über echo $_FILES["usrfile"]["type"]; ausgeben. dann siehst du wie der typ richtig heisst und du kannst ihn dann im array ersetzen.

Silencer
19.09.2002, 15:02:01
ok ich habe das mit der echo ausgabe gemacht und dabei kamen bei jpg bmp und png andere mime typen raus


bei jpeg
image/pjpeg

bei png
image/x-png

und bei bmp
image/bmp

somit sieht die zeile so aus


$a_patter = array("|^image/gif$|","|^image/pjpeg$|","|^image/x-png$|","|^image/bmp$|");


und es geht, danke :)

MiH
19.09.2002, 16:11:35
na also :)