• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.
Portal Chamar Táxi

Problema do open_basedir em servidores com Plesk

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Solução a um problema em domínios hospedados em servidores com o painel de controle Plesk, relativo à diretiva de PHP open_basedir.




Por Miguel Angel Alvarez - Tradução de JML


Estamos utilizando um novo servidor que tem suporte para PHP 5. (Até o momento estávamos trabalhando com PHP 4, porém já era hora de mudar). Como sempre, migrar a um novo servidor traz seus problemas, porém felizmente com a ajuda do suporte técnico e com a documentação que se encontra na Internet, se vai arrumando.

Neste artigo, quero explicar um erro que encontramos na hora de configurar o domínio, que logo vi que é comum a muitas pessoas que têm o painel de controle Plesk como gerenciador dos recursos do servidor. Sendo assim, tentarei expressar o problema e a solução que encontramos.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
O problema com open_basedir

Plesk tem uma configuração própria da diretiva de PHP open_basedir (que se define no php.ini). Pela configuração de Plesk de open_basedir, só se podem incluir arquivos que venham do diretório de publicação do domínio, ou seja o diretório httpdocs do domínio.

O estado de open_basedir configurado por Plesk de maneira pré-determinada é o seguinte:

open_basedir = "/var/www/vhosts/seudominio.com/httpdocs:/tmp"

Por essa diretiva não se podem incluir arquivos (com a função include ou require de PHP) que estejam em outras pastas ou subpastas que venham das marcadas no open_basedir.

Nós temos algumas pastas que contém códigos fora do diretório de publicação e não se estavam podendo incluir. Por isso saia um erro PHP como este:

open_basedir restriction in effect. File(./../diretorio-fora-httpdocs/arquivo.php) is not within the allowed path(s): (/var/www/vhosts/meudominio.com/httpdocs:/tmp)

Logo, vi que usuários que tenham códigos incluídos em frameworks para PHP como PEAR também têm este problema.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Solução ao problema: configurar Plesk

A primeira aproximação à solução foi, como se pensará, modificar o arquivo PHP.ini. De fato, é o que pensava que o consertaria. Para mudar a diretiva open_basedir do php.ini. Porém, as mudanças, não surtiram efeito. Também provém mudando a diretiva include_path, porém tampouco consertou nada.

Uma vez consultado com o serviço técnico de nosso provedor, nos aconselharam mover todas as pastas ao diretório de publicação, porém não é possível, por diversas razões. Porém, nos deram a pista que o problema estava relacionado com Plesk.

Finalmente, buscando por Pear e Pesk em Google apareceu um artigo muito interessante em uma página em inglês: HOWTO: Enable PEAR/Set open_basedir

Nesse artigo está explicado passo a passo o que se tem que fazer, que vou resumir em português, para os leitores de criarweb.com que o necessitem.

Existe um arquivo que Plesk utiliza para configurar cada domínio, de modo que não convém tocar o php.ini, porque isso afetaria a todo o servidor (e nem sempre, porque algumas diretivas, como open_basedir, logo as sobrescreve Plesk em outros arquivos à parte e por muito que se toquem no php.ini não terá nenhum efeito).

Há um site onde se devem configurar as mudanças do php.ini, específicas para cada domínio alojado. No meu caso, esse arquivo de configuração não estava criado, por isso tive que criá-lo. O arquivo de configuração específico para cada domínio está no diretório

/var/www/vhosts/meudominio.com/conf

E o arquivo que há que criar aí, ou modificar se é que já existe é:

vhost.conf

Para que funcione, o conteúdo do arquivo que coloquei é o seguinte:

<Directory "/var/www/vhosts/meudominio.com/httpdocs">
php_admin_value open_basedir "/var/www/vhosts/meudominio.com/httpdocs:/tmp:/var/www/vhosts/meudominio.com/directorio_includes
php_admin_value display_errors On
</Directory>

Trata-se simplesmente de definir o open_basedir marcando todos os diretórios onde há arquivos que se pretendem incluir através de PHP. (Com incluir um diretório lhe permite incluir arquivos de todos os subdiretórios que tiver dentro)

No código anterior você pode ver que modificamos outro parâmetro do PHP:

display_errors On (Isto é para poder ver os erros diretamente na página, ao invés do log de erros, que é mais cômodo pelo menos durante as provas e até migrar definitivamente o domínio)

Agora também já sabemos onde mexer para configurar diretivas PHP do php.ini específicas para um domínio alojado. Poderemos definir todas as diretivas que se necessitem. Por exemplo, outra coisa que se pode necessitar mudar é anular o safe_mode para um domínio em concreto e isso se pode fazer através desse mesmo arquivo com a linha:

php_admin_value safe_mode Off

Para que as mudanças tenham efeito ainda temos que realizar um par de passos.

Trata-se primeiro de dizer a Plesk que atualize a configuração de um domínio. Isto se faz com o comando:

/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=meudominio.com

Agora também teremos que reiniciar o apache, que se pode fazer com o comando:

/etc/init.d/httpd restart

Ou então com o comando:

service httpd restart
 
Topo