От около 2 седмици php 5.3 влиза във историята бавно но сигурно. На 11-ти обявиха края на поддръжката му и че ще бъдат пускани само кръпки по сигурността в продължение на 1 År. В общи линии PHP 5.4 преминава в стадии old stable а PHP 5.5 става stable, което е малко забавно понеже все още част от допълненията и плъгините на php не работят съвсем коректно но пък и версия 5.5 е доста нова затова ще се въздържа от миграция към нея.

Та нека да си кажа за миграцията ми към 5.4 от 5.3. Предварително бях пуснал информация за остарелите функции, такива които са променени кардинално и такива които вече няма да се поддържат за да нямаме драми и от двете страни дали ще запали или не 😉 Та днес сутринта избрах час за старт на миграцията около 7 като стана, че да има минимални болки при миграцията ако не мине гладко. За моя огромна изненада всичко мина повече от гладкокомпилирах си PHP 5.4.17 стартирах apache-то и о небеса всичко е там. Бърз поглед из логовете няма рев на depricated или въобще непознати функцииявно момчетата са си свършили работата добре. След това ми остана само да прекомпилирам и допълненията които са компилира със старото API като APC, RAR и прочие. Втори рестарт и всичко заспа. Отделно очаквам подобрения в производителността тъй като навсякъде хората сочат с големия пръст едни таблички дето се показва как PHP 5.4 консумира по малко РАМ и изпълнява скриптовете по бързо.

Преди няколко дни излезе Xampp 1.8.0 вчера след надграждане от версия 1.7.7 имах доста интересен проблем. Phpmyadmin-а не ми се отваряше и изгърмяваше със 403

Access forbidden!


New XAMPP security concept:

Access to the requested object is only available from the local network.

This setting can be configured in the filehttpd-xampp.conf”.

Веднага отворих httpd-xampp.conf който при мен се намира в /opt/lampp/etc/extra/, на пръв поглед всичко изглеждаше наред. Правилата за локалната мрежа бяха наред. Отделно че отварях от localhost. WTF ??? Погледнах log-а гледам че достъпа ми е отрязан от конфигуацията. Тука вече нещата ме ахнаха и честно казано донякъде малко на късмет открих проблема. След като преглеждах httpd.conf-а видях в Allow/Deny клаузите един последен ред Require all granted. О да еврика. Това е новия контролен механизъм който влезе в apache 2.4.x. С него се дава достъп или се отказва такъв на всички изискани, в общи линии се имитира Allow/Deny функционалността :). За да поправим проблема добавяме Require all granted в директивите за папката /opt/lampp/phpmyadmin. След промените при мен изглежда така

<Directory “/opt/lampp/phpmyadmin”>
AllowOverride AuthConfig Limit
Order allow,deny
Allow from all
Require all granted
</Directory>

 

Вианги може да се пробва и друга дивоти, например да се преименува папката phpmyadmin на нещо други и да се направи alias към не. Но е по грозно и не особено смислено 🙂

p.s Питаха ме защо ползвам XAMPP а не чиста инсталация на всички компоненти както си ги е моя Debian родилотговорът е много много простМЪРЗЕЛ. Мързи ме да напиша няколко команди после да си пипна конфовете и прочие. Доста по лесно е сваляш целия пакет разархивираш и палиш 😉

Forstærket af Zemanta

Debian OpenLogo

Миналия ден един приятел ми писа че имал проблем с Debian server-a си. По точно не му пазел сессиите повече от 30 минути независимо колко се настройва session.gc_maxlifetime. В общи линии проблема е че Debian са решили да пренапишат поведението на сесиите като вместо garbage collector-а се стартира един cron на всяка 9-та и 39-та минута който почиства старите сесии. Тои се намира в /etc/cron.d/php5

