Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

TAR via php zonder absolute paden?

Anoniem
BasHamar
5 antwoorden
  • Ik heb een site waar mensen logo's hebben geüpload. Die zijn allemaal netjes in 1 dir terecht gekomen. Ik wil de drukker die deze bestanden dadelijk gaat gebruiken alle logo's in 1 TAR file aanbieden. Omdat er nog logo's bij kunnen komen, maak/pas ik die TAR file aan op het moment dat de drukker 'm downloadt. Vanaf zijn downloadpagina kan hij op een knop drukken, en dan wordt dit uitgevoerd:[code:1:28c19455f3]exec('tar -cf /home/buur/www/zooi/logos.tar /home/buur/www/upload/*.*');[/code:1:28c19455f3]Werkt prima, alleen nu worden de absolute paden opgeslagen in de TAR file, en dat wil ik niet. Hoe krijg ik dat voor elkaar?

    Ik zit te denken aan een .sh file, zoiets:[code:1:28c19455f3]cd /home/buur/www/upload
    tar -cf /www/zooi/logos.tar *.*[/code:1:28c19455f3]maar het lukt met niet om die .sh file via php uit te voeren. Ik probeer dan:[code:1:28c19455f3]exec('sh myScript.sh');[/code:1:28c19455f3]Doe ik iets verkeerd of is er een andere mogelijkheid?
  • Heb je het bestand executable gemaakt? Sorry, maar moest het toch even vragen. ;)

    Nog een domme vraag: werkt het wel als je het volledige pad achter het sh-commando zet?

    - Bas
  • Eh… Misschien en misschien? Ik had tot vandaag niet eerder van sh files gehoord, totdat ik een beetje ging zoeken. Ik kom nog uit het DOS autoexec.bat tijdperk, en de gelijkenis met .bat files was door mij dan ook snel gemaakt (misschien ten onrechte?).

    Ik had op een willekeurige plek die sh file aangemaakt, zoals die in mijn startpost staat beschreven (het tweede code blok) en toen ik vanaf de prompt[code:1:db66a73040]sh bla.sh[/code:1:db66a73040]deed, werd de tar-file inderdaad in 'zooi' aangemaakt met de bestanden uit 'upload'. Precies zoals ik het wilde. Daarom deed ik in php: exec('sh bla.sh'); maar die doet dus niets.

    Kortom, zover ik weet heb ik het bestand niet executable gemaakt? Hoe moet dat?
  • In mijn vrije tijd nog eens hierover nagedacht (maar het precieze probleem niet bij de hand) maar nog geen oplossing bedacht. Ben je zelf al verder gekomen?

    Het bestand executable maken zoals ik eerder suggereerde hoeft inderdaad niet als je de sh-functie gebruikt, maar zelf maak ik altijd executable files van scripts (waardoor ze eigenlijk meer op een .bat-bestand gaan lijken). Als je dat dan gedaan hebt en je de juiste rechten hebt gegeven zodat ook de [size=9:e4dd0891ec]webhostdeamon[/size:e4dd0891ec] - herstel: webhostuser - het bestand mag draaien dan is je probleem [b:e4dd0891ec]misschien[/b:e4dd0891ec] opgelost. Ik kan me in ieder geval goed voorstellen dat een hosting provider het gebruik van sh via exec() blokkeert om een potentieel beveiligingsgat te dichten. Met de juiste bestandspermissies is zoiets wellicht te omzeilen. Helaas zelf helemaal geen ervaring met het gebruik van exec() in PHP, dus dit is volledig theoretisch.

    - Bas
  • Ha! Het werkt! Bedankt!
    Als volgt uitgevoerd: Eerst chmoddden (ik weet nog niet wat de minimale rechten zijn om dit werkbaar te maken, maar voorlopig maar op 777 gezet):[code:1:736856d74a]chmod 777 myscript.sh[/code:1:736856d74a]En dan in het PHP script als volgt aanroepen:[code:1:736856d74a]exec('./myscript.sh');[/code:1:736856d74a]In het script ga ik gewoon met 'cd' naar de directory met de bestanden die ik wil inpakken, en vervolgens het tar-commando, et voilà! De absolute paden staan niet meer in het archief!

    Merci beaucoup!

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.