2014 m. lapkričio 3 d., pirmadienis

PHP: XLS(X) to array

Naudojantis phpExcel
<?php

function convertXLStoArray($infile, $outfile){
 
    if(!file_exists($infile) || !is_readable($infile) || !file_exists($outfile) || !is_readable($outfile))
    return FALSE;
 
    $fileType = PHPExcel_IOFactory::identify($infile);
    $objReader = PHPExcel_IOFactory::createReader($fileType);
 
    $objReader->setReadDataOnly(true);   
    $objPHPExcel = $objReader->load($infile);
    echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
    
  foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
  $arrayData[$worksheet->getTitle()] = $worksheet->toArray();
 }
 
 var_dump($arrayData);
}

2014 m. liepos 24 d., ketvirtadienis

Paspaudžiamas fono paveikslėlis

CSS: 

body {
       background-image: url(/images/some_image.jpg);
       background-attachment: fixed;
       background-repeat: no-repeat;
       background-position: center top;
       cursor: pointer;
}

#page {
       cursor: auto;
}



JS:


function recordOutboundLink(link, category, action) 
{
   _gat._getTrackerByName()._trackEvent(category, action);
   setTimeout('window.open("' + link + '")', 100);
}

jQuery(document).ready(function() {
       jQuery("body").click(function(e) {
               var target = jQuery(e.target);
               if (target.attr('id') == 'body_id')
               {
                       recordOutboundLink('http://www.karlmonaghan.com','outbound', 'karlmonaghan')
               }
       });
});



HTML: 

<body id="body_id">

Nemokamų iliustracijų šaltiniai

  1. flickr.com
    Vienas didžiausių ir žinomiausių nemokamas nuotraukas talpinančių portalų.  Norėdami iš šio portalo atsisiųsti nemokamą nuotrauką, turime pasitikrinti, ar nuotraukos naudojimo teisės nėra apribotos. Portalo paieškos galimybė leidžia nuotraukas filtruoti pagal licenziją.
  2. pixmac.co.uk
    Portalas siūlo 42 612 nemokamų nuotraukų. Leidžiama pasirinkti patikusio paveikslėlio dydį.
  3. photl.com
    Svetainė siūlo 467 215 nuotraukų. Paveikslėlių paieškos filtras leidžia surasti nuotrauką pagal anglišką raktinį žodį bei spalvą.
  4. imagebase.davidniblack.com
    Aukštos kokybės nemokamos nuotraukos portale suskirstytos į kategorijas.
  5. photorack.net
    Svetainėje gausu nemokamų nuotraukų bei kitų grafinių elementų.
  6. hooverstock.com
    Portale rasime nemokamas nuotraukas bei keletą su šia tema susijusių apmokymų.
  7. free-stockphotos.com
    Tai dar viena nemokamų nuotraukų talpykla. Paveikslėliai suskirstyti į kategorijas, arba nuotraukų galime ieškoti pagal raktinius žodžius.
  8. stockvault.net
    Šiame puslapyje rasime nemokamų nuotraukų, paveikslėlių, kitų grafikos elementų.
  9. freerangestock.com
    Portale susibūrusi fotografų bendruomenė dalinasi nemokamomis nuotraukomis.
  10. photogen.com
    Puslapyje siūlomos nemokamos nuotraukos su tam tikrais minimaliais apribojimais.
  11. freedigitalphotos.net
    Nemokamos nuotraukos šiame portale surūšiuotos pagal kategorijas. Veikia paieškos sistema.
  12. public-domain-photos.comPortale patalpinta 5 000 nemokamų nuotraukų.
  13. shutterstock.comPuslapis sudėtos 15 277 169 nemokamomos nuotraukos,  iliustracijos bei grafiniai elementai.
  14. turbophoto.com
    Nemokamų nuotraukų talpykla siūlo 2 000 nuotraukų, suskirstytų į 10 kategorijų.
  15. morguefile.com
    Svetainė išsiskiria unikaliu pavadinimu bei nemokamų aukštos kokybės nuotraukų gausa.
  16. freepixels.com
    Svetainė didžiuojasi, nes joje siūlomos 4 290 nemokamos nuotraukos.
  17. dreamstime.com
    Šioje interneto svetainėje rasime 11 milijonų nemokamų paveikslėlių.
  18. creatingonline.com
    Interneto portale yra daugiau nei 1 000 nemokamų nuotraukų.
  19. kavewall.com
    Nuotraukos, suskirstytos į 18 kategorijų, tam, kad būtų lengviau randamos dominančios, nemokamos  iliustracijos.
  20. morguefile.com
    Nuotraukas šiame portale rasime paieškos laukelyje įvedę dominantį raktažodį.
  21. adigitaldreamer.com
    Portale rasime daugiau nei 1 000 nemokamų nuotraukų, suskirstytų į kategorijas.
  22. openphoto.net
    Svetainėje yra 15 221 nemokamų paveikslėlių.
  23. photoeverywhere.co.uk
    Daugiau nei 3 000 nemokamų paveikslėlių kelionių tematika.
  24. woophy.com
    Nuotraukos iš įvairių šalių. Rasime dominančią vietovės nuotrauką paspaudę ant žemėlapio.
  25. studio7designs.com
    Nemokamos nuotraukos gamtos tematika.
  26. cepolina.com
    Portale rasime daugiau nei 8 000 kokybiškų, nemokamų nuotraukų.
  27. everystockphoto.com
    Šis portalas yra nuotraukų paieškos sistema.
  28. freephotosbank.com
    Šiose svetainėje nemokamas nuotraukas talpina įvairūs fotografai.
  29. pdphoto.org
    Nemokamų nuotraukų talpykla, kur paveikslėlius gali talpinti visi norintys.
  30. historicalstockphotos.com
    Nemokamos nuotraukos iš praeities.

