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

30 янв. 2012 г.

Повышение безопасности PHP с помощью директивы disable_functions и при этом сохранение работоспособности Wordpress

У PHP есть замечательная директива конфигурационного файла -  disable_functions, которая позволяет запретить выполнение определенных (в т. ч. и потенциально опасных) функций.

Для использования такой полезной функции открываем php.ini (по дефолту) командой:

nano /etc/php.ini

Далее изменяем строчку или добавляем, если нет:

disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source

Во многих источниках рекомендуют еще отключать функцию curl_exec, но если сделать так, то Wordpress не будет корректно работать.

5 янв. 2012 г.

Установка apache php mysql на centos 5.7

В принципе, всё просто, но если давно не делал - то туговато вспоминается как заставить апач контачить с пхп :)

В общем, устанавливаем необходимые пакеты командой:

yum install httpd httpd-devel php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml mysql-server
Далее запускаем апач и мускуль и добавляем их в автозагрузку:

/etc/init.d/httpd start
/etc/init.d/mysqld start
chkconfig mysqld on
chkconfig httpd on


Затем правим конфиг апача:

nano /etc/httpd/conf/httpd.conf

Находим строчку, раскомментируем, и вписываем туда своё доманное имя:

#ServerName http://www.example.com:80

Перезагружаем апач, чтобы изменения вступили в силу:

/etc/init.d/httpd reload

Далее для теста создаем файлик в дефолтном виртуалхосте:

nano /var/www/html/phpinfo.php

В файлик записываем:

<?php phpinfo(); ?>

Сохраняем и проверяем: http://ip.address/phpinfo.php

Если видим страничку с информацией о пхп - всё получилось.

Можно еще установить пароль на пользователя root в mysql:

/usr/bin/mysqladmin -u root password 'passwd'

9 сент. 2011 г.

Установка веб-сервера Apache на Linux Gentoo с использованием разных версий php на разных виртуалхостах

Я не проггер, потому не могу сказать, какие там отличия у php 5.2 и php 5.3, но они есть и иногда возникает необходимость девелопить под ту или другую версии. Сейчас я поведаю вам, как это реализовать на одной машине с Gentoo Linux.

Для начала устанавливаем апач и оба пхп. Там надо немного поколдовать с  USE - у меня уже не сохранился лог моих мучений) но у вас всё получится - я уверен: оно, как правило, пишет чего ему не хватает и остается только подключить это.

Для того чтобы подключить два mod_php к разным apache на разных IP нужно две разных конфигурации для apache (да и два разных запущенных apache). В Gentoo, к счастью, это делается очень просто. Скрипт запущенный из /etc/init.d/ будет искать себе начальную конфигурацию в /etc/conf.d/ согласно своему префиксу: скрипт /etc/init.d/apache2 получит конфигурацию из /etc/conf.d/apache2, /etc/init.d/apache2.php52 из /etc/conf.d/apache2.php52, /etc/init.d/apache2.php53 из /etc/conf.d/apache2.php53. Таким образом просто делая линки на оригинальный скрипт из /etc/init.d мы можем передавать разные параметры программе. В нашем случае это будут разные Define директивы апачу (через флаг -D). Это позволит использовать один конфигурационный файл разделив нужные нам опции директивами IfDefine.

Разделять директивами следует те ресурсы, которые не могут совместно использоваться разными процессами apache, например лог-файлы, pid-файлы. Или разную функциональность, например разные версии mod_php или разные сертификаты SSL.

Настройка всего этого хозяйства.

Для начала создаем себе 2-й IP адрес:

ifconfig eth0:0 10.10.7.249

Для того чтобы меньше менять в конфигурации примем стандартные определения - для того чтобы грузится с PHP 5.2 апачу нужно передать -D PHP52, а для PHP 5.3 соотвественно -D PHP53. Добавим к этим двум еще и определение -D TWO_PHP, что позволит нам иметь три разных конфигурации:

  • если неопределено TWO_PHP (что есть по-умолчанию), то будем иметь апач настроенный по-умолчанию (удобно для тестирования и отладки глюков других конфигураций)

  • если определено TWO_PHP & PHP52 - получаем апач с PHP 5.2

  • если определено TWO_PHP & PHP53 - получаем апач с PHP 5.3

Соответственно делаем два линка на стартовый скрипт:

ln -s apache2 /etc/init.d/apache2.php52
ln -s apache2 /etc/init.d/apache2.php53


Копируем и изменяем настройки в /etc/conf.d:

cp /etc/conf.d/apache2{,.php52}
cp /etc/conf.d/apache2{,.php53}


в apache2.php52:


APACHE2_OPTS="-D PHP52 -D TWO_PHP ..."

в apache2.php53:

APACHE2_OPTS="-D PHP53 -D TWO_PHP ..."

Также в этих двух файлах меняем директорию PIDFILE.

httpd.conf от стандартного отличается следующим:


<IfDefine !TWO_PHP>
   Listen 80

</IfDefine>
<IfDefine TWO_PHP>
   <IfDefine PHP52>
     Listen 10.10.7.7:80
   </IfDefine>
   <IfDefine PHP53>
     Listen 10.10.7.249:80
   </IfDefine>
</IfDefine>


Include /etc/apache2/vhosts.d/*.conf

Понятно, что в listen указываем свои IP, а Include нужен для поддержки виртуал хостов.

vhosts.confбудет таким:

<VirtualHost site1.example.int> 
   ServerName site1.example.int
   DocumentRoot "/var/www/php5.2/"
   <Directory "/var/www/php5.2">
     Options Indexes FollowSymLinks
     DirectoryIndex index.php
     AllowOverride All
     Order allow,deny
     Allow from all
   </Directory>
</VirtualHost>

<VirtualHost site2.example.int>
   ServerName site2.example.int
   DocumentRoot "/var/www/php5.3/"
   <Directory "/var/www/php5.3"> 
     Options Indexes FollowSymLinks
     AllowOverride All
     DirectoryIndex index.php
     Order allow,deny
     Allow from all
   </Directory>
</VirtualHost>

Также надо подправить файлик /etc/httpd/modules.d/70_mod_php5.conf:

IfDefine PHP5> # Load the module first
<IfModule !mod_php5.c>
   LoadModule php5_module modules/libphp5.so
</IfModule>

# Set it to handle the files
<IfModule mod_mime.c>
   AddHandler application/x-httpd-php .php .php5 .phtml
   AddHandler application/x-httpd-php-source .phps
</IfModule>
   DirectoryIndex index.php index.phtml
</IfDefine>

<IfDefine TWO_PHP>
   <IfDefine PHP52>
     LoadModule php5_module /usr/lib/php5.2/apache2/libphp5.so
   </IfDefine>
   <IfDefine PHP53>
     LoadModule php5_module /usr/lib/php5.3/apache2/libphp5.so
   </IfDefine>
<IfModule mod_mime.c>
   AddHandler application/x-httpd-php .php .php5 .phtml
   AddHandler application/x-httpd-php-source .phps
</IfModule>
</IfDefine>

Также, если не настроен ДНС у вас, то не забываем вписать в /etc/hosts наши домены:

10.10.7.7      site1.example.int
10.10.7.249    site2.example.int


Вроде бы всё... Запускаем:

/etc/init.d/apache2.php52 start

Проверяем 1й IP (пофиг проверяем, даже если ругается апач что не стартует - у меня ругался, но работал :) ).
 Затем удаляем PID файл апача:

rm /var/run/apache2

Магия запуска двух апачей с разными PID файлами мне пока еще не доступна, потому так по-китайски делаем :)

/etc/init.d/apache2.php53 start

Всё должно работать теперь.

Кстати, не забудьте в директории /var/www/php5.3 и /var/www/php5.2 для проверки кинуть файлик index.php с содержимым:

<? php
phpinfo();
/> 

Всем спасибо за внимание :) 

30 авг. 2011 г.

Устранение ошибок типа "Strict Standards:..." в связке xampp+joomla 1.7

Сегодня столкнулся с такой вот проблемкой.
Решил я, значит, поковыряться в Джумле, потренироваться создавать сайтики. Чтобы сильно не морочить себе голову, скачал набор XAMPP (инсталлер под винду), где уже есть APAche, PHP, MySQL плюс куча телз для них и всё это настроено так, чтобы друг с другом работало "из коробки". Залил в апач джумлу, зашел в джумлу в браузере, прошел е веб-инсталляцию и тут - хопа, на пол-страницы ошибки типа  "Strict Standards:..." и еще куча матюков :) Что делать?...
Вскоре решение было найдено: необходимо было зайти в директорию php, там есть файлик php.ini и в нем найти и изменить параметр error_reporting  на:

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

и  display_errors  на:

display_errors = Off

Далее перезапускаем апач - и всё, всё работает без проблем и матюков :)