От около 2 седмици php 5.3 влиза във историята бавно но сигурно. На 11-ти обявиха края на поддръжката му и че ще бъдат пускани само кръпки по сигурността в продължение на 1 년. В общи линии 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 родилотговорът е много много простМЪРЗЕЛ. Мързи ме да напиша няколко команди после да си пипна конфовете и прочие. Доста по лесно е сваляш целия пакет разархивираш и палиш 😉

제만타에 의해 강화

Debian OpenLogo

Миналия ден един приятел ми писа че имал проблем с 데비안 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');

제만타에 의해 강화

Днес ще разказвам за неволите си около един сървър със Suhosin patch и как 데비안 Sqeeze се справя с него. Сега да започнем малко по отдалече. Когато си инсталирате php през пакетната система на Debian (stable за другите не мога да кажа как е още) задължително ви се инсталира и suhosin mod към него. Имах проблеми с едни плу-кадърно написана php система и взех кардиналното решение вместо да правя дебъг на системата и да връщам репорт на разработчика да разкарам кръпката за сигурност и така да си спестя главоболията. Общо взето смело мога да кажа че това е било едно от най глупавите ми решения взимани някога. Най напред премахвам модула на php5-suhosin рестартирам web server-a и опа гредаpatch-a все още е зареден. След много кратко проучване откривам, че пакета е компилирах и с пача директно в кода което ще рече че няма изключване или премахване освен ако не се прекомпилира кода наново без пача. Решавам че ще го дръпna и прекомпилирам до deb пакет. Речено сторено правя си apt-get source php5 дърпа ми се настоящия сорс код, разпакетирва се и прочие. Тука идеалната ми идея да сваля сорса на пакета да премахна пача и да го компилирам отново до дебиански пакет плюс една две малки оптимизации по компилацията. Речено сторенопремахнах ненужния пач от debian/patches/suhosin.patch премахнах го да не играе и в debian/patches/series. До тук всичко ясно и без проблеми. След това пускам да се компилира пакета с debuild и както очаквах ми изгърмя компилацията заради липсващи хедъри. Естествено че ще има такива липсивсе пак съм с debian netinstall. Поправям набързо глупостта си пускам наново компилацията, в един момент отново премира само, че със странна грешка в Zend/zend_stream.h или .c не помня точно (ако ми се занимава може по късно да проверя точно кой файл и на кой ред гърмеше). След известно недоумяване какво се случва и защо аджеба гърми в Zend ядротокъдето не би трябвало да гърми по никаква причина и едно малко по дълго проучване откривам че тоя проблем е относително рядък и няма много сигнали за него. Подозирам че някоя от кръпките в сорса не е наред но сега нямам нерви за да го проверявам. Хммммм странно супер странно. Почти реших да си компилирам чисто php но реших да пробвам огледалата на dotdeb да видим там какво ще се случи. Там компилацията умря заради някакви странни зависимости но подмина проблемите в основната част. Което от своя страна е разбираемо нямаше ги те 30-40 кръпки който бяха в стабилния пакет. След няколко дълги и неуспешни опита ми писна и сви свалих ванила пакета и го компилирах с почти debian-ски опции с идеята да пренапише настоящата ми инсталация и като се инсталират нови пакети от хранилката да може да има поведение на пакет инсталиран от хранилището (вероятно поредното не обособно разумно решение). Както очаквах без всички кръпки инсталацията мина гладко. Това е изхода на config.nice файлът ми:

#! /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]"

Това е конфигурация близка до тази на компилацията на dotdeb. Като основаното и най важно е prefix опцията където ще се разполагат файловете с библиотеките на php. Него както и другите пъти ги коригирайте според вашата система така че да не се усети компилацията с промяна на пътищата.

제만타에 의해 강화

Vector logo of the PHP programming language wi...

오늘은 PHP에 대한 가벼운 독서를 긁을 것이다 캐시Html. 스파이크를 캐시하기 위해 작성한 대로 가만히 있는 것이 아니라 코드의 출력을 캐싱하는 것에 대해 이야기하고 있습니다. Opcode 레벨 과 e아셀러레이터. 그래서 연설은 무엇입니까 – PHP의 빠른 작업을 기억합시다. 당사는 요청을 제출합니다. 웹 서버-미국은 우리가 제출하는 매개 변수를 수락한 다음 그가 컴파일하는 PHP 스크립트에 제출하고 결과를 HTML 버전으로 스폰합니다.. 이것은 꽤 일반적인 용어입니다.. 주문을 건너 뛰기 위해 여기에 우리의 아이디어는 무엇입니까?, 우리가 직접 이미 컴파일 된 출력을 페인트로 큰 블록 또는 하지 큰 블록을 통해 이동하려면. 장점은 분명하다 – 실행 시간 단축, 로드 및 리소스 소비 감소. 일반적으로 뜨거운 물을 발견하지 도 얼마나 복잡한 알고 뭔가아니다. 이 목적을 위해 많은 클래스가 있습니다. PhpCache_Lite 훌륭한 기능을 가지고 있지만 미래에 나는 오히려 더 간소화 된 구조와 내 자신의 캐싱 요구 사항으로 내 자신의 글을 쓸 것이라고 생각합니다.. 이제 우리는 원주민 버전을 살펴 보겠습니다. 출력 제어 기능. 그래서 뭔가를 캐시하자 –

//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();

위의 코드는 간단하지만 무슨 일이 있었는지 설명 해 봅시다.. 먼저 코드에서 캐싱을 시작하는 부분을 선언합니다.. 그런 다음 표준 방식으로 코드에서 출력을 생성합니다.. 생성된 출력은 나중에 파일을 통해 사용할 수 있는 변수에 조인됩니다.. 마지막으로 캐싱을 지우고 사용하지 않도록 설정합니다.. 매우 사소한 작업, 우리가 캐시 지오 스캐닝 코드의 거 대 한 블록을 통해 간다 말 하는 경우 그래서 우리는 잠시 동안 또는 단일 세션에 대 한 캐싱 하 여 CPU 시간을 많이 절약할 수 있습니다.. 이제 캐시를 공개할지 아니면 다른 사용자가 사용할 수 있는지에 대한 모든 것이 있습니다..

제만타에 의해 강화