Vector logo of the PHP programming language wi...

Днес ще драсна едно леко четиво за php cache de html. Тука говорим за кеширане на изхода от кода ни а не както съм писал да кешираме скритповете до opcode ниво с eAccelerator. Така за какво иде речнека да си припомним на бързо работата на php-то. Подаваме заявка на web server-a ни той приема параметрите който подаваме след това той ги подава на php скрипта той се компилира и плюе резултат в html вариант. Това е в доста общи линии. Каква ще е идеята ни тука да прескачаме заявки, да прескачаме големи блокове или не чак толкова големи блокове като директно изрисуваме вече веднъж компилирания изход. Преимуществата са очевиднинамаляна на времето за изпълнение, по малко натоварване и потребление на ресурси. Като цяло не е откриване на топлата вода нито е нещо кой знае колко сложно. Има множество класове за тая цел като PHP Pear Cache_Lite който разполага с прекрасна функционалност но аз мисля в бъдеще да си напиша мой с доста по облекчена структура и мой си изисквания към кеширането. Сега ще разгледаме най аборигенския вариант с Output Control Functions. Така нека да кешираме нещо

//start cache all output after that will be saved

ob_start();

//generate output

echo 'Some dynamic output';

echo 'Some other dynamic output ...';

//assign output into variable

$var=ob_get_contents();

//close cache output

ob_end_flush();

Горния код е тривиален но нека да обясним какво стана. Първо декларираме от коя част в кода започва кеширането. След това си генерираме по стандартен начин изхода от кода. След това генерирания изход се присъединява към променлива която ще е достъпна по късно дали през файл някакво или през sessions това си е ваше решение. Накрая изчистваме и прекратяваме кеширането. Съвсем тривиална операция ако да речем геенрирането на кеша минава през огромни блокове от код така можем да спестим доста процесорно време като кешираме за известно време или за една сесия. Вече всичко опира то това какво искате дали да е общодостъпен кеша или да е достъпен за различен потребител.

Consolidată prin Zemanta

Următorul articol poate fi partea de sus a nebunie, dar așa cum am spus mereu că sunt mai bun decât encoder admin. Ieri în timp ce am zgâria unele script AJAX și a trebuit să trimită mai puțin de validare a datelor care utilizarea hash a acestora, deoarece script-ul nu împărtășește matrice $ _SESSION și lucrurile devin ușor incerte. Deci următoarele hellhole toate pameri, care sunt trimise POST sau GET pentru a le face unul dintre parametrii konkateriranite MD5 hash și apoi l-am compara. În general nu o schema I de rău. Hashing algoritmi în acest scop mingii MD5 , SHA, DESC și altele. lucrurile sunt clare, până atunci spun, care se va utiliza parametrii hashing MD5 (și în a face deytvitelnost). avem 3 parametru care este alimentat prin GET i = 1 n = 2 m = 3 și spune șirul de heshriane este 123 ne face următoarea MD5 hash 202cb962ac59075b964b07152d234b70. Până în prezent, nimic interesant mult. Acest lucru hash va scădea timp de câteva secunde la orice atac. Aici vine sarea si piperul pe ideea mea simplă. Să presupunem că eu iau primul și ultimul caracter al șirului, și schimbul de locurile lor devine, astfel, 002cb962ac59075b964b07152d234b72 hash deja dacă cineva, dacă nu ați citit codul idioție nostru este ceea ce face ca lucrurile devin dur atunci când încearcă să hacking. Hash reală este alta și chiar să fie izsnifen este absolut inutil. Dar de ce se opresc aici putem împărți câteva blocuri hash, în cazul lungimii MD5 32 dacă simbolul este împărțit în 4 la blocul 8 caractere și trecerea lor ca locuri devin chiar mai inconfortabil poziție. Далеч най приятния ефект е, че визуално си е стандартен md5 хеш и злия хахор може да си чупи докато има желание. Не съм добър по криптиране и не мога да пледирам за нещо кой знае колко фундаментално и прочие но ми допада колко е семпло като идея и реализация и съвременно надеждността е критично висока не като на нормалния MD5 които с една по грамотна видео карта се чупи за норматив.

Ето и примерен код за първата идея с размяната на първия и последния символ елементарен код от 3 реда 🙂

<?php

$hash = '202cb962ac59075b964b07152d234b70';

$first = substr($hash,0,1);
$last = substr($hash,-1);
$rest = substr($hash,1,30);
$hash = $last.$rest.$first;
echo "The real hash is : $str <br> inverted hash is : $hash";