като цяло семпличък скрипт който стартира от своя страна /usr/lib/php5/maxlifetime и в него се намира променливата колко време да е живота на кукито който е 1440 секунди или 24 минути 😉 От тук нататък има 2 варианта или да се спре крон-а и по този начин се прекратява автоматичното чистене което може по късно да се пренастрой от php.ini или направо в самия скрипт да се промени продължителноста на живота на сесиите с променливата max. Аз лично предпочитам втория вариант. Доста по чист е като цяло но има и недостатъкако се презапише файлът промените ни ще се изгубят което си е неприятен факт.

ps. Сега като се замисля вероятно ако се дефинира друго място където да се съхранява сеиината информация чрез самото php би трябвало да излезе извън обхвата на скрипта и по този начин да се използва пак по нормален сесията без да прекъсва грубо.

ini_set('session.gc_maxlifetime', 14400);
 ini_set('session.gc_probability', 1);
 ini_set('session.gc_divisor', 100);
 session_save_path(APP_PARENT_DIR . '/sessions');

Forstærket af Zemanta

I dag vil jeg fortælle om min elendighed omkring en server med Suhosin (Suhosin) Patch og hvordan Debian Sqeeze klarer det. Lad os nu starte lidt længere væk. Når du installerer PHP via Debian-pakkesystemet (Stabil for andre kan jeg ikke sige, hvordan er selv) Nødvendigvis du installerer og Suhosin mod til det. Jeg havde problemer med nogle Prettywell skrevet PHP system, og jeg tog den kardinal beslutning i stedet for at gøre et system glitch og returnere bygherren at slippe af med sikkerhedsrettelsen og spare mig hovedpine. Generelt kan jeg frimodigt sige, at det var en af mine mest tåbelige beslutninger, der nogensinde er truffet. I begyndelsen fjerner jeg PhP5 (PhP5)-Suhosin jeg nulstille webserver-A og ups bjælke – Patch-A er stadig indlæst. Efter en meget kort undersøgelse, jeg opdaget, At pakken blev kompileret og med stakken direkte ind i koden betyder, at der ikke er nogen lukning eller fjernelse, medmindre du genkompilere koden igen uden patches. Jeg beslutter, at jeg vil trække det og genkompilere den til Deb pakken. Said done gøre din apt-get kilde php5 trækker min nuværende kildekode, udpakket osv.. Her er min perfekte idé at downloade pakken Sori at fjerne patches og kompilere det igen til en desisk pakke plus en to små bygge optimeringer. Talt udført – Fjernede det unødvendige plaster fra Debian/Patches/suhosin. Jeg fjernede det ikke at spille og i Debian/Patches/serien. Hidtil har alt klart og uden problemer. Så jeg frigive at genkompilere pakken med Debuild (Debuild) Og som forventet jeg blæste op udarbejdelsen på grund af manglende overskrifter. Selvfølgelig vil der være en sådan mangel – Selvom jeg bruger Debian netinstall. Jeg hurtigt redo udarbejdelsen, På et tidspunkt igen kun, At med en mærkelig fejl i Zend / zend_stream. h eller. c Kan du ikke huske præcis (Hvis jeg er bekymret, kan jeg senere kontrollere præcis, hvilken fil og i hvilken rækkefølge det var). Efter nogle misforståelser, hvad der sker, og hvorfor Adjeba Rumble i Zend kerne – Hvor jeg ikke ville have at buldre af en eller anden grund og lidt længere undersøgelse opdagede, at dette problem er relativt sjældne, og der er ikke mange signaler om det. Jeg formoder, at en af de patches i sori er forkert, men nu har jeg ingen frækhed at tjekke det. Xmmmmm Mærkeligt Super Strange. Jeg besluttede næsten at udarbejde en rent PHP, men jeg besluttede at prøve spejle af dotdeb (dotdeb) Se der, hvad der sker. Der kompileringen døde på grund af nogle mærkelige afhængigheder, men problemerne i hovedsagen. Hvilket igen var forståeligt, at de ikke var 30-40 Patches, der var i den stabile pakke. Efter et par lange og mislykkede forsøg blev jeg træt, og jeg tog vaniljepakken af og kompileret den med næsten Debian-ski muligheder med ideen om at omskrive min nuværende installation og installere nye pakker fra Feeder kan have opførsel af pakken installeret fra lageret (Sandsynligvis en anden ikke-differentieret løsning). Som jeg havde forventet uden alle de patches installationen gik glat. Dette er resultatet af min config. nice fil:

