Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kłopot z "Top5 Download"
Forum PHP.pl > Forum > Przedszkole
MoD
Mam taki kłopot: zrobiłem sobie "top5 download" dla swojej strony domowej. Kliknięcia mam w osobnych plikach, więc wczytuje je wszystkie do tablicy. Niby wszystko jest dobrze, ale jednak mam błędy. Oto kod:
[php:1:4bcd9f061c]
<?php
$pliki = opendir("download");
$i = 0;

while ($plik = readdir($pliki)) {
if (ereg(".txt")) {
$pliczek = fopen($plik);
$dane = fgets($pliczek, 255);
fclose($pliczek);
$i++;
$top[$i] = $dane."|".$plik;
}
}

sort($top);
reset($top);

$count = count($top);

$download1 = explode("|", $top[$count]);
$count--;
$download2 = explode("|", $top[$count]);
$count--;
$download3 = explode("|", $top[$count]);
$count--;
$download4 = explode("|", $top[$count]);
$count--;
$download5 = explode("|", $top[$count]);

$download1[1] = substr($download1[1], 0, -4);
$download2[1] = substr($download2[1], 0, -4);
$download3[1] = substr($download3[1], 0, -4);
$download4[1] = substr($download4[1], 0, -4);
$download5[1] = substr($download5[1], 0, -4);

print "<a href="download.php?file=".$download1[1]."">".$download1[1]."</a> (".$download1[0].")<br>";
print "<a href="download.php?file=".$download2[1]."">".$download2[1]."</a> (".$download2[0].")<br>";
print "<a href="download.php?file=".$download3[1]."">".$download3[1]."</a> (".$download3[0].")<br>";
print "<a href="download.php?file=".$download4[1]."">".$download4[1]."</a> (".$download4[0].")<br>";
print "<a href="download.php?file=".$download5[1]."">".$download5[1]."</a> (".$download5[0].")<br>";

?>
[/php:1:4bcd9f061c]
Pliki z ilością są w katalogu /download/, a strypt w głównym katalogu serwisu.
Wyskakuje mi znany "parse error". Z góry dziękuję za pomoc.
mike
Pokaż tego errora.
Ale i ta już widać, że na początku masz błąd:
w linii 7 brakuje ci jednego parametru w funkcji fopen()
matys
Do funkcji fopen musisz dopisać literke:
Kod
'r' - Otwórz tylko do odczytu; ustawia wskaźnik pliku na początku pliku.



'r+' - Otwórz do odczytu i zapisu; ustawia wskaźnik pliku na początku pliku.



'w' - Otwórz tylko do zapisu; ustawia wskaźnik pliku na początku pliku i obcina plik (zeruje) do 0 długości. Jeśli plik nie istnieje to próbuje go utworzyć.



'w+' - Otwórz do odczytu i zapisu; ustawia wskaźnik pliku na początku pliku i obcina plik (zeruje) do 0 długości. Jeśli plik nie istnieje to próbuje go utworzyć.



'a' - Otwórz tylko do zapisu; ustawia wskaźnik pliku na końcu pliku. Jeśli plik nie istnieje to próbuje go utworzyć.



'a+' - Otwórz do odczytu i zapisu; ustawia wskaźnik pliku na końcu pliku. Jeśli plik nie istnieje to próbuje go utworzyć.
MoD
Zrobiłem, i zamiast plików wyświetlają mi się pięć razy "()".
invx
a jaka dodales literke questionmark.gif
MoD
Dodałem parametr "r"
matys
Dodaj r+winksmiley.jpg
hwao
Ja bym to zrobil tak:
[php:1:671d247cdd]<?php

$arrFile = file( 'plik' );

// Tutaj sobie segreguje tablice tak zebym mial na poczatku Te najczesciej sciagane

for($i=0; 15 >= $i; $i++)
// Wysietlasz co trzeba
echo $i.'<br/>';
}
?>[/php:1:671d247cdd]
Pozatym zmien temat na odpowiedni bo ten nic nie mowi... inaczje bedzie blok tematu
MoD
hwao, tak by można zrobić o ile bym miał to wszystko w jednym pliku. A ja mam kliknięć odpowiednich linków w oddzielnych plikach.
mike
Moim zdaniem prościej było by trzymać dane w jednym pliku, ale jak chcesz w osobnych to zrób tak:

Masz takie pliki:
Cytat
10

Cytat
100

Cytat
13

Cytat
13

Cytat
101

Cytat
90

I teraz zrób tak:
[php:1:e2493c649d]
<?php
$pliki = opendir("download");
$i = 0;

while ($plik = readdir($pliki))
{
if(ereg(".txt", $plik))
{
$pliczek = fopen("download/".$plik, "r");
$dane = fgets($pliczek, 255);
fclose($pliczek);
$top[$i] = array( 'plik' => $plik, 'dane' => $dane);
$i++;
}
}
?>
[/php:1:e2493c649d]
Teraz kożystasz z funkcji z manuala, znajdziesz ją w oryginale pod opisem funfcji sort() w komentażach użytkowników.
[php:1:e2493c649d]
<?php
function mu_sort($array, $key_sort)
{
$key_sorta = explode(",", $key_sort);
$keys = array_keys($array[0]);
for($m=0; $m < count($key_sorta); $m++)
{
$nkeys[$m] = trim($key_sorta[$m]);
}
$n += count($key_sorta);
for($i=0; $i < count($keys); $i++)
{
if(!in_array($keys[$i], $key_sorta))
{
$nkeys[$n] = $keys[$i];
$n += "1";
}
}
for($u=0;$u<count($array); $u++)
{
$arr = $array[$u];
for($s=0; $s<count($nkeys); $s++)
{
$k = $nkeys[$s];
$output[$u][$k] = $array[$u][$k];
}
}
sort($output);
return $output;
}// koniec funkcji;

$top = mu_sort( $top, "dane"); // <= w ten sposób jej używasz
?>
[/php:1:e2493c649d]
Potem robisz coś takiego:
[php:1:e2493c649d]
<?php
for( $i=1; $i<6; $i++)
{
echo substr($top[count($top)-$i]['plik'], 0, -4).' -- '.$top[count($top)-$i]['dane'].'<br>';
}
?>
[/php:1:e2493c649d]
I dostajesz coś takiego:
Cytat
plik_5 -- 101
inny_plik -- 100
plik_6 -- 90
pierwszy_plik -- 13
plik_3 -- 11

Teraz tylko to na linki przerób. I po wszystkim. Pozdrawiam, Mike.
MoD
Dzięki! Działa!
A że dane lepiej trzymać w jednym pliku, to ja wiem, ale jak robiłem skrypt zliczający kliknięcia to miałem raptem kilka plików, a teraz mam ich ponad 20 i nie chce mi się całego skryptu zmieniać.
Jeszcze raz dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.