Gehele folders met inhoud verplaatsen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior Java developer met ondernemend karakter

Vacature Omschrijving Je komt te werken in een jong en creatief team waarin je écht onderdeel bent van de ontwikkelingen binnen de organisatie. Korte lijnen, weinig bureaucratie en een informele werksfeer. Iemand met een ondernemend karakter zal zich snel thuis voelen. Daarnaast bieden we een marktconform salaris, een gezamenlijke lunch én een 2-wekelijkse stoelmassage. Functieomschrijving Je ontwikkelt mee aan een uniek software platform vol componenten waarmee consultants (en klanten) zowel SaaS- als Enterprise oplossingen creëren op het gebied van ‘Kwaliteit & Veiligheid’, ‘Privacy & Informatiebeveiliging’ en ‘Governance, Risk & Compliance’. Vanuit een overtuigende passie voor het digitaal transformeren van werkprocessen

Bekijk vacature »

Daniel van Seggelen

Daniel van Seggelen

23/08/2019 01:01:48
Quote Anchor link
Ik heb een code gehad wat in het verleden werkte en een loop maar nu niet meer:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);


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?
 
PHP hulp

PHP hulp

15/09/2019 17:04:45
 
Adoptive Solution

Adoptive Solution

23/08/2019 07:16:02
Quote Anchor link
In geval van twijfel, raadpleeg de handleiding.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.


https://www.computerhope.com/unix/umv.htm
Gewijzigd op 23/08/2019 07:16:43 door Adoptive Solution
 
Daniel van Seggelen

Daniel van Seggelen

23/08/2019 07:54:59
Quote Anchor link
Het is dus een folder met plaatjes erin wat meegekopieerd moet worden.
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.
 
- Ariën -
Beheerder

- Ariën -

23/08/2019 09:23:01
Quote Anchor link
Is exec wel toegestaan? Probeer eens een uiterst simpel commando zoals uptime.
 
Adoptive Solution

Adoptive Solution

23/08/2019 10:05:38
Quote Anchor link
Op mijn Mac doet 'mv' het niet. Een 'ls -al' doet het wel.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$command
= 'mv map map_oud';
//$command = "ls -al map*";
exec( $command , $output , $return_var );
echo '<pre>' . print_r( $command, TRUE ) . '</pre>';
echo '<pre>' . print_r( $output, TRUE ) . '</pre>';
echo '<pre>' . print_r( $return_var, TRUE ) . '</pre>';
?>
Gewijzigd op 23/08/2019 10:06:30 door Adoptive Solution
 
Daniel van Seggelen

Daniel van Seggelen

23/08/2019 10:17:38
Quote Anchor link
$output en $return_value zijn nergens gedefinieerd en zijn dus ook leeg.

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
 
Ivo P

Ivo P

23/08/2019 10:22:30
Quote Anchor link
wat zit er voor waarde in $_GET['category']?

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

23/08/2019 17:00:08
Quote Anchor link
De waarde van een superglobal (ogenschijnlijk) rechtstreeks in een exec() gooien lijkt mij sowieso niet zo'n strak plan. Ergens zou deze waarde geïnspecteerd moeten worden, en dan zou ik op zijn minst verwachten dat je deze kopieert naar een "gevalideerde" variabele. Misschien gebeurt dit wel, maar dit kunnen we totaal niet afleiden uit het bovenstaande codefragment.

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...
 
Ivo P

Ivo P

23/08/2019 17:15:38
Quote Anchor link
is het trouwens niet mogelijk om het verplaatsen met PHP te doen?

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() ?
 
Thomas van den Heuvel

Thomas van den Heuvel

23/08/2019 19:49:37
Quote Anchor link
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...
 
Daniel van Seggelen

Daniel van Seggelen

24/08/2019 08:25:41
Quote Anchor link
Alles bestaat, maar de eigenaars vanuit de root dus 0 0 was het probleem
Ik heb nu via de root alle plaatjes de juiste rechten gegevene n nu werkt het wel.
 
Ivo P

Ivo P

24/08/2019 12:30:53
Quote Anchor link
en de juiste rechten zijn voor plaatjes dus niet 777 he.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.