Começar em torno de modo seguro PHP para escrever para o servidor. É possível?
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:
- 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.
- New diretório é criado, mas ele pertence ao 'apache' usuário.
- '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.
- 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.
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