Расширения SSI для Apache 2

Материал из 1GbWiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 08:53, 17 февраля 2009 (править)
Dmach (Обсуждение | вклад)
м (Правки 217.66.30.165 (обсуждение) откачены к версии Fallenlord16)
← К предыдущему изменению
Текущая версия (12:34, 11 ноября 2013) (править) (отменить)
Renton (Обсуждение | вклад)
(Объяснение)
 
(16 промежуточных версий не показаны.)
Строка 1: Строка 1:
-<?+== PHP работает в режиме модуля к Apache ==
-session_start();+===Коротко о главном===
 +Для того, чтобы в файлах, например, .html у вас заработал PHP, нужно сделать так:
-require 'cfg.php';+В личном кабинете // "полный список функций" // "управление сайтами и серверами"
-require 'lib/function.php';+# убрать html из графы "Расширения для SSI" (если забудете - это произойдет автоматически)
-require 'lib/query.php';+# добавить html в графу "Расширения для PHP"
 +# нажать "сохранить" и подождать 1 час
-if(isset($_REQUEST['act']) && $_REQUEST['act']=="exit"){+[[Изображение:Php_html_handler.jpg|600px|thumb|center|Страница "Управление сайтами и серверами" личном кабинете]]<br clear="both" />
-$_SESSION['acc'] = "1";+Подключившись по FTP
-$_SESSION['pwd'] = "1";+* дописать в .htaccess следующее:
-$_SESSION['menu']="1";+ RemoveHandler .html
-}+ AddType application/x-httpd-php .html
-if(isset($_REQUEST['account']) && antiinjection($_REQUEST['account']) && isset($_REQUEST['password']) && antiinjection($_REQUEST['password']) && $_REQUEST['page']!="register"){+Если вы хотите, чтобы в <code>.html</code> файлах также обрабатывались инструкции SSI, то ваш <code>.htaccess</code> будет выглядить так:
 + RemoveHandler .html
 + AddType application/x-httpd-php .html
 + AddOutputFilter INCLUDES .html
- if (strlen($_REQUEST['account'])>2 || strlen($_REQUEST['account'])<20) {+Помните: эта инструкция для Apache!
- if (strlen($_REQUEST['password'])>2 || strlen($_REQUEST['password'])<20) {+
 +Примечание: на Windows сервере достаточно только дописать блок в .htaccess.
-if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){+===Объяснение===
 +Веб-сервер Apache2 имеет неудачную архитектуру обработки RemoveHandler / AddType.
 +Традиционно для работы PHP в .html файлах (пример) используют следующую конструкцию в .htaccess:
 + RemoveHandler .html
 + AddType application/x-httpd-php .html
-$provakk = $_REQUEST['account'];+На Apache 1 это работает хорошо, но на Apache 2 все операции AddType выполняются после всех операций RemoveType, список операций общий для глобальной конфигурации сервера и конфигурации через .htaccess. Это приводит к тому, что единожды встреченный в конфигурации AddType сделает невозможным никакой более AddType на этот тип файлов, так как два AddType будут выполнены подряд – это ошибка.
-$provpwd = $_REQUEST['password'];+
-//Auth+На хостинге 1Gb в общей конфигурации уже присутствует AddType на файлы htm html shtm shtml для обработки SSI в этих типах файлов. Это является ожидаемой традиционной конфигурацией для большого числа Веб-мастеров. В результате для того, чтобы задать другой AddType на любой из этих расширений, необходимо предварительно убрать SSI обработчик с этих файлов, что и можно сделать, удалив соответствующее расширение из списка.
- $dbconnect = mssql_connect($mssql_host,$mssql_login,$mssql_pass);+
- mssql_select_db ($dbaut, $dbconnect) or die (mysql_error());+
- $result = mssql_query (sprintf(SELECT_USER_PASS, $provakk));+Изменение вступит в силу в течение 1-2 часов если вы сделаете это вручную, и в течение 24 часов (точнее – ночью), если просто напишите директивы в .htaccess. В последнем случае для ускорения обратитесь, пожалуйста, к службе поддержки.
 +== PHP работает в режиме FastCGI (UNIX) ==
 +В файл .htaccess достаточно добавить:
 + FcgidWrapper /home/virtwww/'''ваш_FTP_логин'''/.fast-php/fast-php .html
 + AddHandler fcgid-script .html
- if(mssql_num_rows($result)>0 ) { 
- $rows=mssql_fetch_assoc($result); +[[Категория:WEB-сервер Apache]]
- extract($rows);+[[Категория:Программирование]]
- +
- $password = '0x' . bin2hex($password);+
- $oldpassword = encrypt($provpwd);+
- +
- if ($password!=$oldpassword) {+
- $error4in = "<span style='color:red'>Пароль неверен.</span><br>";+
- +
- } else { $authok = 1; +
- +
-$_SESSION['acc'] = $provakk;+
-$_SESSION['pwd'] = $oldpassword;+
- +
-$_SESSION['menu'] = "onmenu";+
- +
-}+
-} else {+
- $error4in = "<span style='color:red'>Аккаунт не существует.</span><br>";+
- +
-}+
-//Auth+
-}else{+
- $error4in = "<span style='color:red'>Неправильный код с картинки.</span><br>";+
-}+
-unset($_SESSION['captcha_keystring']);+
- +
-}+
- +
-}+
- +
-}+
- +
- +
-?>+
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+
-<html xmlns="http://www.w3.org/1999/xhtml">+
-<head>+
-<title>+
-<?+
-if($module1==0){+
-echo "(OFFLINE) ";+
-}+
-?>+
-La2Chelny.ru | Система управления аккаунтом</title>+
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" >+
-<meta name="Robots" content="INDEX, FOLLOW">+
-<meta name="revisit-after" content="1 days" />+
-<link href="styles.css" rel="stylesheet" type="text/css" />+
-<script type="text/javascript" src='js/menuFX.js'></script>+
-</head>+
-<body>+
-<center>+
-<table cellspacing='0' cellpadding='0' width="800" class=tableacts>+
-<tr><td class=ml1>&nbsp;</td></tr>+
-<tr><td id=topcat align=right>+
-<table cellspacing='0' cellpadding='0'>+
-<td width="125">+
-<a href=index.php>Главная</a>|&nbsp;&nbsp;<a href=index.php?page=rules>Правила</a></td>+
-<?+
-if($_SESSION['menu']=="onmenu"){+
-?>+
-<td>|&nbsp;&nbsp;<a href=index.php?page=feed>Тех. поддержка</a>|&nbsp;&nbsp;<a href=index.php?page=change>Изменить пароль</a>|&nbsp;&nbsp;<a href=index.php?page=shop>Магазин</a>|&nbsp;&nbsp;</td>+
-<td>+
-<form name=change>+
-<select name=serv onChange=MM_jumpMenu('parent',this,0) class=button>+
-<option selected>-> Статистика</option>+
-<option value="?page=stats&catid=3">- - Состояние замков</option>+
-<option value="?page=stats">- - Топ 100 игроков</option>+
-<option value="?page=stats&catid=5">- - Топ 100 PVP</option>+
-<option value="?page=stats&catid=1">- - Топ кланы</option>+
-<option value="?page=status">- - 7 Signs</option>+
-</select>+
-</form>+
-</td>+
-<td>&nbsp;&nbsp;|&nbsp;&nbsp;</td>+
-<td>+
-<form name=change>+
-<select name=serv onChange=MM_jumpMenu('parent',this,0) class=button>+
-<option selected>-> Изменить</option>+
-<option value="?page=name">- - Ник персонажа</option>+
-<option value="?page=gend">- - Пол персонажа</option>+
-<option value="?page=mail">- - E-mail аккаунта</option>+
-<option value="?page=acca">- - Аккаунт</option>+
-</select>+
-</form>+
-</td><td>+
-&nbsp;&nbsp;|&nbsp;&nbsp;<a href=index.php?act=exit>Выход</a></td>+
-<?+
-}+
-?>+
-</table>+
-</td></tr>+
-<tr>+
-<td align=left><br>+
-<div class=marginal>+
-<?+
- +
-if($module1==1){+
- +
-if(isset($error4in)){ echo $error4in; }+
- +
- +
- +
-if($_SESSION['acc']){+
-if(antiinjection($_SESSION['acc']) && antiinjection($_SESSION['pwd'])){+
- +
-$provakk = $_SESSION['acc'];+
-$provpwd = $_SESSION['pwd'];+
- +
-//Auth AUTO+
- $dbconnect = mssql_connect($mssql_host,$mssql_login,$mssql_pass);+
- mssql_select_db ($dbaut, $dbconnect) or die (mysql_error());+
- +
- $result = mssql_query (sprintf(SELECT_USER_PASS, $provakk));+
- +
- +
- if(mssql_num_rows($result)>0 ) {+
- +
- $rows=mssql_fetch_assoc($result); +
- extract($rows);+
- +
- $password = '0x' . bin2hex($password);+
- $oldpassword = $provpwd;+
- +
- if ($password==$oldpassword){ $authok = 1; }+
-}+
-//Auth AUTO+
-}+
-}+
- +
-?>+
- +
- +
- +
-<?php +
-if($authok<1 && $_REQUEST['page']!="lost" && $_REQUEST['page']!="register" && $_REQUEST['page']!="rules" && $_REQUEST['page']!="valid"){+
- +
-if($module1==1){+
-echo "+
-<div align=center>+
-<fieldset>+
- <legend><b>Авторизация:</b></legend>+
- <form action='index.php?page=default' method='post'>+
-<b>Аккаунт</b><br>+
-<input type=text maxlength=20 name=account><br><br>+
-<b>Пароль</b><br>+
-<input type=password maxlength=20 name=password><br><br>+
-<img src='captha/index.php?<?php echo session_name()?>=<?php echo session_id()?>'><br><br>+
-<input type=text name=keystring value=''>+
-<br><br>+
- <input type=hidden name=cdata value='bkt'>+
- <input type=submit name=submit value='Войти'>+
- </form><br>+
-<a href=?page=lost>Восстановление пароля</a> | <a href=?page=register>Регистрация</a>+
-</fieldset>+
-</div>+
-";+
- +
-}else{+
-echo "+
-<fieldset>+
- <legend><b>UCP OFFLINE:</b></legend>+
-<center>Система управления аккаунтом временно недоступна.<br>Приносим свои извинения за неудобства.</center>+
-</fieldset>+
-";+
-}+
- +
-}elseif($_REQUEST['page']=="lost"){+
- +
-$securitycheck = 1;+
-require 'lib/lost.php';+
- +
-}elseif($_REQUEST['page']=="valid"){+
- +
-require 'lib/valid.php';+
- +
-}elseif($_REQUEST['page']=="register"){+
- +
-$securitycheck = 1;+
-require 'lib/register.php';+
- +
-}elseif($_REQUEST['page']=="rules"){+
- +
-require 'lib/rules.php';+
- +
-}elseif($_REQUEST['act']!="exit"){+
- +
-mssql_select_db("lin2world");+
-$result=mssql_query("SELECT * FROM builder_account WHERE account_name='$provakk'");+
- +
- if(mssql_num_rows($result)>0 ) {+
- +
-$bnum=mssql_result($result, 0, 'default_builder'); +
- +
-if($bnum==$buildnum){+
-$checkbok = "1";+
-}+
- +
-}+
- +
-$page = $_GET['page'];+
-if(!$page) {+
- $page = 'default';+
-} elseif($page=='change') {+
- $page = 'change';+
-} elseif($page=='shop') {+
- $page = 'shop';+
-} elseif($page=='name') {+
- $page = 'nameactions';+
-} elseif($page=='gend') {+
- $page = 'gendactions';+
-} elseif($page=='mail') {+
- $page = 'mailactions';+
-} elseif($page=='feed') {+
- $page = 'support';+
-} elseif($page=='adcp') {+
- $page = 'adcp';+
-} elseif($page=='acca') {+
- $page = 'accactions';+
-} elseif($page=='charedit') {+
- $page = 'charedit';+
-} elseif($page=='event') {+
- $page = 'event1';+
-} elseif($page=='stats') {+
- $page = 'statistic';+
-} elseif($page=='status') {+
- $page = 'status';+
-} else {+
- $page = 'default';+
-}+
-$securitycheck = 1;+
-require 'lib/' . $page . '.php';+
-}else{+
- +
-if($module1==1){+
-echo "+
-<div align=center>+
-<fieldset>+
- <legend><b>Авторизация:</b></legend>+
- <form action='index.php?page=default' method='post'>+
-<b>Аккаунт</b><br>+
-<input type=text maxlength=20 name=account><br><br>+
-<b>Пароль</b><br>+
-<input type=password maxlength=20 name=password><br><br>+
-<img src='captha/index.php?<?php echo session_name()?>=<?php echo session_id()?>'><br><br>+
-<input type=text name=keystring value=''>+
-<br><br>+
- <input type=hidden name=cdata value='bkt'>+
- <input type=submit name=submit value='Войти'>+
- </form><br>+
-<a href=?page=lost>Восстановление пароля</a> | <a href=?page=register>Регистрация</a>+
-</fieldset>+
-</div>+
-";+
-}else{+
-echo "+
-<fieldset>+
- <legend><b>UCP OFFLINE:</b></legend>+
-<center>Система управления аккаунтом временно недоступна.<br>Приносим свои извинения за неудобства.</center>+
-</fieldset>+
-";+
-}+
- +
-}+
-}else{+
-echo "<fieldset>+
- <legend><b>UCP OFFLINE:</b></legend>+
-<center>Система управления аккаунтом временно недоступна.<br>Приносим свои извинения за неудобства.</center>+
-</fieldset>";+
-}+
-?></div><br>+
-</td></tr><tr><td class=copyright align=center>Lineage2 Личный Кабинет <b> © 2008-2009 <a href="http://www.La2chelny.ru">La2Chelny.ru</a></b></table>+
-</center>+

