Wat ik wil:
Reeds een bestaande database "vangst", (zie topic van 12/3/2015)waarin ik de gegevens bijhoud van elke keer als ik en mijn zoon gaan vissen.(Dit was een eindwerk voor het volwasseneonderwijs,deze module is reeds afgelopen, maar php boeit me zodanig dat ik steeds meer mogelijkheden wil ontdekken.)
Elke record in mijn database is een gevangen vis.
Indien ik geen vissen gevangen heb,voeg ik ook een record toe, maar met vangst = 0.
Ik wil bij de records waar ik vis gevangen heb een kolom waar een thumbnail komt te staan van de gevangen vis. Dit is geen verplicht veld, indien ik niks van, bestaat er geen foto.
Wat ik heb:
een pagina waar ik de gegevens verzamel, bestaat momenteel uit 2 form's :
<?php
$target_dir = "toegevoegde_foto";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
De foto's wil ik bewaren in de map "toegevoegde_foto".
Als ik op de knop upload image druk , krijg ik deze foutmelding (ik doe dit met een jpg bestand):
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in C:\Users\Tony\Desktop\USBWebserver v8.5 - kopie\8.5\root\Eigen website120\publiek\Mijn_gezin\Rens\upload.php on line 8
File is not an image.Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, your file was not uploaded.
$_FILES["fileToUpload"]["tmp_name"] is leeg, en ik vermoed dat je de dimensies pas kan achterhalen als het bestand daadwerkelijk geupload is naar de juiste locatie.
Je, maar een afbeelding in de /tmp-map is niet zichtbaar voor iedereen. Dus ik denk dat hij daarvan niet de dimensies op kan halen.
Voor het script wel, maar het is enkel dat - een naam. Ik denk dat je het pad naar de tmp-map nog moet toevoegen. Je draait immers het script zelf niet in je tmp-map... :)
EDIT: never mind, tmp_name zou alle informatie moeten bevatten - ik zou zeggen, loop de foutmeldingen na, aan welke conditie(s) wordt niet voldaan die zorgen voor de melding(en)?
Het bestand bestaat gedurende de "lifetime" van het script, daarna zal deze opgeruimd worden. Daarom move je ook meteen het bestand in hetzelfde script naar zijn uiteindelijke locatie.
Maar dit is een prima (en bij uitstek de) plek om een bestand te inspecteren - als deze niet voldoet kun je deze laten staan, na afloop van het script wordt deze (als het goed is) automatisch opgeruimd.
Hoi Tony, ik gebruik "bijna" exact dezelfde code om mijn afbeeldingen in een directory te zetten. Ik kan maar twee dingen verzinnen als ik naar je code kijk, namelijk in regel 2, de target directory. -- $target_dir = "toegevoegde_foto"; -- Als je daar eens $target_dir = "toegevoegde_foto/"; -- Dus een slash toevoegen. Ook moet zorgen dat je target directory de juiste autorisatie heeft voor PHP om erin te schrijven, ik zet de autorisatie naar 777, anders mag PHP er niet in schrijven. Andere dingen kan ik niet verzinnen, je code is op een paar kleine dingen na gelijk aan die van mij.
Je kunt ook even kijken in je PHP error log om te kijken wat er mis gaat.
Ik zou gewoon bij het begin beginnen. Je eerste foutmelding is:
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty
Dit is een interessant gegeven. $_FILES['fileToUpload']['tmp_name'] is dus blijkbaar leeg, oftewel, er is waarschijnlijk een probleem met het uploaden.
Heb je gekeken naar de upload error status code in $_FILES['fileToUpload']['error']? Deze moet gelijk zijn aan 0. Dit is eigenlijk het eerste wat je zou moeten controleren bij de verwerking van een upload denk ik, maar dat terzijde.
In mijn Usbwebserver (versie 8.6, waar ik de bovenstaande code mee heb gecontroleerd) staat er geen standaard upload_tmp_directory ingesteld. Het gevolg hiervan is dat er teruggevallen wordt op een default, in mijn geval C:\Users\MijnUserName\AppData\Local\Temp\. Mogelijk heb jij daar geen lees- of schrijfrechten of bestaat deze directory niet?
Dump anders eens het hele $_FILES array in je verwerk-stap wanneer je een geldige afbeelding upload:
Wat zie je op je scherm verschijnen?
En met de eerdergenoemde toevoeging van ini_set + error_reporting bovenaan je script, mogelijk zie je nu notices/warnings?
EDIT: en wat @Bert zegt - errorlogs zijn je vriend. Ook zijn verbetering met een slash klopt. In zijn algemeenheid: als je dit soort dingen wilt gaan debuggen: dump gewoon veel en vaak informatie naar je scherm, deze vertelt je meer over de "toestand" van je applicatie / variabelen die je meestal in de richting van het probleem (en daarmee de oplossing) stuurt.
Ik heb even het uploaden van foto's losgekoppeld van mijn site om zo mijn vorig werk te vrijwaren van prutsen.
Ik heb in het php.ini bestand dit aangevuld :;upload_tmp_dir =C:\Users\Tony\Desktop\USBWebserver v8.5 - kopie\8.5\root\Eigen website120\publiek\Mijn_gezin\Rens\toegevoegde_foto
ik post even de aangepaste code: (heb de raad van thomas toegepast, en de schuine streep van Bert werd aangepast)
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>
<!-- dit aanpassen in het php.ini bestand
; http://php.net/upload-tmp-dir
;upload_tmp_dir =C:\Users\Tony\Desktop\USBWebserver v8.5 - kopie\8.5\root\Eigen website120\publiek\Mijn_gezin\Rens\toegevoegde_foto
-->
<?php
if (isset($_POST["submit"])) {
echo '<pre>'.print_r($_FILES, true).'</pre>';}
$target_dir = "toegevoegde_foto/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
en deze fout krijg ik :
Array
(
[fileToUpload] => Array
(
[name] => IMG_3745.jpg
[type] =>
[tmp_name] =>
[error] => 1
[size] => 0
)
)
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in C:\Users\Tony\Desktop\USBWebserver v8.5 - kopie\8.5\root\upload zelf foto\upload.php on line 18
File is not an image.Sorry, your file was not uploaded.
[size=xsmall]Toevoeging op 19/04/2015 23:01:22:[/size]
ik weet er niet zo veel van maar loopt het in de richting dat de tmp_name leeg is en dat dit de naam word van het bestand dat geupload word. dus met andere woorden dat hij niet weet onder welke naam hij het bestand moet wegschrijven.
Hierbeneden de code van mij die zeker weten werkt. Ik heb alleen in het begin wat aanpassingen gemaakt omdat ik de directory aanpas naar de userID. Maar dat is niet belangrijk.
Tevens laat ik PHP checken of de directory bestaat en zo niet dan wordt de DIR aangemaakt met de juist autorisatie.
Ik denk nog steeds dat je een autorisatie probleem hebt. Ik zou voorstellen dat je je directory verwijderd en de code de directory laat aanmaken.
Dus voor jou :
$filename = "toegevoegde_foto/";
if (!file_exists($filename)) {
mkdir($filename, 0777);
}
Je laat dan PHP de DIR aanmaken en dan ben je zeker dat de autorisatie goed staat.
if (!file_exists($filename)) {
mkdir("upload/" . $dirname, 0777);
}
$target_file = $filename . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
$uploadOk = 1;
} else {
echo "De file is geen afbeelding.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, deze file bestaat al.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, deze file is te groot.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, alleen JPG, JPEG, PNG & GIF files zijn toegestaan.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, uw file is niet geladen.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
header( "Location: invoer-aanbieding.php" );
} else {
echo "Sorry, er was een fout in het uploaden van uw file.";
}
}