Seite 1 von 1

Problem mit DL-Mod

Verfasst: 17.08.2004 18:29
von Bene
Hallo,

ich habe ein Problem mit meinem DL-Mod.
Wenn ihr hier schaut, seht ihr, dass die
Warning: filesize(): Stat failed for http://www.dpsg-re.de/downloads/interes ... _karte.gif (errno=2 - No such file or directory) in /homepages/14/d89944760/htdocs/forum/downloads.php on line 121
erscheint.
Zeile 121 sieht so aus:

Code: Alles auswählen

if ($file_extern == "0") $file_size = filesize($download_dir.$file_path.$file_name_name);
die gesamte downloads.php seht ihr HIER.
Ich habe $download_dir = "http://www.dpsg-re.de/downloads/"; gesetzt, es war vorher ein relativer Pfad zu einem Verzeichnis im Board-Ordner. Stellt das schon das Problem dar? Sollte es doch eigentlich nicht, oder?

Für mich schauts so aus, als ob das Script keine Rechte hat, die Datei-Eigenschaften zu lesen. Die Datei http://www.dpsg-re.de/downloads/interes ... _karte.gif die es nicht geben soll, existiert nämlich....

Danke schon einmal für eure Hilfe!

Bene

Verfasst: 17.08.2004 21:43
von Bene
Hallo!
Ich mal wieder!
Ich habe den Fehler:

Code: Alles auswählen

$download_dir = "http://www.dpsg-re.de/downloads/";
haben wir jetzt auf

Code: Alles auswählen

$download_dir = "../www/downloads/";
Der Mod scheint aber tatsächlich nur mit (relativen) Pfaden klar zu kommen...

Allerdings zieht der noch nicht den Traffic ab...
Wir arbeiten dran :-)

//edit //
hmm...
ich weiß nun schon, dass die entscheidenden Zeilen in der load.php stehen. Es sind die Zeilen 51 - 57:

Code: Alles auswählen

if ( $userdata['session_logged_in'] AND $user_traffic > $file_size AND $file_free == "0" AND $file_extern == "0")
	{
	$query_traffic = "UPDATE " . USERS_TABLE . " SET user_traffic=user_traffic - " . $file_size . " WHERE user_id = '$user_id'";
	$query_klicks = "UPDATE " . DOWNLOADS_TABLE . " SET klicks=klicks+1 WHERE id = '$id'";
	$result_traffic = mysql_query($query_traffic);
	$result_klicks = mysql_query($query_klicks);
	}
Hier müsste ja der Fehler sein, sodass der Traffic nicht vom Gesamtlimit abgezogen wird... nur wo steckt der??!

Ich habe dir Zeile 51

Code: Alles auswählen

if ( $userdata['session_logged_in'] AND $user_traffic > $file_size AND $file_free == "0" AND $file_extern == "0")
geändert. Vorher stand da

Code: Alles auswählen

if ( $userdata['session_logged_in'] AND $user_traffic > $file_size AND $file_free == "0" AND $file_free == "0" AND $file_extern == "0")
ist die doppelte Abfrage nach $file_free == "0" nötig?? Nicht wirklich, oder??

Die komplette load.php seht ihr HIER

Ich hoffe, ihr könnt mir helfen!!
Bene

Verfasst: 19.08.2004 06:44
von makue
Bene hat geschrieben:Der Mod scheint aber tatsächlich nur mit (relativen) Pfaden klar zu kommen...
Man kann filesize() nur auf lokale Dateien anwenden, egal ob relativ oder absolut.
Bene hat geschrieben:ist die doppelte Abfrage nach $file_free == "0" nötig?? Nicht wirklich, oder??
Nein, doppelt ist nicht nötig. Vielleicht solltest Du an dieser Stelle mal mit print die Variablen testweise ausgeben um zu sehen welche Bedingung nicht stimmt.

Verfasst: 19.08.2004 14:45
von Bene
Ich habe das Script mal einem Arbeitskollegen zum Fraß vorgeworfen:
in der load.php:

Code: Alles auswählen

$file_size = ($row['extern']==0 ) ? '' : filesize($download_dir .$file_path.$file_name);
ist falsch.
Die richtige Zeile ist:

Code: Alles auswählen

$file_size = ($row['extern']== "0" ) ? filesize($download_dir.$file_path.$file_name) : '';
Danke trotzdem für deine Mühe, makue!

Dass filesize() nur lokale Dateien verarbeiten kann ist mir zwar bewusst. Allerdings habe ich den Zusammenhang wohl nicht gepeilt... :oops:

Gruß,

Bene

Verfasst: 19.08.2004 18:35
von makue
Schön das es geht. Aber...

== "0" ist eigentlich falsch, da die Spalte "extern" vom typ tinyint ist, also eine Zahl, kein String. PHP wandelt aber den Typ beim Vergleich, so dass es im Endeffekt trotzdem funktioniert. Ganz sauber ist das nicht. Dies hätte sicher auch gereicht:

Code: Alles auswählen

$file_size = ($row['extern']!=0 ) ? '' : filesize($download_dir .$file_path.$file_name); 
Also einfach bloß die Vergleichsbedingung negieren oder eben, wie Du es gemacht hast, den hinteren Teil des trinären Ausdrucks drehen.