?>

http://www.youtube.com/watch?v=Fvje9dzBHPM

Pentru a muta un proiect care programat în mod activ, fără control al versiunii în zilele noastre este o nebunie completă. În general, există numeroase opțiuni Bazaar , ager , git , SVN . Deci, aici, dacă vă așteptați să explice ce versiunea de control este bun și de ce nu va fi. noi folosim git. multe motive – ușor să se adapteze, foarte flexibil, scris de Linus Torvalds este de a servi versiunile Linux Kernel, acestea din urmă sunt, cel puțin 2 motivul 😉 . Astăzi am avut de a crea un nou depozit, A început un nou proiect. Am creat de fapt un pic noi arhive cu mult timp în urmă, când am avut-o și m-am uitat micile momente care. Creați depozit lovit de mai multe fișiere, primul magazin totul a decurs corect. Însăși stabilirea depozitului a fost echipat standard:

git init
echo "Short project's description" > .git/description
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
git commit -a
touch .git/git-daemon-export-ok

În principiu, orice lucru care nu este în regulă. Apoi am decis să testeze o mașină de la distanță pentru a păstra conținutul și încercarea de a face un push-ma trântit cu mesajul urât:

Împingându la git://gitHost / proiect
la distanta: eroare: refuzul de a actualiza verificat ramură: ref / capete / master
la distanta: eroare: În mod implicit, actualizarea sucursalei curente într-un depozit de bază non-goale
la distanta: eroare: este interzis, deoarece aceasta va face ca indicele și să lucreze copacul inconsistente
la distanta: eroare: cu ce te-a împins, și va necesita "resetarea git –greu’ a se potrivi
la distanta: eroare: arborele de lucru pentru HEAD.
la distanta: eroare:
la distanta: eroare: Puteți seta 'receive.denyCurrentBranch’ variabilă de configurare pentru a
la distanta: eroare: 'ignora’ sau "avertizează’ în depozitul de la distanță, pentru a permite împingerea în
la distanta: eroare: filiala sa actuală; in orice caz, acest lucru nu este recomandată decât dacă
la distanta: eroare: aranjate să actualizeze arborele său de lucru pentru a se potrivi ceea ce te-a împins în unele
la distanta: eroare: alt mod.
la distanta: eroare:
la distanta: eroare: Pentru a reduce la tăcere acest mesaj și încă mai păstrează comportamentul implicit, a stabilit
la distanta: eroare: "receive.denyCurrentBranch’ variabilă de configurare pentru a "refuza".
Pentru a git://gitHost / proiect
! [respins la distanță] maestru -> maestru (sucursala este în prezent verificat)
eroare: nu a reușit să împingă niște refs spre 'git://gitHost / proiect’

Așa că se pare că încearcă să se revolte în arborele principal al proiectului și software-ul politicos mi-a tăiat. În general am nici o intenție de a face Branch in plus, deoarece persoanele implicate în proiectele au motive clare și alte. Тука идва момента да отбележа че съм дефинирал много некадърно заглавието но това е друг момент. Като цяло решението на проблема е тривиално в .git/config на проекта ви трябва да добавите следната директива:

[receive]
denyCurrentBranch = false

След това всичко си идва на мястото.

http://www.youtube.com/watch?v=16bRiH5zfOY

Packet Tracer

Image via Wikipedia

Днес ми се наложи да демонстрирам една симулация през Cisco Packet Tracer на машина на която не беше инсталиран. В общи линии малоумщината е, че стимулатора на Cisco е за x86 машини а при мен машината беше x64. При опит за инсталация умира с грозното съобщение

Attempting to install package now
dpkg: error processing PacketTracer-5.3_3.i386.deb (–instalare):
package architecture (i386) does not match system (amd64)
Errors were encountered while processing:
PacketTracer-5.3_3.i386.deb

Общо взето всичко е очевидно Debian-ския пакет не иска да се инсталира защото е за друга архитектура. От тук нататък проблема е ясен dpkg + форсирано инсталиране за да байпаснем грешката за различна платформа. Bin-ския файл на инсталатора реално е само разархивиращ се архив който се разархивира в /tmp/selfextract.XXXXX папка където XXXXX е произволен низ. В тази директория се намира .deb файлът на Packet Tracer-a. Инсталацията се извършва с командата

dpkg -i --force-all /tmp/selfextract.XXXXX/PacketTracer-5.3_3.i386.deb

Естествено с root права.

Consolidată prin Zemanta