2014 m. liepos 22 d., antradienis

Nustatymas labiausiai apkraunamų puslapių

Tam tikslinga naudoti apachetop komandą. Jos instaliavimas:
yum install apachetop

programa beveik realiame laike analizuoja access logus, todėl jai reikia pateikti kelią iki norimo access logo, pvz: apachetop -f /var/log/virtualmin/manosaitas_access_log

norint stebėti visus savo hostinge esančius access logus, vedame:
apachetop $(find /var/log/virtualmin/ -type f -size +10k -name *access_log -print | sed 's/^/-f '/)

2014 m. liepos 21 d., pirmadienis

Atakų nustatymas ir IP blokavimas

CMD komanda, parodanti, kiek sujungimų pateikia kiekvienas IP:
netstat -alpn | grep :80 | awk '{print $5}' |awk -F: '{print $(NF-1)}' |sort | uniq -c | sort -n

Blokuojami IP adresai saugomi ugniasienės faile /etc/hosts.deny  tačiau geriausia įvesti blokuoamus IP per CMD:
# iptables -A INPUT -s 65.55.44.100 -j DROP
# service iptables save

Blokavimui atšaukti:
# iptables -D INPUT -s 65.55.44.100 -j DROP
# service iptables save

Pažiūrėjimui kas blokuojama:
iptables -L -n

Pastaba: kai kurie VDS limituoja iptables irasu limita iki 4000 ir to negalima padidinti ant openVZ platformos, taip pat siojeplatformoje nebeikia ipset listai.

iptables-save to dump the current rule set into a file.
iptables-save > /etc/sysconfig/iptables
To load the file you don't need to restart the machine, you can use iptables-restore
iptables-restore < /etc/sysconfig/iptables
Per terminala leidziant komandą, glaima pateikti ir komentara, kaip pvz:
iptables -A INPUT -p tcp -m tcp --dport 22 -m comment --comment "allow SSH to this host from anywhere" -j ACCEPT
Ne visi VDS palaiko rules comment: Depending on your distribution, you may need to load the ipt_comment or xt_comment modules into your running kernel first.

Norint uzblokuoti mysql is isopres:

iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP


If you want to remove the filtering, use this:

iptables -D INPUT -p tcp --dport 3306 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -D INPUT -p tcp --dport 3306 -j DROP

ARBA, be iptables galima pasieiti: Add to my.cnf:
skip-networking
Please note you will need to use localhost, not 127.0.0.1, after the change.

2014 m. birželio 30 d., pirmadienis

SSL diegimas Virtualmin aplinkoje

Pirmiausias veiksmas - įgalinti SSL palaikymą: pasirenkame domeną, spaudžiame: Edit Virtual Server ->  Enabled feature -> pažymime 'SSL website enabled?' -> Save Virtual Server

