Carregar arquivo para o servidor nginx através do formulário php / html

1

Acho que essa é uma pergunta muito popular, mas não consigo encontrar informações que me interessem, espero que você me ajude. Eu novo para as coisas de administração do servidor, então não jogue pedras em mim :) Eu instalo o nginx no meu servidor virtual debian e já instalo o php, o mysql e tudo o que eu precisava. Mas quando eu começo a usar meus scripts php, descobri que não posso fazer upload de arquivos através do formulário html.

Eu fiz uma página de teste e vejo que, depois que o formulário foi enviado, posso ver o $ _FILES ['tmp_name'], mas a função PHP move_uploaded_file não funciona. Não moveu o arquivo.

É por isso que eu começo a pesquisar e encontrar muitas informações sobre o módulo nginx_upload e assim por diante. É possível configurar nginx para fazer upload de um arquivo, ou devo instalar o módulo nginx_upload para fazer isso?

O que devo fazer para permitir o upload de arquivos para o meu servidor nginx. Obrigado.

    
por Dima Deplov 12.02.2013 / 20:23

2 respostas

1

Como $_FILES['fieldname']['errors'] contém 0 (que é UPLOAD_ERR_OK ), o upload real foi bem-sucedido. O que está falhando é a tentativa de mover o arquivo temporário para o local especificado, e é por isso que move_uploaded_file() está retornando false. Você está fazendo algo assim:

move_uploaded_file($_FILES['fieldname']['tmp_name'], '/srv/www/uploads')

O problema mais provável é que o PHP não tem permissão de gravação para o diretório que você especificou como o segundo parâmetro. Descubra o que o usuário PHP está executando como (provavelmente algo como www-data ) e certifique-se de que esse usuário tenha permissão de gravação:

chown -R www-data /srv/www/uploads
chmod -R u=rwX,g=rwX,o=rX /srv/www/uploads
    
por 12.02.2013 / 23:59
0

Existem módulos especiais necessários para lidar com barras de progresso, e assim, por meio do nginx. Não é necessário nada se o recurso de atualização progressiva não for necessário.

Você provavelmente precisará criar um diretório de upload dedicado com permissões diferentes. chmod 1770 / path / to / upload_dir fará na maioria das circunstâncias.

A documentação oficial provavelmente evitará a recomendação de uma maneira sobre a outra por causa das sérias implicações de segurança de permitir uploads para o mesmo servidor que o PHP está lendo arquivos para executar. Se eles recomendam um caminho, e ele acaba sendo vulnerável, eles podem se sentir responsáveis.

Uma vez que você esteja trabalhando, teste e verifique se não é possível fazer o upload de um arquivo .php e, em seguida, chamá-lo por meio de um URL simples.

    
por 12.02.2013 / 20:35