Upload foto elders op website via een upload script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eric Bosman

Eric Bosman

18/03/2022 09:43:44
Quote Anchor link
Beste lezers/helpers

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?
 
PHP hulp

PHP hulp

02/03/2024 21:23:16
 
- Ariën  -
Beheerder

- Ariën -

18/03/2022 09:50:25
Quote Anchor link
Ik neem aan dat je een relatief pad (bijv
afbeelding_kat.png) opslaat in de database?

Maar wat bedoel je met wijzigen? De formaten? Of zoek je een editor?
 
Ivo P

Ivo P

18/03/2022 10:32:32
Quote Anchor link
probeer anders eerst een simpel uploadscript te bouwen.
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/
 
Eric Bosman

Eric Bosman

18/03/2022 11:05:07
Quote Anchor link
Hallo helpers

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
 
Ivo P

Ivo P

18/03/2022 11:16:18
Quote Anchor link
Ik denk dat het een rechtenkwestie is:

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.
 
Eric Bosman

Eric Bosman

18/03/2022 11:38:00
Quote Anchor link
Hoi ivo

Bedankt voor je info!

Dus jij bedoeld ik nu de file "upload.php" een "666" als recht moet instellen bij ftp?
 
Ivo P

Ivo P

18/03/2022 12:02:54
Quote Anchor link
klopt.
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)
 
- Ariën  -
Beheerder

- Ariën -

18/03/2022 12:13:08
Quote Anchor link
De tekst 'geen bestand gekozen' is gewoon een placeholder van het upload-element in HTML waar uiteindelijk de gekozen bestanden in genoemd worden. Geen foutmelding dus.

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 -
 
Eric Bosman

Eric Bosman

18/03/2022 12:27:43
Quote Anchor link
Ivo dit is gelukt.

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" ?
 
Ivo P

Ivo P

18/03/2022 12:30:22
Quote Anchor link
nee!
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.
 
Eric Bosman

Eric Bosman

18/03/2022 12:43:59
Quote Anchor link
Als het goed is heb ik hem nu juist aangepast.

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?
 
- Ariën  -
Beheerder

- Ariën -

18/03/2022 13:27:29
Quote Anchor link
Upload map voor afbeeldingen kan je beter op 755 zetten, in plaats van 777. Tenzij het niet anders kan.
 
Eric Bosman

Eric Bosman

18/03/2022 20:02:07
Quote Anchor link
- 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?
 
- Ariën  -
Beheerder

- Ariën -

18/03/2022 20:11:20
Quote Anchor link
De locatie van de directory waar je bestanden in geupload worden is volgens jouw script, dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
        $dst_path
= '../directory/'; // The path where the image will be moved to.

?>


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 -
 
- Ariën  -
Beheerder

- Ariën -

25/03/2022 09:28:21
Quote Anchor link
Is het nog gelukt verder?
 
Eric Bosman

Eric Bosman

30/03/2022 13:12:38
Quote Anchor link
Nee ben er maar mee gestopt en geef het maar op, ben ruim 2 jaar bezig zonder een piep klein beetje resultaat.
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?
 
- Ariën  -
Beheerder

- Ariën -

30/03/2022 15:17:27
Quote Anchor link
Gewoon dezelfde naam geven als de foto die je al eerder geupload hebt.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>


upload.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.";
  }
}

?>


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 -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.