Išduodant sertifikatą, reikia sugeneruoti sertifikato užklausą. Einame Server Configuration ->  Manage SSL Certificate ->  Signing Request , supildome informaciją.

Tuomet, gavę iš tiekėjo raktus, juos instaliuojame: spausti Server Configuration ->  Manage SSL Certificate ->  New Certificate.

Signed SSL certificate reiškia - Sertifikato raktas
Matching private key reiškia - Privatus raktas

Dar instaliuojame CA šakninį raktą, einame:  Server Configuration ->  Manage SSL Certificate -> CA Certificate
CA certificate file reiškia - Leidėjo šakninis raktas.

Pasitikrinti, kaip veikia SSL galima čia: https://www.ssllabs.com/ssltest/analyze.html

2014 m. birželio 26 d., ketvirtadienis

Įrankis Regexp kodui rašyti ir testuoti

https://regex101.com/
http://txt2re.com/ - tekstą skaido į regexp kodą
http://refiddle.com/ - regexp pavyzdžių užsaugojimui ir testavimui
http://www.rexv.org/ - regexp redaktorius ir testuotojas, turintis daug parinkčių
http://sugartin.info/wp-content/uploads/2011/08/Screen-shot-2011-08-15-at-11.02.39-AM.png - paruoštukė

PDF to text

Reikia paversti iš PDF (netgi apsaugoto) į tekstą? Teks panaudoti į serverį instaliuojamą programą: http://foolabs.com/xpdf/download.html
Instaliavimas į CentOS: per CMD langą paleidžiame: yum install xpdf antiword

Tuomet paleisti php kodą:
$tmpfname = tempnam(sys_get_temp_dir(), 'pdftotext');
exec( 'pdftotext pathtopdf.pdf '.$tmpfname );
echo file_get_contents($tmpfname);

2014 m. gegužės 23 d., penktadienis

PHP - kaip padaryti aktyvias nuorodas tekste?

function makeClickableLinks($s, $blank = false) {
  return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1"'.(($blank===true) ? ' target="_blank"' : '').'>$1</a>', $s);
}

2014 m. gegužės 22 d., ketvirtadienis

jQuery - kaip paleisti funkciją, įvykus dinamiškai sukurto objekto įvykiui?

$(document).on( eventName, selector, function(){} );

jQuery - kaip pašaukti norimus veiksmus, kai HTML elementas paslepiamas ar parodomas

sekimo paleidimas:

(function ($) {
  $.each(['show', 'hide'], function (i, ev) {
    var el = $.fn[ev];
    $.fn[ev] = function () {
      this.trigger(ev);
      el.apply(this, arguments);
    };
  });
})(jQuery);

Pritaikymas konkrečiam elementui:
$(function () {
  $('div').on('hide', function () {
    alert('div hidden');
  });
});

2014 m. gegužės 15 d., ketvirtadienis

PHP - kaip užkoduoti duomenis su raktu, kad jie būtų atkoduojami tik su tuo raktu

$key = 'password to (en/de)crypt';
$string = ' string to be encrypted '; // note the spaces
To Encrypt:
$iv = mcrypt_create_iv(
    mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC),
    MCRYPT_DEV_URANDOM
);

$encrypted = base64_encode(
    $iv .
    mcrypt_encrypt(
        MCRYPT_RIJNDAEL_256,
        hash('sha256', $key, true),
        $string,
        MCRYPT_MODE_CBC,
        $iv
    )
);
To Decrypt:
$data = base64_decode($encrypted);
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC));

$decrypted = rtrim(
    mcrypt_decrypt(
        MCRYPT_RIJNDAEL_256,
        hash('sha256', $key, true),
        substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)),
        MCRYPT_MODE_CBC,
        $iv
    ),
    "\0"
);

2014 m. gegužės 12 d., pirmadienis

PHP klasė išgauti SEO duomenims

Puiki SEO PHP klasė: https://github.com/eyecatchup/SEOstats
SEOstats yra galinga atviro kodo PHP biblioteka išgauti SEO rodiklius: atgalinėms nuorodoms, raktažodžių ir srauto statistika, Google PageRank, Alexa Trafficrank ir daug daugiau. SEOstats siūlo daugiau nei 50 skirtingų metodų ir renka duomenis iš Alexa, Google, Mozscape, SEMRush, Open-Site-Explorer Sistrix, Facebook, Twitter ir daug daugiau.

