Vector logo of the PHP programming language wi...

Днес ще драсна едно леко четиво за php cache el html. Тука говорим за кеширане на изхода от кода ни а не както съм писал да кешираме скритповете до opcode ниво с eAccelerator. Така за какво иде речнека да си припомним на бързо работата на php-то. Подаваме заявка на web server-ĝi prenas nin elektoj kiu ni prezentas, ke li sendas al php skripto, ĝi estas kompilita kaj ne zorgas pri la rezulto en html eblo. Ĝi estas en tre Ĝeneralaj terminoj. Каква ще е идеята ни тука да прескачаме заявки, да прескачаме големи блокове или не чак толкова големи блокове като директно изрисуваме вече веднъж компилирания изход. La avantaĝoj estas evidentaj – namelena kuri tempo, pli malgranda ŝarĝo kaj rimeda konsumo. Kiel regulo, ne eltrovo de varma akvo aŭ iu kiu scias kiom malfacila ĝi. Има множество класове за тая цел като 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();

Горния код е тривиален но нека да обясним какво стана. Първо декларираме от коя част в кода започва кеширането. След това си генерираме по стандартен начин изхода от кода. Tiam la produktaĵo generita estas alligita al unu variablo, kiu estos havebla poste, ĉu tie estas dosiero de iu speco aŭ sesioj, ĝi estas via decido. Fine ischitane kaj malaktivigi caching. Absolute banala operacio se ni diras, generato la konservejo iras tra grandegaj blokoj de kodo tiel ke ni povas savi sufiĉe da CPU-tempo kiel la procesoro estas konservejo por momento aŭ por sesio. Вече всичко опира то това какво искате дали да е общодостъпен кеша или да е достъпен за различен потребител.

Plibonigita per Zemanta

La sekva artikolo eble supro de malsagxeco sed kiel mi ĉiam diras, ke mi estas pli bona ol codificador admin. Hieraŭ dum Arano iuj AJAX skripto kaj devis sendi malpli datumoj validación ke ilia uzo hash ĉar la skripto ne dividas la $ _SESSION tabelo kaj aĵojn iĝi iomete necerta. Tiel faru la sekvajn hellhole ĉiuj pameri kiuj prezentis POST aŭ GET fari ilin unu de la MD5 hash konkateriranite parametroj kaj poste mi komparas. Entute ne estas malbona skemo mi. Hashing algoritmoj tiucele pilko MD5 , SHA, DESC kaj aliaj. Nun tion vi scias diri, kiu uzos MD5 kradanta parametroj (kaj fari deytvitelnost). ni havas 3 parametro kiu estas nutrita tra GET mi = 1 n = 2 m = 3 kaj diru al la ĉeno de heshriane estas 123 faras al ni la sekvan MD5 hash 202cb962ac59075b964b07152d234b70. Ĝis nun nenio multa interesa. Tiu hash falos dum kelkaj sekundoj en ajna atako. Tie venas la salo kaj pipro sur mian simplan ideon. Diru mi prenas la unua kaj lasta karaktero de la kordo, kaj interŝanĝante siajn lokojn tiel ricevas 002cb962ac59075b964b07152d234b72 hash jam se iu se vi ne legis niajn kodo idioteco estas kion faras la aĵojn malglata kiam klopodas pirati. Reala hash estas alia kaj eĉ esti izsnifen estas tute senutila. Sed kial halti tie eblas dividi hash kelkaj blokoj, en la kazo de MD5 longo 32 se la simbolo estas dividita en 4 ĉe bloko 8 karakteroj kaj ilia movo kiel lokoj fariĝis eĉ pli malkomforta pozicio. Далеч най приятния ефект е, че визуално си е стандартен 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

Movi projekto kiu aktive planita sen versitena nuntempe estas kompleta frenezo. Ĝenerale estas multnombraj ebloj bazaro , mercurial , git , sVN . Do jen, se vi atendas klarigi kion versitena estas bona kaj kial ĝi ne estos. ni uzu git. multaj kialoj – facile ĝustigi, tre fleksebla, skribita de Linus Torvalds estas servi la Linukso Kernel versioj, la lasta estas almenaŭ 2 kialo 😉 . Hodiaŭ mi devis krei novan enciklopedio, Ĝi komencis novan projekton. Mi efektive kreis iom deponejoj ĝi longan tempon kiam ni havis kaj mi forgesis la malgrandaj momentoj kiuj. Krei deponejo ekfrapita plurajn dosierojn unua vendejo ĉio iris bone. La tre fikso de la deponejo estis normo:

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

Esence ion kiu ne estas bone. Tiam mi decidis provi fora maŝino konservi enhavon kaj klopodante fari puŝo-me brufermis sxlosita la malbela mesaĝon:

Puŝanta al Git://gitHost / projekto
foraj: eraro: rifuzi ĝisdatigi Taksis branĉo: ref / kapoj / mastro
foraj: eraro: defaŭlte, ĝisdatigi la aktuala branĉo en ne-malplena enciklopedio
foraj: eraro: malkonfirmas, ĉar ĝi faros la indekso kaj laboro arbo malkonsekvenca
foraj: eraro: kun kio vi puŝis, kaj postulos 'git reset –malfacila’ parigi
foraj: eraro: la laboro arbo al kapo.
foraj: eraro:
foraj: eraro: Vi povas agordi 'receive.denyCurrentBranch’ agordo variablo por
foraj: eraro: 'ignori’ aŭ 'averti’ en la fora dosieraro por permesi puŝante en
foraj: eraro: lia aktuala branĉo; tamen, tio ne estas rekomendita se vi
foraj: eraro: aranĝis por ĝisdatigi lian laboron arbo parigi kion vi puŝis en iuj
foraj: eraro: alimaniere.
foraj: eraro:
foraj: eraro: Al squelch tiun mesaĝon kaj ankoraŭ teni la defaŭlta konduto, aro
foraj: eraro: 'receive.denyCurrentBranch’ agordo variablo por 'rifuzi'.
al Git://gitHost / projekto
! [fora malakceptita] mastro -> mastro (branĉo nuntempe Taksis)
eraro: malsukcesis puŝi iun ref al 'git://gitHost / projekto’

Do ŝajne provas ribeli en la ĉefa arbo de la projekto kaj programaro ĝentile tranĉi mi. Entute mi havas neniun intencon de fari ekstra Branĉo ĉar la personoj implikitaj en la projektoj havas klaran kaj aliaj kialoj. Тука идва момента да отбележа че съм дефинирал много некадърно заглавието но това е друг момент. Като цяло решението на проблема е тривиално в .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 (–instali):
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 права.

Plibonigita per Zemanta