Текущая версия

Содержание

[править] PHP работает в режиме модуля к Apache

[править] Коротко о главном

Для того, чтобы в файлах, например, .html у вас заработал PHP, нужно сделать так:

В личном кабинете // "полный список функций" // "управление сайтами и серверами"

  1. убрать html из графы "Расширения для SSI" (если забудете - это произойдет автоматически)
  2. добавить html в графу "Расширения для PHP"
  3. нажать "сохранить" и подождать 1 час
Страница "Управление сайтами и серверами" личном кабинете
Страница "Управление сайтами и серверами" личном кабинете

Подключившись по FTP

  • дописать в .htaccess следующее:
RemoveHandler .html
AddType application/x-httpd-php .html

Если вы хотите, чтобы в .html файлах также обрабатывались инструкции SSI, то ваш .htaccess будет выглядить так:

RemoveHandler .html
AddType application/x-httpd-php .html
AddOutputFilter INCLUDES .html

Помните: эта инструкция для Apache!

Примечание: на Windows сервере достаточно только дописать блок в .htaccess.

[править] Объяснение

Веб-сервер Apache2 имеет неудачную архитектуру обработки RemoveHandler / AddType. Традиционно для работы PHP в .html файлах (пример) используют следующую конструкцию в .htaccess:

RemoveHandler .html
AddType application/x-httpd-php .html

На Apache 1 это работает хорошо, но на Apache 2 все операции AddType выполняются после всех операций RemoveType, список операций общий для глобальной конфигурации сервера и конфигурации через .htaccess. Это приводит к тому, что единожды встреченный в конфигурации AddType сделает невозможным никакой более AddType на этот тип файлов, так как два AddType будут выполнены подряд – это ошибка.

На хостинге 1Gb в общей конфигурации уже присутствует AddType на файлы htm html shtm shtml для обработки SSI в этих типах файлов. Это является ожидаемой традиционной конфигурацией для большого числа Веб-мастеров. В результате для того, чтобы задать другой AddType на любой из этих расширений, необходимо предварительно убрать SSI обработчик с этих файлов, что и можно сделать, удалив соответствующее расширение из списка.

Изменение вступит в силу в течение 1-2 часов если вы сделаете это вручную, и в течение 24 часов (точнее – ночью), если просто напишите директивы в .htaccess. В последнем случае для ускорения обратитесь, пожалуйста, к службе поддержки.

[править] PHP работает в режиме FastCGI (UNIX)

В файл .htaccess достаточно добавить:

FcgidWrapper /home/virtwww/ваш_FTP_логин/.fast-php/fast-php .html
AddHandler fcgid-script .html