PDA

Просмотр полной версии : PHP как CGI + PHP как модуль Apache ИЛИ PHP как FastCGI + PHP как модуль Apache



Nikola
12.04.2009, 18:42
Хочется сделать так: Для своих сайтов использовать PHP как модуль Apache, а для сайтов других пользователей использовать PHP как CGI или как FastCGI.

Так вот, как корректно использовать такую связку?
Какие могут быть ньюансы?

Спасибо.

Igor
12.04.2009, 19:05
никаких нюансов, права на использование различных режимов пхп настраиваются в свойствах пользователя. своему пользователю можете дать все права, а клиентам только на как CGI и FastCGI

Nikola
12.04.2009, 19:17
а как изменить для уже существующих пользователей?
режим php, вроде, не изменится...

Jokerz
12.04.2009, 19:35
а как изменить для уже существующих пользователей?
режим php, вроде, не изменится...

это необходимо изменить именно для домена. При создании клеинта вы даете ему разрешения использовать ту или иную функцию. И она используеться. а вот уже когда она выбрана необходимо изменить для домена.
Под рутом войдите в
Домены
WWW домены
выбрать для какого домена нужно сменить что, открывем его для изменения, и там есть строка: PHP:
вот там выбераем нужный режим, затем жмем ок, идет перезагрузка веб сервера, и после чего все скрипты домена юзают пхп как модуль cgi к примеру. или что вы поставите. (для работы того или иного пхп должен поддерживать эти функции)

Nikola
12.04.2009, 19:40
это необходимо изменить именно для домена. При создании клеинта вы даете ему разрешения использовать ту или иную функцию. И она используеться. а вот уже когда она выбрана необходимо изменить для домена.
Под рутом войдите в
Домены
WWW домены
выбрать для какого домена нужно сменить что, открывем его для изменения, и там есть строка: PHP:
вот там выбераем нужный режим, затем жмем ок, идет перезагрузка веб сервера, и после чего все скрипты домена юзают пхп как модуль cgi к примеру. или что вы поставите. (для работы того или иного пхп должен поддерживать эти функции)

Это всё понятно.
Но доменов не мало и, как-то, неохото стоко лопатить руками...
Есть ли другие решения?
Панель: ISPManager Lite

morozov
12.04.2009, 20:53
Только надо будет еще затретить подключение модуля через htaccess. А то напишет там себе AddType application/x-httpd-php .php и будет ему глубоко все равно что вы в своей панельке поставили только режим как CGI/FastCGI.

Nikola
13.04.2009, 00:47
Только надо будет еще затретить подключение модуля через htaccess. А то напишет там себе AddType application/x-httpd-php .php и будет ему глубоко все равно что вы в своей панельке поставили только режим как CGI/FastCGI.

Как это запретить?

ls
13.04.2009, 01:10
По-умолчанию настройка apache инсталлятором ISPmanager не дает менять все опции подряд


# cat /usr/local/etc/apache22/Includes/secure.conf
...
<Directory /home/*>
AllowOverride FileInfo AuthConfig Limit Indexes Options
...

Nikola
13.04.2009, 05:35
а есть какие-нибудь идеи, как изменить режим работы php для существующих доменов? (кроме как вручную)...
может скрипт какой написать...ток скажите что и где нужно менять/создавать, вообщем логику скрипта...я попробую написать.

Sergik
13.04.2009, 06:53
а есть какие-нибудь идеи, как изменить режим работы php для существующих доменов? (кроме как вручную)...
может скрипт какой написать...ток скажите что и где нужно менять/создавать, вообщем логику скрипта...я попробую написать.
Скриптом через API получить список WWW-доменов, и последовательно выполнить для них изменение режима php с помощью опять же API.

Nikola
13.04.2009, 21:14
Вообщем, вот написал скрипт на PHP.
Возможны ли какие-нибудь ньюансы?


<?php

set_time_limit(0);

define('IP', '0.0.0.0'); // IP сервера
define('root', 'root'); // Рутовый Логин
define('password', 'PASSWORD'); // Пароль

/*
Режим работы PHP:

phpmod - PHP как модуль Apache
phpcgi - PHP как CGI
phpfcgi - PHP как FastCGI
*/

define('PHP', 'phpfcgi');

$str = file_get_contents("https://".IP."/manager/ispmgr?authinfo=".root.":".password."&out=xml&func=wwwdomain");

preg_match_all("|<name>([^>]+)<\/name>|isU", $str, $res);
unset($res[0]);

foreach($res[1] as $key => $value) {

$str = file_get_contents("https://".IP."/manager/ispmgr?authinfo=".root.":".password."&out=xml&func=wwwdomain.edit&elid=".trim($value));
$str = str_replace('</doc>', '', substr($str, 44));
preg_match_all("|<([A-Za-z0-9]+)>([^>]+)<\/[A-Za-z0-9]+>|isU", $str, $res);
unset($res[0]);

$array = array();
for($i = 0; $i < count($res[1]); $i++) $array[$res[1][$i]] = $res[2][$i];

if(!empty($array['cgi']) && $array['cgi'] == 'on') $cgi = 'on'; else $cgi = '';
if(!empty($array['index'])) $index = trim($array['index']); else $index = '';
if(!empty($array['charset'])) $charset = trim($array['charset']); else $charset = '';
$str = file_get_contents("https://".IP."/manager/ispmgr?authinfo=".root.":".password."&out=text&func=wwwdomain.edit&elid=".UrlEnCode(trim($array['elid']))."&sok=yes&domain=".UrlEnCode(trim($array['domain']))."&alias=".UrlEnCode(trim($array['alias']))."&ip=".UrlEnCode(trim($array['ip']))."&admin=".UrlEnCode(trim($array['admin']))."&autosubdomain=".UrlEnCode(trim($array['autosubdomain']))."&cgi=".$cgi."&index=".$index."&charset=".$charset."&php=".PHP);

echo trim($array['elid']).' Status: '.$str.'\r\n';

}

?>

Nikola
15.04.2009, 02:31
Кстати, где-то читал, что, если в www-домене указать автоподдомены, то PHP там работать не будет (относится к PHP как CGI/FastCGI).
Решение проблемы: Надо указывать в конфиге НЕ:


<Directory /home/пользователь/data/www/домен>
Options +ExecCGI
.....
</Directory>

а вот что:


<Directory /home/пользователь/data/www/*.домен>
Options +ExecCGI
.....
</Directory>

Вопрос: Исправлено ли это в ISPManager?

tuupic
17.04.2009, 10:37
если в www-домене указать автоподдомены
конкретно, автоподдомены в отдельной директории. при автоподдоменах в подддиректории проблемы нету.


вопрос: исправлено ли это в ispmanager?
пока нет.