Upload foto elders op website via een upload script
Nieuw op het forum dus hoop me vraag goed zit. Ik ben al lang bezig met een "upload" & "wijzig foto" script in php.
Op een locatie elders op de website wil ik een foto online kunnen wijzigen.
deze foto heeft b.v. foto2.png en heeft een formaat 150px x 150px
Nu heb ik een upload script nodig wat later in een beveiligde htaccess (wat mij wel lukt) bestand komt.
Maar ik moet een begin hebben...
Ik ben al lang bezig geweest met de volgende site:
https://www.phphulp.nl/php/script/php-algemeen/image-upload-script/1484/imageuploadscript/1086/
Ik ben al war rond gaan kijken en een upload script lukt wel, maar de locatie waar de foto heen gaat is me een raadsel.
Hoe kan ik een foto online wijzigen die elders op een locatie staat, ZONDER ik in ftp dit moet wijzigen?
note: Ik bezit een eigen directadmin & webhost (handig voor mysql)
iemand een idee hoe ik op weg geholpen kan worden in php?
afbeelding_kat.png) opslaat in de database?
Maar wat bedoel je met wijzigen? De formaten? Of zoek je een editor?
Niet voor een image, maar gewoon _een_ bestand.
Dan leer je daarmee hoe je een bestand uploadt, waar het dan blijft en hoe je het op een plek naar wens zet.
Daarna kun je dat uitbreiden tot een script dat zorgt dat het alleen plaatjes zijn,
en nog een stap verder zou het resizen zijn.(al is uit je post niet duidelijk of dat een doel is).
De basis van een uploadscript staat hier uitgelegd:
https://www.phphulp.nl/php/tutorial/php-algemeen/uploaden/848/uploaden/2382/
Fijn jullie me op weg helpen.
Ik heb besloten vanaf een lege notepad te beginnen, om het overzichtelijker te maken.
ik heb een bestand gemaakt met de naam "upload.php"
Ik heb de volgende code hierin gezet:
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="file" name="naam_formveld_uploadfile"/><br />
<input type="submit" value="Upload!"/>
</form>
En de resultaat is: https://www.melodyexpress.nl/upload.php
ik kan dus een (afbeelding) uploaden....
Hierna heb ik een map aangemaakt met de naam "afbeeldingen" en 1 foto erin gezet met de naam "foto2.png" (150x150 pixels)
Nu heb ik op: https://www.melodyexpress.nl/afbeeldingen/foto2.png een afbeelding staan die ik gewijzigd wilt hebben naar b.v. foto1.png
ik upload dus een andere foto vanuit de browser (zie script hierboven) , en klik op "upload"
maar dan???? er staat: Geen bestand gekozen
Wat zou me volgende stap moeten zijn?
Gewijzigd op 18/03/2022 11:07:47 door Eric Bosman
weet, dat er meerdere users zijn op een server.
1) een "ftp" user die bijvoorbeeld ericb heet
2) www, apache www-user etc, die de eigenaar is van het process "webserver"
Als jij een bestand via ftp uploadt dan is dat van ericb.
PHP dat onder user www-user draait mag dan niet zo maar dat bestand aanpassen.
Vandaar ook chmod. Dat deelt rechten uit aan bestanden. Bijvoorbeeld 644 wil zeggen
rw, w, w
dus de eigenaar mag read en write; groepsleden mogen Read en others ook alleen R
Stap 1 zou zijn, om dit bestand 666 als rechten te geven.
Dan maak je het bestand "vogelvrij": elk process mag hem veranderen, overschrijven of verwijderen.
Dit probleem zou niet optreden als het bestand door PHP daar was neergezet: dan was www-user eigenaar en doorgaans heeft die zelf dan ook schrijfrechten.
Bedankt voor je info!
Dus jij bedoeld ik nu de file "upload.php" een "666" als recht moet instellen bij ftp?
Als tussenoplossing, omdat je het bestand er zelf met ftp ingezet hebt.
De bovenliggende map moet ook beschrijfbaar zijn door de webserver.
daarom moet die 777 hebben
Of beter zou het zijn, als die map van owner of group www-user zou zijn. Maar dat vereist nog een paar stappen. Laten we nu even voor 777 gaan.
(en dat is dus alleen voor mappen. Bestanden op een webserver hebben altijd genoeg aan een 6, nooit een 7 of een 5, aangezien dat een bestand uitvoerbaar maakt en dat is zelfs voor een php script op een website niet nodig)
Je verwijst naar het uitvoeren opnieuw naar dezelfde URL, waar het uploadformulier weer klaar staat om nieuwe upload te ontvangen.
Ikzelf gebruik het uploadscript van Verot.net. Aanrader.
Gewijzigd op 18/03/2022 12:17:07 door - Ariën -
de map "afbeeldingen" wat in de root zit heb ik nu 777 als recht gegeven.
de file "upload.php" heb ik nu de rechten 666 gegeven.
Ariën bedankt voor je info, nu zou ik als volgende stap een nieuwe php pagina moeten maken die verwijst naar de map "afbeeldingen" ?
niet het bestand upload.php
Ik had de indruk dat jouw foto2.png niet overschreven kon worden.
Die moest beschrijfbaar worden voor php. Dus dat bestand heeft 666 nodig (in dit geval)
upload.php moet gewoon 644 blijven.
Anders zou een php-proces zo maar je script kunnen overschrijven. Dat moet je niet willen.
op mijn ftp als volgt staan:
* map "afbeeldingen" met recht 777
* in de map "foto2.png" met recht 666
* upload.php met recht 644
Vanavond kan ik weer verder, ik waardeer enorm je steun
het zal wel een lange weg zijn maar ga ervanuit dit nu juist staat?
Upload map voor afbeeldingen kan je beter op 755 zetten, in plaats van 777. Tenzij het niet anders kan.
- Ariën - op 18/03/2022 13:27:29:
Upload map voor afbeeldingen kan je beter op 755 zetten, in plaats van 777. Tenzij het niet anders kan.
maar ik lees hier bij ivo: Laten we nu even voor 777 gaan.
(en dat is dus alleen voor mappen....
Maar goed de map "upload" bestaat niet, of bedoel je hiermee de map afbeeldingen? (waar ik van uit gaat en nu op 755 gezet)
Hoewel ik nu bekijk snap ik de rechten systeem wel... Ik zie de verschillen.
Het gaat er straks om:
Ieder gebruiker krijgt een eigen login met een htaccess bestand.
Dan kan/hij zij als admin inloggen en bij zijn eigen gegevens,
Zo moet hij/zij en zijn gebruikers de foto kunnen aanpassen die dan elders in dat account staat.
Waar ik vooral klem zit ik de locatie als je een foto upload...... welke url wijzigt me foto steeds? Ik snap die link niet van het uploaden.
Daarom begin ik vooraf aan en misschien rustig...
ik wil eerst dit uploaden onder de knie hebben dus voor de overzicht heb ik nu:
* 1 map "afbeeldingen" met rechten 755
* hierin 1 foto "foto2.png" met rechten 666
* dan 1 file met "upload.php" met rechten 644
Dus mijn volgende stap zou nu een locatie upload script of iets moeten zijn?
Dus een mapje hogerop in je directoryboom, en dan in de map /directory.
Je kan dit ook aanpassen naar een andere locatie.
Verder vraag ik mij af hoe je een .htaccess makkelijk onderhoudbaar maakt. Je gebruikers moeten natuurlijk ook hun wachtwoord kunnen wijzigen. Persoonlijk raad ik aan om de opslag van de leden, met gehashte wachtwoorden, en andere gegevens zoals mailadressen of eventuele toegangsrechten op te slaan in de database. Dat werkt echt veel makkelijker dan .htaccess.
.htaccess wordt meestal even gebruikt om eventjes iets te beveiligen. Niet als standaard inlogsysteem omdat het verre van flexibel is.
Dit topic van de buren komt eigenlijk best wel overeen met dit topic hier. Zo te zien was dat jouw topic. ;-)
Gewijzigd op 18/03/2022 21:02:54 door - Ariën -
Is het nog gelukt verder?
Ik snap heel die script niet meer waar het heen gaat :( en wordt er suf van.
php lukt wel, maar dit wordt zo ingewikkeld dat ik denk het na 10 jaar nog steeds niet veel is.
en kopie/paste leer je niks van, maar dat uploaden ik blijf vast zitten met:
Hoe zorg ik ervoor de foto die je upload elders op een pagina zich wijzigt?
Als je begint bij de basis met move_uploaded_file(), dan moet je toch al begrijpen hoe het werkt?
Een paar regeltjes maar....
Als ik dit topic en die op het andere forum lees, heb ik het idee dat je in een tunnelvisie beland bent. Dus begin eens bij begin af aan. Dan gaat het zeker lukken!
Toevoeging op 30/03/2022 18:49:16:
Ik waag nog een poging.
Dit is enkel een simpel voorbeeld, eentje die je NIET publiekelijk moet gebruiken. Er zit geen beveiliging in. Maar probeer het eens!
uploadformulier.html
Dit is denk ik wel voor je duidelijk. Dit is het formulier met een upload-element die naar upload.php verwijst.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
upload.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
<?php
$target_dir = "uploads/"; // de map uploads gezien de plek waar dit script in staat is de plek waar de uploads in terecht komen.
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(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 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
$target_dir = "uploads/"; // de map uploads gezien de plek waar dit script in staat is de plek waar de uploads in terecht komen.
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(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 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Dit moet wel werken, lijkt me!
En als je het gele commentaar leest weet je nu ook waar de uploads in geplaatst worden.
Lijn 19 tot 23 zorgt ervoor dat een bestand niet overschreven kan worden.
Dit beantwoord toch je vraag dan?
Gewijzigd op 30/03/2022 19:09:17 door - Ariën -