Script PHP incapaz de criar diretório com 777 permissões

1

Eu tenho um script que cria automaticamente um diretório, se ele não existir, e define permissões para o 777. O problema é que ele só define as permissões para 755:

if (!file_exists($this->get_upload_dir()))
    mkdir($this->get_upload_dir(), 0777);

Se eu verificar o proprietário do diretório que ele criou, ele mostrará www-data [33] . Não tenho certeza do que o 33 significa. www-data é o usuário que o servidor usa para criar diretórios? Em caso afirmativo, como posso permitir que ele crie um diretório com 777 permissões?

Observe também que já defini o seguinte comando:

sudo chown -R www-data:www-data /var/www/html
    
por user321524 01.09.2014 / 19:45

1 resposta

4

www-data é o usuário que o servidor apache2 executa como no Ubuntu. (Normalmente, esse usuário tem um UID de 33, o número que você vê.) Portanto, os arquivos criados usando o servidor da Web são de propriedade desse arquivo. Quando você cria um arquivo, o umask do servidor entra em jogo e quaisquer permissões que você definir são controladas pela umask.

Você pode solucionar isso de três maneiras:

  1. Use a função chmod do PHP para definir a permissão após a criação.
  2. Use a função umask do PHP para definir o umask antes de criar. Esteja avisado, isso definirá o umask para todos os encadeamentos em um servidor multiencadeado e pode ter consequências indesejadas.
  3. Defina o umask para o próprio servidor da web. Isso é pior que (2), pois todo processo e todo site configurado no servidor é afetado.

A melhor opção é usar (1). Dê uma olhada em esta resposta SO para um exemplo de (1), esta pergunta SO para uma discussão de (2) e esta questão do SF para um exemplo de (3).

    
por muru 01.09.2014 / 20:01