Começar em torno de modo seguro PHP para escrever para o servidor. É possível?

StackOverflow https://stackoverflow.com/questions/252615

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu tenho o seguinte problema, já que o servidor tenha em modo seguro, e os diretórios estão sendo criados sob diferentes usuários:

  1. eu carregar o meu script para o servidor, ele mostra como pertencente a 'user1'. Tudo o que está fazendo é um novo diretório quando um novo usuário é criado para que ele possa armazenar arquivos nele.
  2. New diretório é criado, mas ele pertence ao 'apache' usuário.
  3. 'user1' e 'apache' são diferentes usuários; e modo de segurança estiver ligado. Assim, o script php não pode escrever para o diretório recém-criado.
  4. Agora eu tenho um problema!

Uma solução é desativar o modo seguro. Além disso, um colega sugeriu que há configurações que podem ser alterados para garantir que os diretórios estão sob o mesmo usuário como o script. Então, eu estou olhando para ver se este último pode ser feito.

Mas eu tenho que perguntar. Existe uma solução programatical para o meu problema?

Estou inclinado para um 'não', como modo de segurança foi implementado para resolvê-lo no nível do PHP. Além disso, o problema real pode parecer como o diretório a ser criado sob um usuário diferente, então uma correção programático pode ser apenas uma correção band-aid.

Foi útil?

Solução

Eu usei esta solução alternativa:

em vez de mkdir php você pode criar diretórios por FTP com direitos adequados.

    function FtpMkdir($path, $newDir) {
       $path = 'mainwebsite_html/'.$path;
       $server='ftp.myserver.com'; // ftp server
       $connection = ftp_connect($server); // connection


       // login to ftp server
       $user = "user@myserver.com";
       $pass = "password";
       $result = ftp_login($connection, $user, $pass);

       // check if connection was made
       if ((!$connection) || (!$result)) {
          return false;
          exit();
       } else {
         ftp_chdir($connection, $path); // go to destination dir
         if(ftp_mkdir($connection, $newDir)) { // create directory
             ftp_site($connection, "CHMOD 777 $newDir") or die("FTP SITE CMD failed.");
             return $newDir;
         } else {
           return false;
         }

         ftp_close($connection); // close connection
      }

  }  

Outras dicas

Você pode ser capaz de transformar o modo seguro fora para um diretório específico através de um arquivo .htaccess (se no Apache).

php_value safe_mode = Off

Você pode precisar para obter o seu provedor de hospedagem para fazer essa alteração para você embora no httpd.conf.

Eu tenho tido algum sucesso com definindo o bit grupo do diretório de envio para pegajoso. PHP pode criar diretórios dentro dela e write a ele.

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

chmod g + s diretório

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top