Archief - Script voor verwijderen oude bestanden

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Sonicje

Legacy Member
Hey iedereen,

even een vraagje waar ik zelf moeilijk uit geraak...

Een tijdje geleden heb ik bij Versio een webruimte van 7.5GB afgesloten met als bedoeling dit als FTP te gebruiken voor een IPcamera zijn beelden op te plaatsen.
Om de zoveel seconden wordt er een kleine afbeelding genomen en wordt deze op de FTP ruimte geplaatst. Dit werkt zonder problemen.

Natuurlijk loopt de grootte van de bestanden snel op.
Het domein laat toe om via CPanel een cronjob te laten lopen.
Jammer genoeg kan je geen commando ingeven zoals je dit in Linux zou doen.

Je moet een php script maken om dan vervolgens in CPanel de frequentie aan te duiden.

Ik had in de configuratie aangeduid dat hij elke dag om 00.00u het script moet laten lopen.

In het script had ik volgend commando gestoken:
find /IPCamera -mtime +7 -exec rm {} \\;

Enkel deze regel in notepad gestoken en dan de extensie veranderd naar .php in de hoop dat dit zou werken.

Ik was dus fout :D

Zou er iemand mij kort kunnen vertellen hoe ik een (correct) php script schrijf waarbij er wordt gecontrolleerd of er bestanden in de nodige map staan die ouder zijn dan 7 dagen en zoja, deze laat verwijderen?

De tijden dat het script moet lopen, moeten niet meegegeven worden in het script zelf, dit gebeurd via CPanel.

Alvast bedankt :)

Tyfius

Legacy Member
Uit het hoofd, maar het zou je tenminste op weg moeten kunnen zetten:

PHP:
$dir = '/IPCamera';
$timeframe = 604800; // 60 * 60 * 24 * 7 = 604800 seconden in 1 week

// In plaats van '*' kan je hier filteren op bvb '*.jpg'...
foreach (glob($dir . '*') as $file) {
    if (time() - filemtime($file) >= ($timeframe)) { 
        unlink($file);
    }
}

bealzebub

Legacy Member
Of gewoon een variant van je originele script houden, maar da's geen PHP script, het is een shell script. Waarschijnlijk zal de standaardshell op je host bash zijn, dus dan ziet het er als volgt uit:

Code:
#!/bin/bash

find /IPCamera -type f -mtime +7 | xargs rm

of zelfs

Code:
#!/bin/bash

find /IPCamera -type f -mtime +7 -delete

"-type f" zoekt enkel echter files, wat belangrijk zal zijn in combinatie met rm en delete.

Wat wel belangrijk is, of je nu PHP gebruikt of een bash script is dat je de file een shebang/hashbang en executable rechten geeft via cpanel of via "chmod 755". Met de shebang en de execute flag heeft het zelfs geen extensie nodig.

Wil je toch expliciet PHP gaan gebruiken (wat pakken trager zal zijn dan een shell script en een zware interpreter ervoor opstart ook nog eens), dan moet je hetvolgende hebben:

Code:
[B]#!/bin/env php[/B]

$dir = '/IPCamera';
$timeframe = 604800; // 60 * 60 * 24 * 7 = 604800 seconden in 1 week

// In plaats van '*' kan je hier filteren op bvb '*.jpg'...
foreach (glob($dir . '*') as $file) {
    if (time() - filemtime($file) >= ($timeframe)) { 
        unlink($file);
    }
}

dJeez

Legacy Member
Even een opmerking terzijde. Je refereert naar /IPCamera, maar dat zal m.i. nooit de correcte locatie zijn van de folder in kwestie. Je zal dus eerst het volledige echte pad te weten moeten komen, en dat moeten vervangen in bovenstaande PHP/Bash scripts...

Sonicje

Legacy Member
Allen bedankt voor de reacties :)

PHP is helaas één van de IT dingen waar ik niet erg met mee ben :)

Ik zal bovenstaande scripten eens proberen.


Dit is wel degelijk het volledige pad hoor.
In de root folder staan mappen zoals "domains", "imap", "public_html", enz.
Daarin heb ik de /ipcamera folder ook geplaatst, om het gemakkelijk te houden.
Ook plaatst het FTP programma van de IP camera alle beelden netjes in die map als ik gewoon "/IPCamera" ingeef.
dJeez zei:
Even een opmerking terzijde. Je refereert naar /IPCamera, maar dat zal m.i. nooit de correcte locatie zijn van de folder in kwestie. Je zal dus eerst het volledige echte pad te weten moeten komen, en dat moeten vervangen in bovenstaande PHP/Bash scripts...

bealzebub

Legacy Member
Sonicje zei:
Dit is wel degelijk het volledige pad hoor.

Nope it's not.

Als je cPanel hebt op de host, dan is het volledige path:

/home/[je-accountnaam]

Als het Plesk is:

/var/www/vhosts/[je-domeinnaam]

Het is niet omdat je via FTP en SSH in die map terechtkomt dat dat het full path is. Dat is gewoon waarin je eigen "home" folder binnen linux.

Sonicje

Legacy Member
bealzebub zei:
Nope it's not.

Als je cPanel hebt op de host, dan is het volledige path:

/home/[je-accountnaam]

Als het Plesk is:

/var/www/vhosts/[je-domeinnaam]

Het is niet omdat je via FTP en SSH in die map terechtkomt dat dat het full path is. Dat is gewoon waarin je eigen "home" folder binnen linux.


Hier was ik niet van op de hoogte :)
Bedankt voor de informatie, dan pas ik dit meteen mee aan.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan