Показаны сообщения с ярлыком PHP. Показать все сообщения
Показаны сообщения с ярлыком PHP. Показать все сообщения

вторник, 3 апреля 2012 г.

Как в Reg.Panel отключить рекламу хостинга?

vim ./skins/default/css/login_style.css

Блок:
.banner {
position:relative; width:100%; margin-bottom:30px; clear:both;
}

Заменяем на:
.banner {
visibility: hidden; position:relative; width:100%; margin-bottom:30px; clear:both;
}

После этого чудо реклама пропадет.

Тоже самое делаем с блоком "#promo".

А также фиизчески уничтожить блоки disable_vps_menu/disable_hosting_menu в файле skins/default/main_menu.html

воскресенье, 18 марта 2012 г.

Релиз PHP 5.4 - что ждет программистов и администраторов?

Бегло пробежавшись по списку изменений PHP 5.4, сразу приходишь к понимаю, что в нем закончили то, что начали в PHP 5.4 - удаление самых сомнительных и небезопасных функций языка.

Итак: все связанное с safe_mode удалено, удален механизм register_globals и все с ней связанное, удаление настроек magic quotes. Кроме этого - ожидаемое увеличение скорости, а также очень вкусная возможность - встроенный в CLI версию PHP HTTP сервер, который можно использовать для отладки приложений. Кроме этого, имеется улучшение PHP FPM - теперь есть возможность указывать число процессов, которые может порождать PHP.

Источник: http://www.opennet.ru/opennews/art.shtml?num=33241

пятница, 16 марта 2012 г.

md5 в PHP

Вполне себе стандартный :) Выдача совпадает с выдачей стандартной утилиты.

md5 domains.txt
MD5 (domains.txt) = c97d110cfd4d53633d5dd1cd881b7e1d

php -r "echo md5_file('domains.txt');"
c97d110cfd4d53633d5dd1cd881b7e1d

среда, 14 марта 2012 г.

Пример многопроцессного приложения на PHP с использованием pcntl_fork

Код:
# based on: http://php.net/manual/ru/function.pcntl-fork.php
$worker_processes = 5;
$child_processes = array();

for ($i = 0; $i < $worker_processes; $i++) {

    $child_pid = pcntl_fork();
    
    if ($child_pid == -1) {
        die ("Can't fork process");
    } elseif ($child_pid) {
        print "Parent, created child: $child_pid\n";
        $child_processes[] = $child_pid;     
    
        # В данный момент все процессы отфоркнуты, можно начать ожидание
        if ($i == ( $worker_processes -1 ) ) {
            foreach ($child_processes as $process_pid) {
                # Ждем завершение заданного дочернего процесса
                $status = 0;
                pcntl_waitpid($process_pid, &$status); 
            }
        }
    } else {
        print "Child $i\n";
        sleep(10 + $i);
    
        # Если здесь не будет exit, то foreach заработает и здесь
        exit(0);
    }

}


Алгоритм - мастер-процесс запускает 5 дочерних процессов и ждет окончание их всех, после этого он сам завершает свою работу.

Использование proctitle в PHP для смены имени процесса

Устанавливаем:
pecl install proctitle channel://pecl.php.net/proctitle-0.1.2
echo "extension=proctitle.so" > /etc/php5/conf.d/proctitle.ini

Пример кода, использующего смену имени процесса:
setproctitle("my_super_process");
while(true) { sleep(10); }

Запускаем:
php -f test_proctitle.php

Убеждаемся, что используется заданное нами имя процесса:
ps aux|grep my_
root 26611 0.0 0.0 292120 12044 pts/8 S+ 18:32 0:00 my_super_process
root 26645 0.0 0.0 112316 876 pts/9 S+ 18:33 0:00 grep my_

суббота, 23 июля 2011 г.

Две наиболее нужных команды при разработке на PHP, позволяющие сэкономить море времени

Вот эти две команды, заставят PHP выдавать все ошибки и предупреждения, которые у него имеются:
error_reporting(E_ALL^E_STRICT);
ini_set('display_errors','On');

Изменение итерируемой структуры из цикла foreach в PHP

