2017-09-13 3 views
-2

Ich arbeite an diesem Skript über das Netzwerk, um Dateien in einen Serverordner hochzuladen. Das Skript funktioniert gut, aber es erlaubt nur JPEG-Bilder mit einem Gewicht von weniger als 2 MB. Ich habe den Code geändert, indem ich andere Formate zum Laden hinzugefügt habe, es funktioniert, leider berücksichtigt das Gewichtslimit (2 mb) nicht mehr. Wo liege ich falsch? DankeFormular-Upload-Datei auf dem Server

Originale Skript (I das Original und bearbeitete Skript anhängen)

<?php 
 
require('connect.php'); 
 
$name = $_FILES['file']['name']; 
 
$size = $_FILES['file']['size']; 
 
$type = $_FILES['file']['type']; 
 

 
$tmp_name = $_FILES['file']['tmp_name']; 
 

 
$extension = substr($name, strpos($name, '.') + 1); 
 

 
$max_size = 2000000; 
 
if(isset($name) && !empty($name)){ 
 
\t if(($extension == "jpg" || $extension == "jpeg") && $type == "image/jpeg" && $extension == $size<=$max_size){ 
 
\t \t $location = "uploads/"; 
 
     
 
     if(move_uploaded_file($tmp_name, $location.$name)){ 
 
\t \t \t $query = "INSERT INTO `upload` (name, size, type, location) VALUES ('$name', '$size', '$type', '$location$name')"; 
 
     \t \t $result = mysqli_query($connection, $query); 
 
\t \t \t 
 
\t \t \t $smsg = "Caricamento riuscito."; \t 
 
\t \t }else{ 
 
\t \t \t $fmsg = "Caricamento fallito"; 
 
\t \t } 
 
\t }else{ 
 
\t \t $fmsg = "Il file deve avere una dimesione inferiore a 2 mb e in formato jpeg"; 
 
\t } 
 
}else{ 
 
\t $fmsg = "Seleziona un file"; 
 
} 
 

 
?> 
 
<html> 
 
<head> 
 
\t <title>File Upload Script Using PHP MySQL</title> 
 
\t 
 
<!-- Latest compiled and minified CSS --> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" > 
 

 
<!-- Optional theme --> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" > 
 

 
<link rel="stylesheet" href="styles.css" > 
 

 
<!-- Latest compiled and minified JavaScript --> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
</head> 
 
<body> 
 

 
<div class="container"> 
 
<?php //echo $name; ?> 
 
<?php //echo $size; ?> 
 
<?php //echo $type; ?> 
 
<?php //echo $tmp_name; ?> 
 
     <form class="form-signin" method="POST" enctype="multipart/form-data"> 
 
     <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?> 
 
     <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>  
 
     <h2 class="form-signin-heading">Upload File</h2> 
 
\t <div class="form-group"> 
 
\t  <label for="exampleInputFile">File input</label> 
 
\t  <input type="file" name="file" id="exampleInputFile"> 
 
\t  <p class="help-block">Carica file in formato JPEG inferiori a 2 MB</p> 
 
\t </div> 
 
     <button class="btn btn-lg btn-primary btn-block" type="submit">carica</button> 
 
     </form> 
 
</div> 
 

 
</body> 
 

 
</html>

Codice modificato

