restrição open_basedir em vigor. O arquivo (/) não está dentro dos caminhos permitidos:


87

Estou recebendo este erro em um upload de avatar no meu site. Nunca recebi isso antes e nada foi alterado recentemente para que eu comece a receber esse erro ...

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):

18
Você aceitou uma resposta que não funciona.
sjas de

Respostas:


-22

Modifique as open_basedirconfigurações em sua configuração de PHP (consulte Configuração de tempo de execução ).

A open_basedirconfiguração é usada principalmente para evitar que scripts PHP de um determinado usuário acessem arquivos na conta de outro usuário. Portanto, normalmente, quaisquer arquivos em sua própria conta devem ser lidos por seus próprios scripts.

Exemplo de configurações via .htaccessse o PHP é executado como módulo Apache em um sistema Linux:

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

2
@Nikesh Isto deu-me um erro 500 depois que ele caiu em meus .htaccces e mudou os caminhos para: /my/cutsom/dir/. Não sei por que pensei.
hitautodestruct

79
Legal, 12 votos positivos até agora para uma resposta incorreta. Você não pode usar php_admin_valueem .htaccessarquivos . Você não pode usar DirectoryMatch em arquivos .htaccess . (Que tipo de medida de segurança seria open_basedirse pudesse apenas ser desativado?)
Álvaro González

1
@eoinoc - Role para baixo e veja, por exemplo, a resposta de Andrei. Ou edite o arquivo php.ini global.
Álvaro González

19
VOCÊ NÃO COLOCA ISSO NA SUA HTACCESS! MAS, antes, em seu arquivo de configuração do APACHE.
tfont

8
Incluir o diretório raiz no open_basedir anula totalmente o propósito do open_basedir. Esta solução apenas "funciona" no sentido de que essencialmente desativa a restrição.
Martin

113

Modifique as configurações de open_basedir em sua conta de hospedagem e defina-as como nenhuma. Encontre a configuração open_basedir fornecida na área 'Configurações do PHP' do seu Plesk / cPanel. Defina-o como 'nenhum' na lista suspensa lá. Eu os mostrei na imagem do painel Plesk.

insira a descrição da imagem aqui insira a descrição da imagem aqui


1
@yogihosting depois de fazer isso, obtive um erro - Não é possível localizar o modelo que você especificou: Home_model
Heemanshu Bhalla

1
Um pouco tarde para isso, mas existe uma maneira de fazer isso para todos os sites do plesk? Eu defini como nenhum no php.ini global para a versão que os sites estão usando: gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 Mas eles ainda recebem o erro.
Matt Cowley

@MattCowley você tem que fazer isso para cada site hospedado no painel do plesk.
Yogihosting

1
Resposta muito útil, meu problema resolvido Polegar para cima :)
muhammadanish

1
Obrigado por esta solução! Isso está funcionando perfeito para mim em hospedagem compartilhada!
Smilefounder

38

Para resolver esse erro, você deve editar o arquivo httpd.conf. Muito antes de poder ser visto no phpinfo na diretiva da seção apache2handler Server Root. Por exemplo, no meu caso, desta forma - /etc/httpd/httpd.conf. Abra o arquivo httpd.conf, encontre a menção do parâmetro open_basedir. E defina como nenhum. ( php_admin_value open_basedir nenhum )


Definir como 'nenhum' funcionou para mim - usando uma interface Plesk também.
diggersworld

8
Encontrei a open_basedirconfiguração no meu php.ini. (Arch Linux no Raspberry Pi com php 5)
dennisschagt

2
Também o encontrei no meu php.ini (também Arch). Basta comentar a linha para obter o mesmo efeito que esta resposta.
Ben Elgar de

@BenElgar apenas por comentar que a linha mencionou obras, estou apenas perguntando se há risco aí
mwangaben

6

Se você estiver executando isso com php file.php. Você precisa editar php.ini Encontre este arquivo:

: locate php.ini
/etc/php/php.ini

E anexe o caminho do arquivo à open_basedirpropriedade:

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected


Esta é a única solução que aponta para vários caminhos específicos, em vez de simplesmente ignorar a segurança.
mvreijn

5

Para mim, o problema era incorreto / faltavam valores de configuração para o servidor Plesk executando tudo. Acabei de seguir as instruções aqui: http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/

Você pode configurar o PHP para ter um arquivo de log de erros separado para cada definição de VirtualHost. O truque é saber exatamente como configurá-lo, porque você não pode tocar na configuração diretamente sem quebrar o Plesk. Cada nome de domínio em seu (dv) tem seu próprio diretório em / var / www / vhosts. Um diretório típico tem os seguintes diretórios de nível superior:

cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on

Você deseja criar um arquivo vhost.conf na pasta conf / do diretório do domínio com as seguintes linhas:

php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on

Altere o primeiro valor para corresponder à sua instalação real (usei /tmp/phperrors.log). Depois de terminar de editar o arquivo vhost.conf, teste a configuração do console com:

apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…

/etc/init.d/httpd configtest

E, finalmente, diga ao Plesk que você fez essa alteração.

/usr/local/psa/admin/bin/websrvmng -a

2

O caminho ao qual você está se referindo está incorreto e não está dentro do diretórioRoot de sua área de trabalho. Tente construir um caminho absoluto para o arquivo que você deseja acessar, onde agora você provavelmente está usando um caminho relativo ...


Ele está usando um caminho absoluto. Funciona para todos os usuários, exceto este.
Webnet

2

se você tiver este tipo de problema com ispconfig3 e obteve um erro como este

restrição open_basedir em vigor. O arquivo (/ var / www / clients / client7 / web15) não está dentro do (s) caminho (s) permitido (s): .........

Para resolver (no meu caso), basta definir o PHP para SuPHP no painel do site do ispconfig3

