Archiwum tagów: php

Własny kanał RSS w PHP

Kolejny, programistyczny, wpis „ku pamięci”.

Poniższe rozwiązanie generuje prosty kanał RSS, który jest bezbłędnie interpretowany przez większość czytników (wliczając Google Reader).

Plik db.php przechowuje ustawienie dostępu do bazy MySQL.


//db.php

<?php

$user 	= "username";
$pass 	= "password";
$db		= "localhost";
$dbname    = "dbname";
$polaczenie  = mysql_connect($db, $user, $pass) or die('Brak połączenia z serwerem MySQL. Błąd: '.mysql_error());
$baza 	 = mysql_select_db($dbname, $polaczenie);

?>

Plik rss.php jest odpowiedzialny za wygenerowanie odpowiedniego pliku XML – po zaimplementowaniu poniższego kodu wystarczy dodać http://www.twojastrona.pl/rss.php do czytnika.


//rss.php
<?php

header('Content-Type: application/xml; charset=utf8');
include('db.php');
$rss .= "<?xml version=\"1.0\" encoding=\"utf8\"?>\r\n";
$rss .= "<rss version=\"2.0\">\r\n";
$rss .= "<channel>\r\n";
$rss .= "<title>Tytył</title>\r\n";
$rss .= "<link>http://www.twojastrona.pl</link>\r\n";
$rss .= "<description>Opis......</description>\r\n";
$rss .= "<image>\r\n";
$rss .= "<title>Logo</title>\r\n";
$rss .= "<link>http://www.twojastrona.pl</link>\r\n";
$rss .= "<url>http://www.twojastrona.pl/logo.jpg</url>\r\n";
$rss .= "</image>\r\n";
echo $rss;
$db_query = 'SELECT * FROM blog ORDER BY id DESC';
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
$db_wynik = mysql_query($db_query) or die(mysql_error());
while($row = mysql_fetch_array($db_wynik))
{
echo '	<item>
<title>'.$row["tytul"].'</title>
<link>'.$row["link"].'</link>
<description>'.$row["wpis"].'</description>
</item>';
}
?>
</rss>
</xml>

Uwaga: Powyższy kod jest strasznie prymitywny, ale … działa.

Na koniec polecam bardziej eleganckie (dość rozbudowana klasa obsługująca kanały RSS napisana w PHP) rozwiązanie znalezione w sieci: Link

PHP: sortowanie listy plików w katalogu po dacie

Natrafiłem ostatnio następujący problem: wypisać listę plików znajdujących się w podanym katalogu posortowaną według daty modyfikacji pliku.
Rozwiązanie nie jest może super eleganckie, ale działa i ktoś zainteresowany może to poprawić.

Kod znajduje się również: tu


function Filename_Sort($Folder_Name)
{
$counter=0;
if ($FP = opendir($Folder_Name))
{
while (false !== ($current_file = readdir($FP)))
if (!is_dir($Folder_Name.'/'.$current_file.'/'))
{
// Getting the position of extension
$Ext_position=strrpos($current_file,'.');
// checking if extension is present
if ($Ext_position!==false)
{
// not showing php files (you can add more conditions here or use glob instead opendir to get filenames
if(substr($current_file,$Ext_position+1)!='php')
{
//creating two arrays: array of filenames and array of file modification times - using filemtime function
$Current_file_date = date ('y-m-d H:i', filemtime($Folder_Name.'/'.$current_file));
$Filenames_Array[$counter]=$current_file;
$Dates_Array[$counter]=$Current_file_date;
$counter+=1;
}
}
}
closedir($FP);
}
else return false;
//sorting table of filenames
array_multisort($Dates_Array, SORT_DESC, SORT_STRING, $Filenames_Array);
$i=0;
while ($i < $counter)
{
//getting result on the screen as list of http links
$current_file=$Filenames_Array[$i];
echo '<a href="'.$Folder_Name.$current_file.'">'.$Folder_Name.$current_file.' - '.date ('y-m-d H:i', filemtime($Folder_Name.'/'.$current_file)).'</a>
';
$i++;
}
}

$folder = 'uploads/';
Filename_Sort($folder);