Sommige afbeeldingen worden niet geüpload
Ik heb een simpel php script geschreven dat afbeeldingen upload naar de server, er een naam aan geeft, opslaat in een SQL database etc.
Dit heb ik al vaker gedaan, en er waren eigenlijk geen problemen. Het script werkte prima.
Na ongeveer 23 afbeeldingen succesvol geüpload te hebben ging het mis. Het PHP bestand werd niet meer geladen (de browser bleef laden....) Uiteindelijk verscheen er een wit scherm, geen errors of niks... Als ik het formulier verstuur, en alleen een var_dump($_POST) doe, geeft dit ook een langdurige laadtijd en uiteindelijk een witte pagina. Als ik het formulier verstuur zonder een bestand toe te voegen, is alles in orde.
- Er was nog ruimte op de server, want de eerder geüploade bestanden deden het nu ook weer.
- Omdat ik dit formulier alleen zelf gebruik, checkt PHP niet of het bestand te groot is. De upload_max_filesize is 32M (de afbeeldingen zijn allemaal ongeveer 1,5MB)
- Ik heb uiteraard niks veranderd aan het script.
Kan iemand mij helpen?
HTML FORM:
Code (php)
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
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
<form class="form-signin" method="post" action="includes/form/fotos.php" enctype="multipart/form-data">
<h1 class="h3 mb-3 font-weight-normal">Voeg foto's toe</h1>
<input type="hidden" name="id" value="<?php echo generateRandomString(); ?>">
<input type="file" name="fileToUpload" id="fileToUpload"><br>
<br>
<p>Past bij vraag:</p>
<select class="form-control" name="vraag">
<option>--</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
</select>
<br>
<input type="checkbox" name="containingperson[]" value="Frans">
<label>Frans</label><br>
<input type="checkbox" name="containingperson[]" value="Mia">
<label>Mia</label><br>
<input type="checkbox" name="containingperson[]" value="Wanda">
<label>Wanda</label><br>
<input type="checkbox" name="containingperson[]" value="Cecile">
<label>Cecile</label><br>
<input type="checkbox" name="containingperson[]" value="Anderen">
<label>Anderen</label><br>
<select class="form-control" id="gelegenheid" name="gelegenheid">
<option>--</option>
<?php foreach($gelegenheden as $value) {?>
<option><?php echo $value; ?></option>
<?php } ?>
<option>Anders</option>
</select><br>
<input style="display: none" id="anders_gelegenheid" class="form-control" type="text" name="anders_gelegenheid" placeholder="Gelegenheid (anders)">
<br>
<button class="btn btn-lg btn-primary btn-block" name="submit" type="submit">Opslaan</button>
</form>
<h1 class="h3 mb-3 font-weight-normal">Voeg foto's toe</h1>
<input type="hidden" name="id" value="<?php echo generateRandomString(); ?>">
<input type="file" name="fileToUpload" id="fileToUpload"><br>
<br>
<p>Past bij vraag:</p>
<select class="form-control" name="vraag">
<option>--</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
</select>
<br>
<input type="checkbox" name="containingperson[]" value="Frans">
<label>Frans</label><br>
<input type="checkbox" name="containingperson[]" value="Mia">
<label>Mia</label><br>
<input type="checkbox" name="containingperson[]" value="Wanda">
<label>Wanda</label><br>
<input type="checkbox" name="containingperson[]" value="Cecile">
<label>Cecile</label><br>
<input type="checkbox" name="containingperson[]" value="Anderen">
<label>Anderen</label><br>
<select class="form-control" id="gelegenheid" name="gelegenheid">
<option>--</option>
<?php foreach($gelegenheden as $value) {?>
<option><?php echo $value; ?></option>
<?php } ?>
<option>Anders</option>
</select><br>
<input style="display: none" id="anders_gelegenheid" class="form-control" type="text" name="anders_gelegenheid" placeholder="Gelegenheid (anders)">
<br>
<button class="btn btn-lg btn-primary btn-block" name="submit" type="submit">Opslaan</button>
</form>
PHP:
Code (php)
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
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
<?php
include "../dbconn.php";
$target_dir = "../uploads/fotos/";
$imageFileType = strtolower(pathinfo($_FILES["fileToUpload"]["name"],PATHINFO_EXTENSION));
$target_file = $target_dir . $_POST['id'] . "." . $imageFileType;
//Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
$vraag = $_POST['vraag'];
$personen = json_encode($_POST['containingperson']);
$gelegenheid = htmlspecialchars(stripslashes($_POST['gelegenheid']));
if ($gelegenheid == "Anders") {
$gelegenheid = htmlspecialchars(stripslashes($_POST['anders_gelegenheid']));
}
$foto = $_POST['id'] . "." . $imageFileType;
$sql = "INSERT INTO vriendenboek_fotos (`vraag`, `personen`, `gelegenheid`, `foto`) VALUES ('$vraag', '$personen', '$gelegenheid', '$foto')";
mysqli_query($conn, $sql);
header('Location: ../../fotos.php');
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
include "../dbconn.php";
$target_dir = "../uploads/fotos/";
$imageFileType = strtolower(pathinfo($_FILES["fileToUpload"]["name"],PATHINFO_EXTENSION));
$target_file = $target_dir . $_POST['id'] . "." . $imageFileType;
//Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
$vraag = $_POST['vraag'];
$personen = json_encode($_POST['containingperson']);
$gelegenheid = htmlspecialchars(stripslashes($_POST['gelegenheid']));
if ($gelegenheid == "Anders") {
$gelegenheid = htmlspecialchars(stripslashes($_POST['anders_gelegenheid']));
}
$foto = $_POST['id'] . "." . $imageFileType;
$sql = "INSERT INTO vriendenboek_fotos (`vraag`, `personen`, `gelegenheid`, `foto`) VALUES ('$vraag', '$personen', '$gelegenheid', '$foto')";
mysqli_query($conn, $sql);
header('Location: ../../fotos.php');
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
$_FILES['fileToUpload']['error'] zal vast wel wat meer details geven.
Zie ook: https://www.php.net/manual/en/features.file-upload.errors.php
PS: Er zit wel SQL-injection in je query, dus je bent behoorlijk vatbaar voor misbruik.
Ook adviseer ik om niet te filteren en te escapen op je input, maar dit te doen op je output.
Gewijzigd op 14/07/2020 16:10:26 door - Ariën -
SQL injection is niet erg, deze pagina staat op een lokale server in mijn netwerk, en alleen ik gebruik m
Gewijzigd op 14/07/2020 16:10:49 door - Ariën -
Er is een timeout, misschien zie je wel wat meer. Zorg ervoor dat je alle foutafhandeling in PHP aanzet:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
En kijk dus ook naar de errors van je upload. Misschien krijg je daar nog een interessante error-code uit?
Over de SQL-injection: Dan alsnog kan je met een fout teken ook meteen je query vernachelen. Dus ik raad aan om de SQL-injection alsnog op te lossen. Anders heb je kans dat je wel foto's uploadt, maar dat je het pad niet in de database plaatst. Bovendien kan ook je query mislukken, dus zou een controle daarop ook niet misstaan.
En dan nog iets: Wat als iemand nu een PHP-script uploadt? Of wat anders?
mag dat ook? Want ik zie geen enkele veiligheid...
Gewijzigd op 14/07/2020 16:24:45 door - Ariën -
Wit scherm -> check je errorlog. Waarschijnlijk raakt het geheugen dat het PHP-bestand mag gebruiken op tijdens de uitvoer. Maar als dit allemaal aparte uploads zijn, waarbij je maar 1 foto per keer upload... apart?