Gehele folders met inhoud verplaatsen
Code (php)
1
2
3
2
3
echo 'mv -T -f /home/admin/domains/domein.nl/private_html/images/products/'.$catid_oud.'/'.$ean.' /home/admin/domains/domein.nl/private_html/images/products/'.$_GET['category'].'/'.$ean;
exec('mv -T -f /home/admin/domains/domein.nl/private_html/images/products/'.$catid_oud.'/'.$ean.' /home/admin/domains/domein.nl/private_html/images/products/'.$_GET['category'].'/'.$ean);
exec('mv -T -f /home/admin/domains/domein.nl/private_html/images/products/'.$catid_oud.'/'.$ean.' /home/admin/domains/domein.nl/private_html/images/products/'.$_GET['category'].'/'.$ean);
De $ean, $catid_oud en $_GET['category'] en zijn niet leeg.
Alle folders hebben 777 rechten en ook alle bestanden erin.
De folders worden verplaatst dus alle ean code foldesr, maar de plaatjes in dit geval die daarin zijn worden niet verplaatst maar blijven opde oude locatie.
Wat is heir verkeerd aan?
Code (php)
1
2
2
-t, --target-directory=destination Move all sources into the directory destination.
-T, --no-target-directory Treat destination as a normal file, not as a directory.
-T, --no-target-directory Treat destination as a normal file, not as a directory.
https://www.computerhope.com/unix/umv.htm
Gewijzigd op 23/08/2019 07:16:43 door Adoptive Solution
met kleine t kopieerd hij niet de folder.
Ik heb net getest met root in shell en daar kopieerd hij de plaatjes wel, maar met een PHP exec niet, dus dat zal ermee te maken hebben, maar ze hebben allemaal 777 rechten dus snap niet waarom dit kan.
Is exec wel toegestaan? Probeer eens een uiterst simpel commando zoals uptime.
Op mijn NAS werkt het wel.
Uit dit atikel met voorbeelden :
https://stackoverflow.com/questions/18472659/php-exec-command-works-in-shell-and-php-command-line-but-not-on-website
"This is probably because php is being run under a different user on the system, and that that user does not have the rights to do that action on those files. You could look into sudo to perform this"
Hier mijn houtje-touwtje code :
Code (php)
Gewijzigd op 23/08/2019 10:06:30 door Adoptive Solution
Ik denk dat ik het weet, nu zie ik dat de folder in bepaalde gevallen aangemaakt was met de eigenaar 0 0 . Dat is de root.
Hoe kan ik in PHP dus root mappen rechten geven?
Gewijzigd op 23/08/2019 10:20:15 door Daniel van Seggelen
Staan daar nog bijzondere tekens en/of spaties in?
NB: 777 voor een plaatje is te veel. Ooit een plaatje gezien dat uitgevoerd moet kunnen worden?
---
bestaat de doelmap $_GET['category'] al?
als niet: mag er door PHP in de map products geschreven worden?
evt. kun je $ean aan het einde van de regel nog weg laten.
Daarnaast, dit is dus een snippet, misschien moet er gewoon wat meer huiswerk gedaan worden? Controleren of de omstandigheden voor zo'n kopieer/verplaatsactie goed zijn, m.a.w., waar controleer je of de brondirectory leesbaar en de doeldirectory schrijfbaar is?
Als je dit soort controles inbouwt kun je ook veel sneller constateren waar het precies misgaat. Uit het feit dat je dit niet direct kunt afleiden maak ik op dat deze controles waarschijnlijk niet bestaan...
https://www.php.net/manual/en/function.rename.php
Je rename-t dan de oude dir naar de nieuwe dir, en dat zou genoeg moeten zijn.
Dat hoeft toch niet uitbesteed te worden via exec() ?
Dat ook, en als dit een reguliere operatie is, of een grote eenmalige conversie, dan zou ik toch een soort van schil hieromheen schrijven met een hoop (verbose) logging, zodat je in een vroeg stadium (dryrun of prechecks) moeilijkheden kunt detecteren zodat je deze stront niet hebt tijdens het daadwerkelijke verplaatsen zelf...
Ik heb nu via de root alle plaatjes de juiste rechten gegevene n nu werkt het wel.
en de juiste rechten zijn voor plaatjes dus niet 777 he.