XLT blogas

2009-06-06

Katalogo ištrynimas su visais failais (PHP)

Įrašyta kategorijoje: hostingas, php — dainos @ 09:04
Tags: , , ,

PHP skriptas, ištrinantis visą katalogą, net jei jame yra failų, kurie neišsitrina per FTP (pvz., dėl netinkamų pavadinimų su \):

<?php
function trinam($katalogas){
if ($ab = opendir($katalogas)) {
$old_cwd = getcwd();
chdir($katalogas);
while ($file = readdir($ab)){
if ($file == ‘.’ || $file == ‘..’) continue;
if (is_dir($file)) {
if (!trinam($file)) return false;
}
else {
if (!unlink($file)) return false;
}
}
closedir($ab);
chdir($old_cwd);
if (!rmdir($katalogas)) return false;
return true;
}
else {
return false;
}
}

trinam(“katalogopavadinimas”);

?>

Panašus skriptas – senų failų ištrynimas

2008-11-26

Skriptas patikrinti, ar adresas egzistuoja – PHP curl

Įrašyta kategorijoje: php — dainos @ 16:33
Tags: , ,

Yra bent keletas gerų būdų patikrinti, ar adresas egzistuoja/veikia. Vienas iš jų – su CURL:

$adresas=”http://www.betkoks.lt”;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $adresas);
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)’);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$atsakymas = curl_exec($ch);
curl_close($ch);

if(preg_match(‘/HTTP\/1\.\d+\s+(\d+)/’, $atsakymas, $yra)){
$kodas=intval($yra[1]);
if($kodas>400){
echo “Adresas neveikia”;
}
}
else {
echo “nepasiekiamas”;
}

***
$kodas>400 : čia iš esmės atsižvelgiama tik į 404 klaidą. Žinoma, galima kreipti dėmesį ir į kitas klaidas.

2008-10-25

RSS srauto generavimas (PHP)

Įrašyta kategorijoje: php, seo — dainos @ 07:49
Tags: , ,

Parašysiu PHP skriptą, kaip sukurti svetainės RSS srautą.

<?php

// Srauto pavadinimas
$rss_title= “Pavadinimas”;

// Svetaines adresas (su http://)
$rss_site= “http://www.google.lt”;

// Svetaines aprasymas (nebutina)
$rss_description= “Keletas zodziu apie svetaine.”;
// RSS srauto kalba (pvz., “lt”=lietuvių, “en”=anglų)
$rss_language=”lt”;

header(“Content-Type: text/xml;charset=utf-8″);

// Jungiames prie duomenu bazes
$dbhost = “localhost”;
$dbusername= “vartotojas”;
$dbpassword = “slaptazodis”;
$dbname = “bazespavadinimas”;

mysql_connect($dbhost,$dbusername,$dbpassword);
@mysql_select_db($dbname) or die(“Nepavyko prisijungti prie duomenu bazes”);

// Paimam norimus irasus (pvz., naujausiu straipsniu pavadinimus) is duomenu bazes

$query = “SELECT *
FROM lentele
ORDER BY data DESC
LIMIT 10″;

$result = mysql_query($query) or die(“Bloga uzklausa”) ;
$numrows = mysql_num_rows($result);

echo
‘<?xml version=”1.0″ encoding=”utf-8″ ?>
<rss version=”2.0″>
<channel>
<title>’.$rss_title.’</title>
<link>’.$rss_site.’</link>
<description>’.$rss_description.’</description>
<language>’.$rss_language. ‘</language>’;

for($i=0;$i<$numrows;$i++)
{

$subject = mysql_result($result,$i,’question’); // pavadinimas
$subject = htmlentities(strip_tags($subject));

$aprasymas = mysql_result($result,$i,’answer’);
$aprasymas = htmlentities(strip_tags($aprasymas));
$aprasymas = stripslashes($aprasymas);
$aprasymas=ucfirst($aprasymas);
$pos = strrpos(substr($aprasymas , 0 , 250) ,’ ‘ ) ;
$aprasymas=substr($aprasymas, 0 , $pos).”…”;

$link = mysql_result($result,$i,’id’);
$pubdate = mysql_result($result,$i,’data’);

echo ‘<item>
<title>’.$subject.’</title>
<link>’.$rss-site.’/’.$link.’.html</link>
<description>’.$aprasymas.’</description>
<pubDate>’.$pubdate.’</pubDate>
</item>
‘;

}

mysql_close();

echo ‘ </channel>
</rss>’;

?>

2008-10-23

PHP cache – serverio apkrovos (CPU) mažinimas

Įrašyta kategorijoje: php — dainos @ 10:55
Tags: , , , , ,

Jei svetainė tampa labiau lankoma, o naudojama TVS nėra gerai optimizuota, ji vis labiau apkrauna serverio procesorių (CPU). Elementarus būdas dramatiškai sumažinti apkrovą – kiek įmanoma daugiau viską kešuoti (įrašyti į laikiną tekstinį failą – cache), ypač daug Mysql užklausų generuojančias TVS vietas (pvz., kiekviename puslapyje įterpiamus topus, naujausių straipsnių/nuorodų sąrašus ir pan.).
Kešavimo esmė – nustatytą laiką naudoti išsaugotą puslapio ar jo dalies kopiją. Praėjus tam laikui, kopija atnaujinama.
Kešavimui naudojamos PHP funkcijos ob_start, ob_get_contents, ob_end_flush.

Pavyzdys:
$cache_failas = “cache/failas.txt”;
$cache_laikas = 3600;
if (file_exists($cache_failas) && (time() – $cache_laikas
< filemtime($cache_failas)))
{
include($cache_failas);
}
else {
ob_start();

//php kodas, pvz paėmimas is duomenų bazes

//irasom i cache
$f = fopen($cache_failas, ‘wb’);
fwrite($f, ob_get_contents());
fclose($f);
ob_end_flush();
}