Espero que ajude alguém :)


2

Tive este problema @ um dos meus sites wordpress após atualizar e / ou mudar :)

Verifique na tabela de banco de dados 'wp_options' o 'upload_path' e edite-o adequadamente ...


qual valor você definiu? /[...]/public_html/wp-content/uploads?
brett,

1

Se usado ispconfig3:

Vá para a seção Site -> Opções -> PHP open_basedir:

insira a descrição da imagem aqui

  • Neste campo descreveu os caminhos permitidos e cada caminho é separado com ":"

/ var / www / clients / client2 / web3 / image: / var / www / clients / client2 / web3 / web: / var / www / ... e assim por diante

  • Então aqui deve colocar o caminho que você deseja ter acesso, no meu caso é:

/ var / www / clients / client2 / web3 / image:

  • O problema aparece porque:

Quando um script tenta acessar o sistema de arquivos, por exemplo usando include ou fopen (), a localização do arquivo é verificada. Quando o arquivo está fora da árvore de diretórios especificada, o PHP se recusará a acessá-lo.


0

Se você estiver executando uma pilha PHP IIS e tiver este erro, geralmente é uma correção de permissão rápida.

Se você administra o servidor Windows sozinho e tem acesso, tente este PRIMEIRO:

Navegue até a pasta que está incomodando você ao escrever e clique com o botão direito nela> abrir propriedades> segurança.

Veja quais usuários têm acesso à pasta, quais possuem somente leitura e quais possuem full. Você tem um grupo que está bloqueando a gravação?

A correção será específica para a configuração do IIS. Você está usando autenticação anônima com IUSR de usuário específico ou com a identidade do pool de aplicativos?

De qualquer forma, você vai acabar adicionando uma nova permissão de gravação completa para um de IUSR, IIS_IUSRS ou sua identidade de pool de aplicativos - como eu disse, isso vai variar dependendo da sua configuração e como você deseja fazer isso, você pode ir até a toca do coelho do Google neste (uma dessas post - IIS_IUSRS e permissões IUSR no IIS8 ) Para mim, eu uso anon com minha identidade de pool de aplicativos para que eu possa sair MACHINE_NAME\IIS_IUSRScom leitura / gravação completa em qualquer temp ou upload pastas.

Não preciso adicionar nada extra ao meu open_basedir =arquivo php.ini.


0

Além da resposta de @yogihosting , se você estiver usando DirectAdmin , siga estas etapas:

  1. Vá para a página de login do DirectAdmin. Normalmente, sua porta é 2222.
  2. Faça login como administrador. Seu nome de usuário é adminpor padrão.
  3. Em "Nível de acesso" no painel direito, certifique-se de estar no "Nível de administrador". Se não, mude para ele.
  4. Na seção "Recursos extras", clique em "Configurações personalizadas de HTTPD".
  5. Escolha o domínio que você deseja alterar.
  6. Insira as configurações que deseja alterar na área de texto na parte superior da página. Você deve considerar o arquivo de configuração existente e modificar os valores com base nele. Por exemplo, se você vir que open_basedirestá definido dentro de um <Directory>, talvez você deva colocar sua alteração na <Directory>tag relacionada :

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. Após fazer as alterações necessárias, clique no botão "Salvar".

  8. Agora você deve ver suas alterações salvas no arquivo de configuração se forem válidas.

No entanto, há outra maneira de editar o arquivo de configuração:

Cuidado : tenha cuidado e siga as etapas a seguir por sua própria conta e risco, pois você pode encontrar erros ou isso pode levar ao tempo de inatividade. A forma recomendada é a anterior, pois evita que você modifique o arquivo de configuração indevidamente e mostra o erro.

  1. Faça login no seu servidor como root.
  2. Vamos para /usr/local/directadmin/data/users . Dos usuários listados, vá para um relacionado ao domínio que você deseja alterar.
  3. Aqui está um httpd.confarquivo. Faça um backup dele:

    cp httpd.conf httpd.conf.back
    
  4. Agora edite o arquivo de configuração com o editor de sua escolha. Por exemplo, edite existente open_basedirpara none. Não tente remover coisas, ou você pode enfrentar um tempo de inatividade. Salve o arquivo após a edição.

  5. Reinicie o servidor da web Apache usando uma das seguintes maneiras (use sudose necessário):

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. Se encontrar algum erro, substitua o arquivo de configuração principal pelo arquivo de backup e reinicie o servidor da web.

Novamente, a primeira solução é a preferida e você não deve tentar o segundo método na primeira vez. Conforme observado no aviso, a vantagem da primeira forma é que ela evita salvar seus itens mal configurados.

Espero que ajude!


0

Estou usando um Apache vhost -File para executar PHP com opções ini específicas do aplicativo no meu servidor windows. Portanto, eu uso a opção -d do comando php.

Estou definindo o open_basedir para cada aplicativo como uma dessas opções.

Eu precisei definir vários urls como open_basedir, incluindo um caminho UNC , e a sintaxe para este caso foi um pouco difícil de encontrar. Você deve separar os caminhos com ponto- e- vírgula e se seu primeiro caminho começar com uma letra de unidade, você pode ter que iniciar a lista com um ponto-e-vírgula também. Pelo menos é o que funciona para mim.

Exemplo:

php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/

-3

Basta pesquisar

open_basedir =

no php.ini e desabilite-o. Essa é a solução mais simples para resolver esse problema.

Antes das mudanças open_basedir =

Após as mudanças ;open_basedir =

Ps - Após as alterações não esqueça de reiniciar o servidor.

Aproveitar ;)


3
não faça isso ... segurança é, acredite ou não, importante. :) É hora de ler os documentos sobre suas ferramentas: php.net/manual/en/ini.core.php#ini.open-basedir
Adam Lenda
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.