hoe bestand in map plaatsen via copy?
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.
Onderstaande de code van het formulier
Onderstaande de php code van create.php
Onderstaande de code van het formulier
Code (php)
1
2
3
4
2
3
4
<form action="create.php" method="POST">
Create File : <input type="text" name="file">
<input type="submit" value="Create">
</form>
Create File : <input type="text" name="file">
<input type="submit" value="Create">
</form>
Onderstaande de php code van create.php
Code (php)
Gewijzigd op 28/08/2023 18:04:50 door Paul Weiss
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.
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.
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
https://www.w3schools.com/php/php_file_upload.asp
Verder moet vermoedelijk ook uw form " enctype="multipart/form-data"" extra toegevoegd worden.
En zoals al vermeld rechten, controle en foutaghandeling
https://www.w3schools.com/php/php_file_upload.asp
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';
Toevoeging op 28/08/2023 19:21:14:
Ik wil het niet doen met fileupload. maar gebruik dus de copy functie.
$target2 = 'doelmap/index.php';
Toevoeging op 28/08/2023 19:21:14:
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
https://www.w3schools.com/php/php_file_upload.asp
Verder moet vermoedelijk ook uw form " enctype="multipart/form-data"" extra toegevoegd worden.
En zoals al vermeld rechten, controle en foutaghandeling
https://www.w3schools.com/php/php_file_upload.asp
Ik wil het niet doen met fileupload. maar gebruik dus de copy functie.
Gewijzigd op 28/08/2023 19:18:42 door Paul Weiss
Ik zou eerst de map aanmaken, en dan kijken met een if'je of het gelukt is. Zo ja, dan de copy actie doen. Uiteraard ook hier een if'je.
Maar dan rest mij de vraag waarom je index.php bestanden wilt genereren?
Maar dan rest mij de vraag waarom je index.php bestanden wilt genereren?
Gewijzigd op 28/08/2023 19:29:02 door - Ariën -
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.
Gewijzigd op 28/08/2023 19:35:00 door Paul Weiss
Ga eerst eens een opzetje maken zoals ik zeg, door de opdrachten te nestelen.
Code (php)
Dit is dus andersom.
Code (php)
Gebruik het complete path.
En check wat de gebruiker ingeeft.
Want ../../dirname kan hele nare gevolgen hebben
Gewijzigd op 28/08/2023 22:07:11 door - SanThe -
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.
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.
- SanThe - op 28/08/2023 22:05:08:
Dit is dus andersom.
Gebruik het complete path.
En check wat de gebruiker ingeeft.
Want ../../dirname kan hele nare gevolgen hebben
Code (php)
Dit is dus andersom.
Code (php)
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.
Toevoeging op 29/08/2023 10:41:01:
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.
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?
Gewijzigd op 29/08/2023 10:43:29 door Paul Weiss
Wat is de foutmelding die je op copy() krijgt?
Ik neem aan de je de error-reporting op ALL en display-errors aan hebt staan?
Ik neem aan de je de error-reporting op ALL en display-errors aan hebt staan?
Nee heb ik nog niet gedaan. ik krijg alleen de melding dat de copy niety is gelukt door de echo functie. Ik ben nog niet heel lang bezig met php. heb wel over error reporting gelezen, maar weet niet echt goed hoe ik dit precies moet toevoegen. Ik heb wel onderstaande code ingevoegd, maar heb geen idee of dit voldoende is.
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);
Een ! Voor een functie in PHP betekent een ontkenning. Dus zoals SanThe zegt hoort het andersom.
Voor de rest is die foutafwandeling die je hierboven geeft voldoende.
Voor de rest is die foutafwandeling die je hierboven geeft voldoende.
Gewijzigd op 29/08/2023 11:17:26 door - Ariën -
stom niet goed gekeken. misschien een leesbril kopen (haha) het klopt inderdaad wat san zegt.
maar ik krijg het nog steeds niet werkend. De foutafwerking geeft geen melding. Om even alles meer inzichtelijk te krijgen heb ik 2 codes hieronder toegevoegd. de eerste werkt. Maar de 2e dus niet
Deze werkt, maar dat wordt het pad gewoon opgegeven zonder variable
Onderstaande werkt niet, maar dan wordt pad gecreeerd met variable
Toevoeging op 29/08/2023 11:38:16:
je had wel gelijkt. sorry. gewoon niet goed gekeken.
maar ik krijg het nog steeds niet werkend. De foutafwerking geeft geen melding. Om even alles meer inzichtelijk te krijgen heb ik 2 codes hieronder toegevoegd. de eerste werkt. Maar de 2e dus niet
Deze werkt, maar dat wordt het pad gewoon opgegeven zonder variable
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$doelmap= "doelmap";
mkdir($doelmap, 777);
$source = 'sourcefiles/test.php';
$target = 'doelmap/index.php';
if( !copy($source, $target) ) {
echo "File can't be copied! \n";
}
else {
echo "File has been copied! \n";
}
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
$doelmap= "doelmap";
mkdir($doelmap, 777);
$source = 'sourcefiles/test.php';
$target = 'doelmap/index.php';
if( !copy($source, $target) ) {
echo "File can't be copied! \n";
}
else {
echo "File has been copied! \n";
}
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
Onderstaande werkt niet, maar dan wordt pad gecreeerd met variable
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
$doelmap= "doelmap";
mkdir($doelmap, 777);
$source = 'sourcefiles/test.php';
$target = $doelmap.'/'.'index.php';
if( !copy($source, $target) ) {
echo "File can't be copied! \n";
}
else {
echo "File has been copied! \n";
}
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
$doelmap= "doelmap";
mkdir($doelmap, 777);
$source = 'sourcefiles/test.php';
$target = $doelmap.'/'.'index.php';
if( !copy($source, $target) ) {
echo "File can't be copied! \n";
}
else {
echo "File has been copied! \n";
}
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
Toevoeging op 29/08/2023 11:38:16:
- SanThe - op 28/08/2023 22:05:08:
Dit is dus andersom.
Gebruik het complete path.
En check wat de gebruiker ingeeft.
Want ../../dirname kan hele nare gevolgen hebben
Code (php)
Dit is dus andersom.
Code (php)
Gebruik het complete path.
En check wat de gebruiker ingeeft.
Want ../../dirname kan hele nare gevolgen hebben
je had wel gelijkt. sorry. gewoon niet goed gekeken.
Zet je foutafhandeling eens bovenaan.
En je doet nog steeds geen controle op mkdir(). En 777 als recht is overdreven.
En je doet nog steeds geen controle op mkdir(). En 777 als recht is overdreven.
Gewijzigd op 29/08/2023 12:10:55 door - Ariën -
Wat Ariën al zegt, de code voor het tonen van foutmeldingen (de laatste 3 regels in jouw voorbeeld) moet je boven de andere code zetten. Daarmee zet je de foutmeldingen 'aan'. Als je die code op het eind zet, dan zet je op dat moment de foutmeldingen pas 'aan', maar de code erboven is dan al uitgevoerd.
Dit:
$target = $doelmap.'/'.'index.php';
kan gewoon zo:
$target = $doelmap . '/index.php';
Dit:
$target = $doelmap.'/'.'index.php';
kan gewoon zo:
$target = $doelmap . '/index.php';
heb de foutafhandeling bovengezet nu. als ik een php variable gebruik als doelmap dan krijg ik onderstaande foutmelding (p.s. heb ook $target = $doelmap . '/index.php'; geprobeerd, maar werkt ook niet.
Onderstaande de foutmelding (als ik een doelmap gebruik die al wel bestaat krijg ik de melding niet):
ik krijg ook geen foutmelding bij het aanmaken van de map die evt vanuit de form wordt verstuurd
Warning: copy(qasaqaa/index.php): Failed to open stream: Permission denied in /mnt/web521/c2/71/511264671/htdocs/dashboard/create.php
Onderstaande de foutmelding (als ik een doelmap gebruik die al wel bestaat krijg ik de melding niet):
ik krijg ook geen foutmelding bij het aanmaken van de map die evt vanuit de form wordt verstuurd
Warning: copy(qasaqaa/index.php): Failed to open stream: Permission denied in /mnt/web521/c2/71/511264671/htdocs/dashboard/create.php
Gewijzigd op 29/08/2023 12:52:24 door Paul Weiss
Je hebt geen rechten om daarin te schrijven. Ik vermoed een ownership probleem dat enkel de apache-user dat mag doen, in plaats van jij als user 'paul'. Met een goed ingestelde server zou alles onder je eigen user moeten draaien.
Geen idee of dit ook werkt met een directory:
Geen idee of dit ook werkt met een directory:
He arien. Maar hoe is dan mogelijk dat ik dan wel een directory kan aanmaken en/of een copy functie kan gebruken naar een direcrory die al wel bestaat?
Gewijzigd op 29/08/2023 13:03:40 door Paul Weiss
Misschien dat die een andere owner heeft?
Ik zeg niet dát dit het probleem is, maar je moet het niet uitsluiten.
Dus ga het eens na. In menig filemanager van een hostingpaneel moet je dit ook in een oogopslag kunnen zien, of zelfs resetten.
Ik zeg niet dát dit het probleem is, maar je moet het niet uitsluiten.
Dus ga het eens na. In menig filemanager van een hostingpaneel moet je dit ook in een oogopslag kunnen zien, of zelfs resetten.
he arien. zal er nog verder induiken om het werkend te krijgen. andera zal ik het eens met fileupload proberen.




