webForumDet fria alternativet

Problem med att radera bilder med unlink()

PHP

14 svar · 1 327 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Jag håller på med en kod som automatiskt ska radera bildfiler på min server efter 3 timmar. (Bilderna blir dock inte raderade från servern.)

Är det jag som tänker helt fel, eller varför blir inte bilderna raderade med hjälp av följande kod.

	$hours = 3;
	$dt = get_date_time(gmtime() - ($hours * 3600));

	$res = mysql_query("SELECT id, webcam_id, filename FROM archive WHERE added < $dt");
	while ($arr = mysql_fetch_assoc($res))
	{
			@unlink("/cam/webcam_" .intval($arr["webcam_id"]). "/" .htmlspecialchars($arr["filename"]). "");
			mysql_query("DELETE FROM archive WHERE webcam_id = " .intval($arr["webcam_id"]). "");

	}

Är oerhört tacksam för lite hjälp i rätt riktning.

Medlem sedan nov. 2006188 inlägg
#2

unlink("../../../userpics.smsnetwork.org/public_html/{$_SESSION['sess_recruitment_link']}.jpg");

Så där kör jag med.

Du kan ju ta modda om dem.

Medlem sedan juli 20041 271 inlägg
#3

dwmedia skrev:

unlink("../../../userpics.smsnetwork.org/public_html/{$_SESSION['sess_recruitment_link']}.jpg");

Så där kör jag med.

Du kan ju ta modda om dem.

Tack för svaret, men det hjälper tyvärr inte mig.
Sökvägen till bilden, är korrekt.

Medlem sedan jan. 2005953 inlägg
#4

Du bör absolut ta bort @-tecknet innan anropet till unlink. Det gör ju så att eventuella felmeddelanden inte visas.

Sen är de tomma strängarna i slutet av argumenten till unlink och mysql_query helt onödiga. Påverkar visserligen inte ditt problem, men det gör filen större helt i onödan.

Medlem sedan nov. 2006188 inlägg
#5

metalboy skrev:

Du bör absolut ta bort @-tecknet innan anropet till unlink. Det gör ju så att eventuella felmeddelanden inte visas.

Sen är de tomma strängarna i slutet av argumenten till unlink och mysql_query helt onödiga. Påverkar visserligen inte ditt problem, men det gör filen större helt i onödan.

Det stämmer helt fint :-)
han fick ta en liten titt på hur man har löst det själv :)

Så det går ju lösa hans problem om man vill, men vore ju gött om dem tog sig och titta eller tittar man på

http://se.php.net/manual/en/function.unlink.php

Medlem sedan nov. 2006188 inlägg
#6
$hours = 3;
$dt = get_date_time(gmtime() - ($hours * 3600));

$sql = "SELECT id, webcam_id, filename FROM archive WHERE added < $dt";
$result = mysql_query($sql, $conn);
while($row = mysql_fetch_array($result)) {

unlink("/cam/webcam_{$row['webcam_id']}/{$row['filename']}");

$sql = "DELETE FROM archive WHERE webcam_id = '{$row['webcam_id']}' LIMIT 1";
mysql_query($sql) or die("SQL: $sql<br />" . mysql_error());
}

och skulle mappen vara utanför så bör du lägga till .. innan /

Sedan tiden kan du med hjälp av Datum Intervall också lösa det istället än ta ut den på det sätt du har gjort för snygga till koden direkt i mysql.

Du har en liten början där i alle fall.

Medlem sedan juli 20041 271 inlägg
#7

metalboy skrev:

Sen är de tomma strängarna i slutet av argumenten till unlink och mysql_query helt onödiga. Påverkar visserligen inte ditt problem, men det gör filen större helt i onödan.

Vad menar du med "tomma strängar"? De är inte tomma.

Medlem sedan jan. 2005953 inlägg
#8

"" är en tom sträng.

Medlem sedan juli 20041 271 inlägg
#9

metalboy skrev:

"" är en tom sträng.

Hade uppskattat något mer hjälp än så, men tror dock att jag förstod poängen ändå.

Medlem sedan jan. 2005953 inlägg
#10

Som jag skrev så hade det jag skrev om tomma strängar ingenting med ditt problem att göra, det var bara ett allmänt tips.

Fick du något felmeddelande när du tog bort @-tecknet?

Medlem sedan juli 20041 271 inlägg
#11

metalboy skrev:

Som jag skrev så hade det jag skrev om tomma strängar ingenting med ditt problem att göra, det var bara ett allmänt tips.

Fick du något felmeddelande när du tog bort @-tecknet?

Nej, jag fick inget felmeddelande, fast att error reporting är "aktiverat".
Jag misstänkte att mysql kanske returnerade ett tomt värde, och att det var därför som inte bilderna kunde raderas?

Ska kolla om det fungerar bättre vid nästa körning.

Medlem sedan jan. 2005953 inlägg
#12

Är felrapporteringsnivån inställd på att visa även E_WARNING?
Kommer du in i while-loopen?
Vad returnerar unlink? true/false
Är du helt 100% säker på att sökvägen är korrekt? Tänk på att / utgår från diskroten, inte webbroten.

Medlem sedan juli 20041 271 inlägg
#13

Ja, det är inställt på E_WARNING.
Vet ej om jag ens kommer in i loopen (är dålig på felsökning).
Samma med unlink, vet inte.

Ja, jag är helt säker på sökvägen.

Medlem sedan jan. 2005953 inlägg
#14

För att kolla om du kommer in i while-loopen kan du helt enkelt lägga in
echo "Inne i while" på lämplig rad :)

Lägg till en if-sats för att kontrollera vad unlink returnerar.
if (unlink(sökväg))
echo "unlink returnerade TRUE"
else
echo "unlink returnerade FALSE"

Medlem sedan juli 20041 271 inlägg
#15

Ja, det var ju väldigt enkelt.
Ska testa med detta. Tack!

EDIT: Efter lite lätt felsökning (tack till "metalboy"), märkte jag att sökvägen till bilden, trots allt var fel.
(Den första / skulle tydligen bort.)
Får försöka att svälja min stolthet, och anse mig besegrad.

Tack för all hjälp.

271 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)