if(isset($name) && !empty($name)){ 
 
\t if(($extension == "jpg" || $extension == "jpeg") && $type == "image/jpeg" || $type == "image/png " || $type == "image/gif" && $extension == $size<=$max_size){ 
 
\t \t $location = "uploads/";

Ich denke, ich vermisse die Syntax, kann mir jemand helfen?

+1

'$ Erweiterung == $ Größe <= $ max_size' scheint keinen Sinn zu machen. Meinst du nur '$ size <= $ max_size'? Um Zweifel an der Booleschen Logik zu vermeiden, wäre es besser, '&& zu schreiben ($ type ==" image/jpeg "|| $ type ==" image/png "|| $ type ==" image/gif ") && '(beachten Sie die zusätzlichen Klammern) – ADyson

+2

[Little Bobby] (http://bobby-tables.com/) sagt *** [Ihr Skript ist für SQL Injection Attacks gefährdet.] (http://stackoverflow.com/ Fragen/60174/how-can-i-verhindern-sql-injection-in-php) *** Erfahren Sie über [vorbereitet] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http : //php.net/manual/en/mysqli.quickstart.prepared-statements.php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! –

+0

* Gewicht *? Ich denke du meinst Dateigröße. – Script47

Antwort

0

Giorgio standardmäßig in pxp.ini sind 2 MB eingestellt: upload_max_filesize = 2M vielleicht in der Reihenfolge - 824. Sie müssen es mit den gewünschten Werten ändern.

1

<?php 
 
require('connect.php'); 
 
$name = $_FILES['file']['name']; 
 
$size = $_FILES['file']['size']; 
 
$type = $_FILES['file']['type']; 
 

 
$tmp_name = $_FILES['file']['tmp_name']; 
 

 
$extension = substr($name, strpos($name, '.') + 1); 
 

 
$max_size = 2000000; 
 
if(isset($name) && !empty($name)){ 
 
\t if(($type == "image/jpeg" || $type == "image/png" || $type == "image/gif" || $type == "application/x-zip-compressed") && ($size<=$max_size)){ 
 
\t \t $location = "uploads/"; 
 
     
 
     if(move_uploaded_file($tmp_name, $location.$name)){ 
 
\t \t \t $query = "INSERT INTO `upload` (name, size, type, location) VALUES ('$name', '$size', '$type', '$location$name')"; 
 
     \t \t $result = mysqli_query($connection, $query); 
 
\t \t \t 
 
\t \t \t $smsg = "Caricamento riuscito."; \t 
 
\t \t }else{ 
 
\t \t \t $fmsg = "Caricamento fallito"; 
 
\t \t } 
 
\t }else{ 
 
\t \t $fmsg = "Il file deve avere una dimesione inferiore a 2 mb e in formato: jpeg, png, gif, zip"; 
 
\t } 
 
}else{ 
 
\t $fmsg = "Seleziona un file"; 
 
} 
 

 
?> 
 
<html> 
 
<head> 
 
\t <title>Carica file</title> 
 
\t 
 
<!-- Latest compiled and minified CSS --> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" > 
 

 
<!-- Optional theme --> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" > 
 

 
<link rel="stylesheet" href="styles.css" > 
 

 
<!-- Latest compiled and minified JavaScript --> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
</head> 
 
<body> 
 

 
<div class="container"> 
 
<?php //echo $name; ?> 
 
<?php //echo $size; ?> 
 
<?php //echo $type; ?> 
 
<?php //echo $tmp_name; ?> 
 
     <form class="form-signin" method="POST" enctype="multipart/form-data"> 
 
     <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?> 
 
     <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>  
 
     <h2 class="form-signin-heading">Upload File</h2> 
 
\t <div class="form-group"> 
 
\t  <label for="exampleInputFile">Scegli file</label> 
 
\t  <input type="file" name="file" id="exampleInputFile"> 
 
\t  <p class="help-block">Carica file in formato JPEG, PNG, GIF, ZIP inferiori a 2 MB</p> 
 
\t </div> 
 
     <button class="btn btn-lg btn-primary btn-block" type="submit">carica</button> 
 
     </form> 
 
</div> 
 

 
</body> 
 

 
</html>

Dies ist die ultimative Arbeitslösung. Danke @ADyson für deine wertvolle Hilfe. Wenn es weitere Schritte gibt, um das Skript zu verbessern, werden sie gut empfangen

+0

Kein Problem. Wie in den obigen Kommentaren bereits erwähnt, sollten Sie als Nächstes die Sicherheitsanfälligkeit durch SQL Injection-Angriffe beheben. Die vom ursprünglichen Kommentar angegebenen Links enthalten einige Beispiele für die Risiken und Beispiele, wie Sie Ihre Abfragen in PHP sicher codieren können. – ADyson

Verwandte Themen