MySQL Backup užsakymas ir siuntimas email

Pasikurkite backup.sh failą su sokiu turiniu:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/sh
 
#this is the prefix before the filename and can be anything you want
fileprefix='mysql_backup_';
 
#this is your mysql user - best to create a new mysql user called backup that has access to all databases
myuser='backup';
 
#your mysql password
mypass='s0mething$ecure123';
 
#the backup directory that you should put at the root, not public_html
#chmod 644 the backup folder and leave the trailing slash
backupdir='/home/{typically your main cpanel account here without brackets}/backup/';
 
#more emails can be added by using a , to separate
emailto='test@test.com';
 
#subject of the email
emailsubject='mysql backup';
 
#body of the email
emailbody='mysql db backup attached';
 
#shouldn't need to change below this
date=`date '+%Y-%m-%d'`;
file=$fileprefix$date.gz;
 
mysqldump -u$myuser -p$mypass --all-databases | gzip &gt; $backupdir$file;
find $backupdir -name "$fileprefix*"  -mtime +7 -type f -exec rm -rf {} ;
echo $emailbody | mutt -s "$emailsubject" -a $backupdir$file "$emailto";
ir užsakykite CronJob. Šis skriptas autyomatiškai trina 7 dienų senumo backupus. Nustatykite, kad backup aplankas turėtų rašymo teises (644)

2014 m. balandžio 1 d., antradienis

PHP: simple_html_dom : Fatal error


PHP Fatal error: Call to a member function find() on a non-object
Jei dirbdami su simple_html_dom susiduriate su tokia klaida, naudokite tikrinimą:

$html = file_get_html($url);

if($html && is_object($html) && isset($html->nodes)){

   foreach($html->find('img'as $img){

      //kodas...

   }

}

2014 m. kovo 30 d., sekmadienis

Iš Flash (SWF) į HTML5

Įrankis - konverteris: https://www.google.com/doubleclick/studio/swiffy/

paveikslėlių kompresinimui

Dažnai kuriant banerius ar web dizaino elementus, norima suspausti paveikslėlius. Ne visada būtina paleidinėti Photoshop - kartais užtenka tokio online įrankio paveiksėlių optimizavimui: http://tools.dynamicdrive.com/imageoptimizer/index.php#.Uzg439x_vE4
Papildyta (2014-10-07) - https://kraken.io/web-interface - įrankis, apdorojantis daug paveikslų iškart.
Papildyta 2016-01 - https://tinypng.com/

Serverio tool - http://www.saerasoft.com/caesium/
web free  api http://jpgoptimiser.com/  ir http://pngcrush.com/

Animated gif? Some pixels do not change, make them transparent: http://www.lcdf.org/gifsicle/

Adobe Flash - ClickTag diegimas

Kuriant Flash reklaminius skydelius, reklamos tinklai tam, kad galėtų skaičiuoti paspaudimus, paprastai reikalauja skydeliuose įdiegti ClickTag palaikymą.

Flash 4, 5, 6 or 7 su ActionScript 2:
on (release) { 
   if (clickTAG.substr(0,5) == "http:") { 
      getURL(clickTAG, clickTARGET); 
   } 
} 
Flash 8 or 9 su ActionScript 2
on (release) { 
   if (_root.clickTAG.substr(0,5) == "http:") { 
      getURL(_root.clickTAG, _root.clickTARGET); 
   } 
} 
HTML kodas:
Su embed tag:
<embed src="path_to_swf.swf?clickTAG=http://website-to-open.com&clickTARGET=_blank" width="300" height="250">
Su object tag (rekomenduotina):
<object type="application/x-schockwave-flash" data="path_to_swf.swf" width="300" height="250">
<param name="flashvars" value="clickTAG=http://website-to-open.com&clickTARGET=_blank">
<embed src="path_to_swf.swf" FlashVars="clickTAG=http://website-to-open.com" quality="high" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Google įrankis SWF to HTML5
https://developers.google.com/swiffy/convert/upload

ClickTAG sluoksnio uždėjmas ant swf banerio:
http://getclicktag.com/get-clicktag/