#! /bin/sh
#
# Created by configure

CFLAGS='-g -O2 -fPIC -Wall -fsigned-char -fno-strict-aliasing   -gstabs' \
CXXFLAGS='-g -O2' \
'./configure' \
'--with-apxs2=/usr/bin/apxs2' \
'--prefix=/usr/local/php5' \
'--disable-cgi' \
'--with-config-file-path=/etc/php5/apache2' \
'--with-config-file-scan-dir=/etc/php5/apache2/conf.d' \
'--build=x86_64-linux-gnu' \
'--host=x86_64-linux-gnu' \
'--sysconfdir=/etc' \
'--localstatedir=/var' \
'--mandir=/usr/share/man' \
'--disable-debug' \
'--with-regex=php' \
'--disable-rpath' \
'--disable-static' \
'--with-pic' \
'--with-layout=GNU' \
'--with-pear=/usr/share/php' \
'--enable-calendar' \
'--enable-fileinfo' \
'--enable-hash' \
'--enable-json' \
'--enable-sysvsem' \
'--enable-sysvshm' \
'--enable-sysvmsg' \
'--enable-bcmath' \
'--with-bz2' \
'--enable-ctype' \
'--without-gdbm' \
'--with-iconv' \
'--enable-exif' \
'--enable-ftp' \
'--enable-dbase' \
'--with-gettext' \
'--enable-mbstring' \
'--with-onig=/usr' \
'--with-pcre-regex' \
'--with-mysql=shared,mysqlnd' \
'--with-mysql-sock=/var/run/mysqld/mysqld.sock' \
'--with-mysqli=shared,mysqlnd' \
'--enable-pdo=shared' \
'--with-pdo-mysql=shared,mysqlnd' \
'--with-pdo-odbc=shared,unixODBC,/usr' \
'--with-pdo-pgsql=shared,/usr/bin/pg_config' \
'--with-pdo-sqlite=shared,/usr' \
'--with-pdo-dblib=shared,/usr' \
'--enable-phar' \
'--enable-shmop' \
'--enable-sockets' \
'--enable-dom' \
'--enable-wddx' \
'--enable-tokenizer' \
'--with-zlib' \
'--with-kerberos=/usr' \
'--with-openssl=/usr' \
'--enable-soap' \
'--enable-zip' \
'--with-mhash=yes' \
'--with-exec-dir=/usr/lib/php5/libexec' \
'--with-system-tzdata' \
'--without-mm' \
'--with-readline=/usr' \
'--without-sybase-ct' \
'--without-sqlite' \
'--without-sqlite3' \
'--without-mssql' \
'--enable-pcntl' \
'--enable-inline-optimization' \
"[email protected]"

Dette er en konfiguration svarende til Dotdeb-buildet. Præfikset mulighed, hvor PHP bibliotek filer vil blive indsat, er som baseret og vigtigst.. Samt de andre gange rette dem i henhold til dit system for ikke at føle bygge med ændringen af veje.

Forstærket af Zemanta

Vector logo of the PHP programming language wi...

Днес ще драсна едно леко четиво за php cache на 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 това си е ваше решение. Накрая изчистваме и прекратяваме кеширането. Съвсем тривиална операция ако да речем геенрирането на кеша минава през огромни блокове от код така можем да спестим доста процесорно време като кешираме за известно време или за една сесия. Вече всичко опира то това какво искате дали да е общодостъпен кеша или да е достъпен за различен потребител.

Forstærket af Zemanta