Goedemorgen,

Ik heb gisteren een php gevonden alleen hij werkt niet echt, het is de bedoeling dat hij binnen een dag de eerst oude jpg files van de vorige dag automatisch verwijderd. Dit wordt gebruikt voor een automatische foto slider. Ik heb er een hekel aan om elke keer de map leeg te maken.

Kunnen jullie mij vertellen wat er verkeerd is aan deze file?

Code://

<?php
$expiretime=1440; //Verloopt na minuten, 1 dag = 1x 24x60= 1440

$tmpFolder="/home/vhosts/(Domein)/subdomains/(Subdomein)/httpdocs/wp-content/uploads/uploaden/uploads/";
$fileTypes=".jpg";

foreach (glob($tmpFolder . $fileTypes) as $Filename) {

$FileCreationTime = filectime($Filename);

$FileAge = time() - $FileCreationTime;

if ($FileAge > ($expiretime * 60)){

echo "The file $Filename is older than $expiretime minutes\n";

//delete bestanden
unlink($Filename);
}

}
?>
Mogelijk werkt het met filemtime beter. Filectime is een inode change, en zal wat vaker false teruggeven dan filemtime.
Als je niet weet wat er fout gaat... of omdat het niet werkt.. moet je gaan debuggen...

Om maar te beginnen:
foreach (glob($tmpFolder.$fileTypes) as $Filename) {


Wat doet het en wat doen de functies in deze regel code?
- foreach: een lus
- glob -> Find pathnames matching a pattern
Jij zegt: "glob($tmpFolder.$fileTypes)"
Dus eigenlijk staat hier:
glob(/home/vhosts/(Domein)/subdomains/(Subdomein)/httpdocs/wp-content/uploads/uploaden/uploads/.jpg)


En dat wil je natuurlijk niet.. je wilt dat "alle" jpg bestanden gevonden worden.

Dus dit is fout:

$fileTypes=".jpg";


en moet worden:

$fileTypes="*.jpg";


maar dan ben je er nog niet.... want je zal merken dat het niet werkt...
Dus we gaan verder "debuggen", ik heb een bestand in een mapje geplaatst ( 22-06-2017 16:35 )
met de volgende code:

echo 'Filename: '.$Filename.'<br/>';
$FileCreationTime = filectime($Filename);
echo 'FileCreationTime: '.$FileCreationTime.'<br/>';
echo 'FileExpireTime: '.$expiretime.'<br/>';
$FileAge = time() - $FileCreationTime;
echo 'FileAge: '.$FileAge.'<br/>';
echo 'Conclusie: if '.$FileAge.' >'.($expiretime * 60).' <br/>';


Dat geeft als output:

Filename: uploads/20170622_132105.jpg
FileCreationTime: 1502960942
FileExpireTime: 1440
FileAge: 1148
Conclusie: if 1148 >86400 


met deze info... ben je al iets wijzer... want je laatste "if" wil je het volgende weten:
if ($FileAge > ($expiretime * 60)){


Met andere woorden: if(1148 > 86400){

Dus er zal NOOIT een bestand verwijderd worden op deze manier.
Wellicht dat het handiger is om


if ($FileAge > ($expiretime * 60)){


aan te passen naar:

if ($FileCreationTime > ($expiretime * 60)){
filectime is *niet* de creation time, zoals ook duidelijk vermeld wordt.
Het ging mij meer even om het debuggen en oplossing geven voor zijn probleem door een zichtbare manier weer te geven die elke "leek" snapt.

ik had je bericht nog niet gezien toen ik bezig was met typen;
maar goed, je hebt gelijk...

zou je ipv filectime(), filemtime() gebruiken dan krijg je deze output:

$FileCreationTime = filemtime($Filename);
// output: FileCreationTime: 1498142106
// vergelijkbare output zou dan zijn: if 4820471 > 86400 en dan zou  if ($FileAge > ($expiretime * 60)){  ook prima werken :)
Elmar vH op 17/08/2017 11:40:49


.... if 4820471 > 86400 ....



Ik krijg hierbij het idee dat dan altijd alles wordt verwijderd.
- SanThe - op 17/08/2017 11:45:16

Ik krijg hierbij het idee dat dan altijd alles wordt verwijderd.



filemtime($Filename); // 17-8-2017 09:23
//Output: 1502956150
//output: if 7137 >86400 
Uhm dus wat wis de uiteindelijke eind code?

En wat was er verkeerd aan ook interessant leer ik ook weer van! :)
Perry Saarloos op 17/08/2017 13:15:14

Uhm dus wat wis de uiteindelijke eind code?

Ik ben uit gegaan van jouw code in de topic post. Lees de reacties door, bekijk de voorbeelden en test het evenzelf...

Perry Saarloos op 17/08/2017 13:15:14

En wat was er verkeerd aan ook interessant leer ik ook weer van! :)

Aanvulling op bovenstaande.. je zou aan de hand van de gegeven codes zelf een heeeeeel eind moeten komen, zelfs zo ver dat je het werkend krijgt.

Er is niks mis met "even zelf stoeien". ;-)

Kom je er dan ALSNOG niet uit.. help ik je graag weer verder.

Hint: regel 5 en regel 9 aanpassen ;-)
Elmar vH op 17/08/2017 13:32:17

[quote="Perry Saarloos op 17/08/2017 13:15:14"]
Uhm dus wat wis de uiteindelijke eind code?

Ik ben uit gegaan van jouw code in de topic post. Lees de reacties door, bekijk de voorbeelden en test het evenzelf...

Perry Saarloos op 17/08/2017 13:15:14

En wat was er verkeerd aan ook interessant leer ik ook weer van! :)

Aanvulling op bovenstaande.. je zou aan de hand van de gegeven codes zelf een heeeeeel eind moeten komen, zelfs zo ver dat je het werkend krijgt.

Er is niks mis met "even zelf stoeien". ;-)

Kom je er dan ALSNOG niet uit.. help ik je graag weer verder.

[/quote]

Haha oke ik ga het proberen! Bedankt!
Elmar vH op 17/08/2017 13:32:17

[quote="Perry Saarloos op 17/08/2017 13:15:14"]
Uhm dus wat wis de uiteindelijke eind code?

Ik ben uit gegaan van jouw code in de topic post. Lees de reacties door, bekijk de voorbeelden en test het evenzelf...

Perry Saarloos op 17/08/2017 13:15:14

En wat was er verkeerd aan ook interessant leer ik ook weer van! :)

Aanvulling op bovenstaande.. je zou aan de hand van de gegeven codes zelf een heeeeeel eind moeten komen, zelfs zo ver dat je het werkend krijgt.

Er is niks mis met "even zelf stoeien". ;-)

Kom je er dan ALSNOG niet uit.. help ik je graag weer verder.

Hint: regel 5 en regel 9 aanpassen ;-)

[/quote]

Ik krijg 'm niet aan de praat :( ik heb het nogmaals uit geprobeerd;


<?php
$expiretime=86400;

$tmpFolder="/home/vhosts/(Domein)/subdomains/(Subdomein)/httpdocs/wp-content/uploads/uploaden/uploads/";
$fileTypes="*.jpg";

foreach (glob($tmpFolder . $fileTypes) as $Filename) {

$FileCreationTime = filectime($Filename);

$FileAge = time() - $FileCreationTime;

if ($FileCreationTime > ($expiretime * 60)){

echo "The file $Filename is older than $expiretime minutes\n";

//delete bestanden
unlink($Filename);
}
}
?>

Wat doe ik verkeerd?

Reageren