hoe bestand in map plaatsen via copy?
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
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.
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
$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
Maar dan rest mij de vraag waarom je index.php bestanden wilt genereren?
Gewijzigd op 28/08/2023 19:29:02 door - Ariën -
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 -
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
Ik neem aan de je de error-reporting op ALL en display-errors aan hebt staan?
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Voor de rest is die foutafwandeling die je hierboven geeft voldoende.
Gewijzigd op 29/08/2023 11:17:26 door - Ariën -
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.
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 -
Dit:
$target = $doelmap.'/'.'index.php';
kan gewoon zo:
$target = $doelmap . '/index.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
Geen idee of dit ook werkt met een directory:
Gewijzigd op 29/08/2023 13:03:40 door Paul Weiss
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.