Probleem met copy met recursive path
Ik heb de meest simpele vraag die jullie misschien ooit al zagen..
Ik heb twee directory's op een gedeelde server.
Wat ik zie is dat de eerste directory deze is:
/home/mijnsite/domains/mijnsite.be/public_html/upload/
Hierin heb ik een PHP script dat bestanden in een directory (1 niveau hoger) kijkt of er bestanden in staan.
/home/mijnsite/domains/mijnsite.be/public_html/upload/oorsprong
Nu wil ik als eerste dat, als het php script loopt, dat die de bestanden in de map "oorsprong" gaat kopieren naar een andere map op de server. Namelijk:
/home/mijnsite/domains/mijnsite.be/public_html/bserie/
Ten tweede zou dan die oorsprong directory leeggemaakt moeten worden...
Ik heb met de copy(), move(), move_uploaded_file aan het proberen geweest, maar krijg altijd foutmeldingen dat een bepaalde directory niet bestaat (afhankelijk welke functie ik gebruik).
Om gek van te worden.
Wat ik lees is dat ik de functies niet "recursive" mag gebruiken.
Ik begrijp het niet.
Normaal zouden de veiligheidsparameters op de server juist moeten staan om dit kopieren toe te staan.
Wat doe ik fout?
In het tweede geval zou ik graag in die map "oorsprong" willen kijken of een bestand met een vaste naam (laat ons zeggen: doelbestand.pdf") staat, en enkel dat kopieren. Al de rest in die map zou gewist moeten worden..
Iemand een idee hoe ik hier aan begin?
Laat dat stukje php eens zien met de exacte foutmelding.
Hierbij al wat dingen die ik probeerde:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
//is_uploaded_file(/oorsprong/httprequest.txt)
//$source = "/usr/local/bin/php /home/domains/mijnsite.be/public_html/upload/oorsprong/.";
//$dest = "/usr/local/bin/php /home/mijnsite/domains/mijnsite.be/public_html/bploeg/.";
$source = "/home/mijnsite/domains/mijnsite.be/public_html/upload/oorsprong/";
$dest = "/home/mijnsite/domains/mijnsite.be/public_html/bploeg";
copy($source, $dest);
//move_uploaded_file('$source', '$dest');
//rename('$source', '$dest');
//unlink($source);
?>
//is_uploaded_file(/oorsprong/httprequest.txt)
//$source = "/usr/local/bin/php /home/domains/mijnsite.be/public_html/upload/oorsprong/.";
//$dest = "/usr/local/bin/php /home/mijnsite/domains/mijnsite.be/public_html/bploeg/.";
$source = "/home/mijnsite/domains/mijnsite.be/public_html/upload/oorsprong/";
$dest = "/home/mijnsite/domains/mijnsite.be/public_html/bploeg";
copy($source, $dest);
//move_uploaded_file('$source', '$dest');
//rename('$source', '$dest');
//unlink($source);
?>
Als ik copy() gebruik krijg ik geen foutboodschap maar kopieert die niks
Als ik move() gebruik krijg ik deze boodschap:
Warning: rename($source,$dest): No such file or directory in /home/mijnsite/domains/mijnsite.be/public_html/upload/copy.php on line 13
copy() en rename() etc kunnen alleen bestanden kopieren, geen mappen. Je zult dus de inhoud van de mappen moeten opvragen waarna je kunt kopieren.
Je geeft alleen een directory op zonder bestandsnaam.
Warning: copy(/usr/local/bin/php /home/mijnsitebe/domains/mijnsite.be/public_html/upload/oorsprong/Bestand.pdf): failed to open stream: No such file or directory in /home/mijnsitebe/domains/mijnsite.be/public_html/upload/copy.php on line 11
Dit krijg ik als ik
$source = "/usr/local/bin/php /home/mijnsitebe/domains/mijnsite.be/public_html/upload/oorsprong/Bestand.pdf";
$dest = "/usr/local/bin/php /home/mijnsitebe/domains/mijnsite.be/public_html/bploeg/Bestand.pdf";
copy($source, $dest);
Gebruik..
Toevoeging op 17/10/2016 18:32:44:
En dit
Warning: copy(/home/mijnsitebe/domains/mijnsite.be/public_html/bploeg/Bestand.pdf): failed to open stream: Permission denied in /home/mijnsitebe/domains/mijnsite.be/public_html/upload/copy.php on line 11
Als ik dit gebruik
$source = "/home/mijnsitebe/domains/mijnsite.be/public_html/upload/oorsprong/Bestand.pdf";
$dest = "/home/mijnsitebe/domains/mijnsite.be/public_html/bploeg/Bestand.pdf";
copy($source, $dest);
(dus zonder /usr/local/php)
Toevoeging op 17/10/2016 18:33:36:
Hierin heb ik dus een bestandsnaam die gekend is gezet.
Dit bestand staat er wel degelijk in...
Zo te zien mag je daar niet schrijven.
Iederen kan lezen schrijven en uitvoeren...
Hoofdletters/Kleine letters correct?
- SanThe - op 17/10/2016 18:57:34:
Hoofdletters/Kleine letters correct?
Ja schijnbaar wel...
Is het zo moeilijk om in PHP iets te kopieren?
Heeft er iemand andere trucjes?
Wat is de owner van die map? Als je DirectAdmin hebt kan je dat in de FileManager terugvinden en e.v.t resetten.
Begin eens met gewoon wat foutcontrole; gebruik functies zoals is_file, is_dir en is_writable om te zien of de bestanden en mappen die je wilt bewerken volgens PHP wel bestaan en schrijfbaar zijn. Immers; dat jij er in mag schrijven betekent niet dat PHP dat ook mag, want PHP draait onder een andere gebruiker.
- Ariën - op 19/10/2016 01:34:12:
Wat is de owner van die map? Als je DirectAdmin hebt kan je dat in de FileManager terugvinden en e.v.t resetten.
Wat ik wel gevonden heb is het volgende:
Het bestand dat ik tracht te kopieren heeft als user "Apache", ik heb dat gereset naar mijn username maar dan werken de drie commando's nog niet.
Het bestand heeft als permissie 644.
Alle directory's en subdirectories die gebruikt worden hebben permissie 777...
Welke foutmelding krijg je?
Bij copy(): Warning: copy(/usr/local/bin/php /home/mijnsitebe/domains/mijnsite.be/public_html/upload/oorsprong/Document.pdf): failed to open stream: No such file or directory in /home/mijnsitebe/domains/mijnsite.be/public_html/upload/copy.php on line 11
Woeps,... als ik move_uploaded_file('$source', '$dest'); gebruik lijkt het of die dat gekopieerd heeft?
Wat kan daar de oorzaak van zijn???
Even verder onderzoeken..
Hoe doe je dat?
Ozzie PHP op 20/10/2016 00:26:08:
>> Als ik "rename" gebruik
Hoe doe je dat?
Hoe doe je dat?
rename('$source', '$dest');
Die quotes horen daar in ieder geval helemaal niet.
Nooit een variabele tussen enkele quotes zetten zoals bij move_uploaded_file('$source', '$dest');
Hoe zouden jullie dat doen?
1 dat bestand kopieren
2 als dat succesvol was heel die "oorsprong" directory leegmaken?
Op een manier dat het volgens jullie echt wel zou moeten werken?
Hier kan ik dan misschien de fout opsporen?