$cache_failas – failas, į kurį bus įrašoma. Jį galima sukurti iš anksto (ir atitinkamai
suchmod’inti) arba, jei nebus, jis gali būti sukurtas automatiškai (žr. apie fopen)
$cache_laikas – sekundėmis. Kas kiek laiko turi būti atnaujinama. Šiuo atveju: 3600 sek = 1 valanda

2008-09-20

Mysql UTF-8 lietuvybė

Įrašyta kategorijoje: php — dainos @ 19:18
Tags: , , ,

Papildomai prie šio būdo – dar kelios manipuliacijos mėginant priversti rodyti lietuviškas raides iš Mysql bazės.

mysql_set_charset, parašius po prisijungimo prie bazės, padeda teisingai atvaizduoti lietuviškas raides iš bazės su utf8 koduote. (Plačiau čia)

Alternatyva: mysql užklausa SET NAMES:

mysql_query(‘SET NAMES utf8);

Bazės konvertavimas į UTF:

ALTER TABLE lentele CONVERT TO CHARACTER SET utf8

Jei nepavyksta – alternatyva:

Pirmiausia norimą teksto stulpelį paverčiame į BLOB, o tada grąžiname į TEXT su UTF koduote:

ALTER TABLE lentele MODIFY `stulpelis` BLOB
ALTER TABLE lentele MODIFY `stulpelis` TEXT CHARACTER SET utf8

2008-09-07

Preg_match: lotyniškos raidės, skaitmenys ir ženklai

Įrašyta kategorijoje: Uncategorized — dainos @ 13:05
Tags: , , ,

Papildomai prie šios žinutės – dar vienas veikiantis kodas su Preg_match funkcija. Jis išfiltruoja netinkamas raides ir ženklus, bet palieka kai kuriuos simbolius (jei reikia):

if(preg_match(‘/^[-a-zA-Z0-9\s_,]*$/’, $tekstas)){
echo “Tinka”;
}
else {
echo “yra blogu zenklu”;
}

a-zA-Z0-9 = leidžiamos visos lotyniškos raidės

\s = leidžiami tarpai tarp žodžių

Taip pat leidžiamas kablelis, _ brūkšnys ir – brūkšnelis.

^ = ieškoma simbolių, neatitinkančių tų, kurie nurodyti skliaustuose [ ].

2008-07-29

Strtolower su UTF-8: pavertimas mažosiomis raidėmis

Įrašyta kategorijoje: Uncategorized — dainos @ 12:19
Tags: , , , , ,

UTF-8 koduote koduoti tekstai dažnai sukelia daug kvailų problemų, nes su jais neveikia kai kurios elementarios funkcijos. Pvz., paprasta pavertimo mažosiomis raidėmis PHP funkcija strtolower Unikodu koduotą tekstą paverčia nelemtais kvadratais. Tenka naudoti specialią funkciją, pvz.:

function konvert($text, $from, $to)
{
        return iconv($from, $to, $text);
}
function utf_strtolower($s)
{
    $t = “windows-1251″;
    $d = “UTF-8″;
    return konvert(strtolower(konvert($s, $d, $t)), $t, $d);
}

$tekstas=”РУССКИЙ текст”;

$keiciam=utf_strtolower($tekstas);

echo $keiciam;

Rezultatas: “русский текст”.

2008-07-18

PHP: senų failų ištrynimas iš serverio: delete old files

Įrašyta kategorijoje: php — dainos @ 08:50
Tags: , ,

Paprastas skriptas, su kuriuo galima ištrinti iš serverio failus, senesnius nei tam tikras dienų skaičius.

<?php
$diena = 60; // kiek dienu
$dir = ‘katalogas’; // katalogo, is kurio bus trinami failai, pavadinimas
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if ($file[0] == ‘.’ || is_dir($dir.’/’.$file)) {
continue;
}
if ((time() – filemtime($dir.’/’.$file)) > ($diena *86400)) {
unlink($dir.’/’.$file);
}
}
closedir($handle);
}

?>

2008-06-26

Preg_match: leisti tik lotyniškas raides ir skaitmenis

Įrašyta kategorijoje: Uncategorized — dainos @ 12:54
Tags: ,

preg_match(‘/^[a-z0-9\"\']+$/iD’, $s);

Pvz.:

<?php
$s=”zodis”;
if (preg_match(‘/^[a-z0-9\"\']+$/iD’, $s))
{
echo ‘OK’;
}
else
{
echo ‘Blogai’;
}

?>

2008-06-20

PHP: sužinoti paskutinio sekmadienio datą

Įrašyta kategorijoje: Uncategorized — dainos @ 17:11
Tags: ,

<?php
$kelinta=date(“N”); // suzinom, kelintadienis siandien
$timestamp=strtotime(“-$kelinta day”); // atimam tiek dienu, kiek praejo nuo paskutinio sekmadienio

// paverciam Unix’ini laika (timestamp) i normalia data, siuo atveju imam tik

// menesi, nes reikia skaiciu paversti lietuviskais zodziais (tiesa, yra ir kitu

// funkciju rodyti lietuviskus menesiu pavadinimus)
$menuo=str_replace(array(“01″,”02″,”03″,”04″,”05″,”06″,”07″,”08″,”09″,”10″,”11″,”12″),
array(“sausio”,”vasario”,”kovo”,”balandžio”,”gegužės”,”birželio”,”liepos”,”rugpjūčio”,
“rugsėjo”,”spalio”,”lapkričio”,”gruodžio”),date(‘m’, $timestamp));

echo $menuo.” “.date(‘d’, $timestamp);
?>

Kitas puslapis »

Blog at WordPress.com.