Door
Paul Weiss
op 28-08-2023 18:02
gewijzigd op 28-08-2023 18:04
3.222 views
Hoi. Ik ben bezig met een proefopzetje waarbij ik via een form een naam kan kiezen voor het aanmaken van een directory. Dat gedeelte gaat goed. Vervolgens wil ik echter met behulp van de copy functie hierin een bestand plaatsen met de naam index.php. Echter het wil niet lukken omdat de doelmap niet wordt herkend. als ik een echo uitvoer van $target dan wordt het pad wel goed weergegeven. ik heb totaal geen idee wat er fout gaat.
Wat is de uitvoer momenteel? En waarom kijk je niet of mkdir() werkt?
Je gokt nu daarna dat het gewoon werkt, zonder een if'je te gebruiken.
Paar tipjes:
- 777 als rechten (alles!) is overbodig!
- Het is weliswaar een proefopzetje, maar toch ben ik benieuwd naar de gedachtegang om geautomatiseerd een index.php aan te maken.
de echo van "folder gecreerd" had ik even moeten weglaten. uiteraard kan ik daar een if statement voor gebruiken,de directory wordt echter gewoon wel aangemaakt dat heb ik getest. ik wil echter vervolgens het bronbestand kopieeren naar de doeldirectory, die daarvoor dus is aangemaakt. als ik dit doe zoals onderstaande voorbeeld dan werkt het wel. maar dan is de directory dus statisch en dat is niet de bedoeling.
$target2 = 'doelmap/index.php';
[size=xsmall]Toevoeging op 28/08/2023 19:21:14:[/size]
Jan R op 28/08/2023 19:03:35
Uw bestand bevind zich niet in $_POST maar in $_FILES
Verder moet vermoedelijk ook uw form " enctype="multipart/form-data"" extra toegevoegd worden.
En zoals al vermeld rechten, controle en foutaghandeling
zoals ik al zei mapje wordt altijd aangemaakt. die functie werkt gewoon. het wil echter gewoon niet lukken om met behulp van de copy functie het bronbestand daarnaartoe te kopieeren. bij de copy functie is ook een if statement opgenomen. Die meldt dat het niet is gelukt. kan het doelbestand ook gewoon index.html noemen uiteraard. zoals ik al zei ben met een proefopzetje bezig. Maar het is moeilijker dan ik dacht.
En vraag je nog eens af of je echt die mappen nodig hebt.
Je ziet dit vaak terug als een site een uploadmap heeft per gebruiker.
Dus een map voor pietje, een map voor jantje etc.
Gevolg is een vervuiling van (vaak) de document root met 12303 mappen met gebruikers die voor een groot deel niet meer actief zijn.
Het is erg lastig om daarin opruiming te houden.
En heb je al nagedacht over wat er gebeurt als iemand de map voor jan en piet samen wil aanmaken en de map dus jan/piet geeft?
of ../../piet
Het vereist iets meer inzicht, maar al je uploads plaatsen in 1 map, buiten de documentroot, met de naam "uploads" werkt zekerder.
Je weet zeker dat er geen rare namen voor mappen nodig zijn.
Je weet zeker dat in die map geen scripts staan. (ga even ervanuit dat dat niet het plan is)
En als je een database inzet waarin staat dat
* id = 123
* eigenaar = pietje
* bestandsnaam = foto.jpg
Dan kun je een foto van pietje plaatsen in die map met de naam "123" (of "123.jpg" als je dat leuker vindt)
En bij het opvragen van /pietje/foto.jpg kun je in de database vinden dat je dan het bestand met de naam "123" in "uploads" moest hebben. En dit voorkomt dat foto.jpg van jan over die van piet heen gezet wordt.
>> geen gedoe met rare bestandsnamen of rare mapnamen.
>> eenvoudig bestanden van niet-actieve users opruimen, aangezien je in de database een lijstje hebt staan.
?>
Dit is dus andersom.
<?php
if( !copy($source, $target) ) {
echo "Niet gelukt";
}
else {
echo "Gelukt";
}
?>
Gebruik het complete path.
En check wat de gebruiker ingeeft.
Want ../../dirname kan hele nare gevolgen hebben
Ik ben nog niet zo heel lang met php bezig Maar het moet zeker niet andersom. Inderdaad moet er altijd gechecked worden wat de gebruiker ingeeft anders krijg je inderdaad rare dingen. Maar zoals ik al zei. Ik ben gewoon bezig met een proefopzetje.
[size=xsmall]Toevoeging op 29/08/2023 10:41:01:[/size]
Ivo P op 29/08/2023 10:22:03
En vraag je nog eens af of je echt die mappen nodig hebt.
Je ziet dit vaak terug als een site een uploadmap heeft per gebruiker.
Dus een map voor pietje, een map voor jantje etc.
Gevolg is een vervuiling van (vaak) de document root met 12303 mappen met gebruikers die voor een groot deel niet meer actief zijn.
Het is erg lastig om daarin opruiming te houden.
En heb je al nagedacht over wat er gebeurt als iemand de map voor jan en piet samen wil aanmaken en de map dus jan/piet geeft?
of ../../piet
Het vereist iets meer inzicht, maar al je uploads plaatsen in 1 map, buiten de documentroot, met de naam "uploads" werkt zekerder.
Je weet zeker dat er geen rare namen voor mappen nodig zijn.
Je weet zeker dat in die map geen scripts staan. (ga even ervanuit dat dat niet het plan is)
En als je een database inzet waarin staat dat
* id = 123
* eigenaar = pietje
* bestandsnaam = foto.jpg
Dan kun je een foto van pietje plaatsen in die map met de naam "123" (of "123.jpg" als je dat leuker vindt)
En bij het opvragen van /pietje/foto.jpg kun je in de database vinden dat je dan het bestand met de naam "123" in "uploads" moest hebben. En dit voorkomt dat foto.jpg van jan over die van piet heen gezet wordt.
>> geen gedoe met rare bestandsnamen of rare mapnamen.
>> eenvoudig bestanden van niet-actieve users opruimen, aangezien je in de database een lijstje hebt staan.
Hoi Ivo. Bedankt voor je input. Ik heb de map inderdaad wel nodig. Maar is niet bedoeld voor gebruikers of zo. Heeft een heel ander doel. Maar het lukt nog steeds niet. de naam die ik opgeef in het form wordt de directory gewoon aangemaakt, maar vervolgns kan ik met de copy functie een bestand niet daarheen kopieeren. als ik een vast pad opgeef en de direcory bestaat gaat het wel goed, maar dat is dus niet het doel. Wellicht nog andere mensen die een idee hebben hoe ik dit kan oplossen?