Стандартно итерация производится так:
foreach ( $invitems as $item ) {

И если попробовать сделать что-то в стиле: $item['soma_key'] = 'some_val', то как ожидается это не сработает (в отличие от Perl, там такое поведение стандартно).

Чтобы такой механизм заработал, нужно немного скорректировать вид цикла:
foreach ( $invitems as &$item ) {

При этом, значения не будут копироваться, а будут передаваться по ссылке.

Очень простой профайлинг кода на PHP - PHP Quick Profiler

Наткнулся на сий замечательный софт - PHP Quick Profiler: http://particletree.com/features/php-quick-profiler/

Все, что требуется для профайлинга конкретного файла - это добавить в начале страницы небольшой include и сразу после этого можно будет наблюдать развернутый очень красивый отчет о потребляемых скриптом ресурсах.

среда, 20 июля 2011 г.

Как прервать исполнение кода в Smarty 2?

Очень часто хочется прервать какой-либо процесс внутри Smarty шаблона, но если сделать return, то остановится рендеринг всего шаблона, а не только {php} блока. Единственное решение этой проблемы, которое я нашел - выносить такой код в отдельные файлы и подключать их через {include}. И тогда return в инклуд файле не будет прерывать рендеринг основного шаблона.

суббота, 5 февраля 2011 г.

PHP Warning: PHP Startup: eAccelerator: Unable to initialize module

Вот такая ошибка:
php -m
PHP Warning: PHP Startup: eAccelerator: Unable to initialize module
Module compiled with module API=20060613
PHP compiled with module API=20090626
These options need to match
in Unknown on line 0

Может возникать тогда, когда новому PHP (допустим, 5.3) было подложено бинарное расширение, собранное под старую версию PHP (допустим, 5.2).

Для фикса нужно пересобрать eAccelerator и / или сменить путь в конфиге php.ini.

суббота, 4 декабря 2010 г.

CentOS + PHP 5.1.6 + eAccelerator 0.9.6.1 = не собирается

/usr/src/eaccelerator-0.9.6.1/ea_store.c: In function 'store_property_access_check':
/usr/src/eaccelerator-0.9.6.1/ea_store.c:683: error: 'zend_property_info' has no member named 'ce'

Это баг 0.9.6.1 версии eAccelerator: http://eaccelerator.net/ticket/426

Очевидный фикс: юзаем 0.9.6 версию.

четверг, 2 декабря 2010 г.

Установка ssh2 расширения для PHP на CentOS 5.5 из PECL

Ставим все необходимое для сборки:
yum install -y php-devel libssh2-devel php-pear

Собираем модуль:
pecl install -f ssh2

Подключаем ssh2 расширение к PHP:
echo "extension=ssh2.so" > /etc/php.d/ssh2.ini

Убеждаемся, что все ок:
php -m | grep ssh2
ssh2

Перезапускаем Апача:
/etc/init.d/httpd restart

пятница, 19 ноября 2010 г.

Установка PHP 5.3 на Debian 5 Lenny рядом с системным PHP 5.2.6

apt-get install -y mysql-client libmysqlclient15-dev

Ставим зависимости:
apt-get install -y libtidy-dev curl libcurl4-openssl-dev libcurl3 libcurl3-gnutls zlib1g zlib1g-dev libxslt1-dev libzip-dev libzip1 libxml2 libsnmp-base libsnmp15 libxml2-dev libsnmp-dev libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev zlib1g zlib1g-dev libfreetype6 libfreetype6-dev libbz2-dev libxpm-dev libmcrypt-dev libmcrypt4 sqlite3 bzip2 build-essential libreadline5-dev libedit-dev libc-client2007b libc-client-dev krb5-kdc openssl

Компилируем:
cd /usr/src
wget http://de.php.net/distributions/php-5.3.3.tar.gz
tar -xf php-5.3.3.tar.gz
cd php-5.3.3
./configure -prefix=/opt/php53 -with-mysql=/usr -with-mysqli=/usr/bin/mysql_config -with-tidy=/usr -with-curl=/usr/bin -with-curlwrappers -with-openssl-dir=/usr -with-zlib-dir=/usr -enable-mbstring -with-xpm-dir=/usr -with-pdo-mysql=/usr -with-xsl=/usr -with-ldap -with-xmlrpc -with-iconv-dir=/usr -with-snmp=/usr -enable-exif -enable-calendar -with-bz2=/usr -with-mcrypt=/usr -with-gd -with-jpeg-dir=/usr -with-png-dir=/usr -with-zlib-dir=/usr -with-freetype-dir=/usr -enable-mbstring -enable-zip -with-pear -with-imap -with-kerberos -with-imap-ssl -with-imagick -with-readline -with-libedit
make install

Проверяем работспособность PHP cli:
/opt/php53/bin/php -v
PHP 5.3.3 (cli) (built: Nov 19 2010 17:49:19)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

Проверяем работу PHP cgi/fcgi:
/opt/php53/bin/php-cgi -v
PHP 5.3.3 (cgi-fcgi) (built: Nov 19 2010 17:49:13)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

Источник: http://www.howtoforge.com/install-php-5.3.0-lighttpd-on-debian-lenny-with-imap-mysql-sqlite3-and-imagemagick-support

четверг, 11 ноября 2010 г.

Установка MaxMind php5-geoip на Debian

Ставим:
apt-get install -y

Перезапускаем Апача:
/etc/init.d/apache2 restart

Ради теста проверяем путь к базе данных IP:
php -r 'print geoip_db_filename(GEOIP_COUNTRY_EDITION); echo "\n";'
/usr/share/GeoIP/GeoIP.dat

Ради теста получаем страну, где расположен сайт компании FastVPS (ага, все верно, Германия):
php -r 'print geoip_country_code_by_name("85.10.205.196"); echo "\n";'
DE


Вот мануал по обновлению MaxMind базы: http://www.electrictoolbox.com/update-geoip-dat-debian-5/

Источник: http://pecl.php.net/package/geoip