Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá.
Tenho uma propriedade de uma determinada classe aqui que deve armazenar um número octal (permissões de acesso, Linux like) do tipo inteiro, não pode ser string.
Eu uso str_pad() para adicionar zeros à esquerda ao número caso ele não tenha 4 dígitos, e depois uso intval() ou type casting (int) para converter para inteiro novamente, mas ambos meios estão fazendo preconceito contra os famosos zero à esquerda (kkk) e está os removendo do inteiro, desfazendo o trabalho do str_pad().
Resumindo: preciso que zeros à esquerda em uma string sejam mantidos ao serem convertidos para inteiro.
Alguma ideia?
Até mais.
Não cara, acho que você não entendeu...
O número é um inteiro, não tem casas decimais. Ele precisa estar em formato octal (4 dígitos). A propriedade que armazena ele deve ser do tipo int, string não serve.
Ex: o cara fornece num método lá o valor inteiro 655:
$object = new Class;
$object->method(655);
Aí só têm 3 dígitos, preciso que sejam 4 (ficaria 0655 nesse caso). Entendeu?
Tentei adicionar o zero que falta com str_pad(), mas ele converte para string, aí preciso reverter para inteiro, pois o valor dessa propriedade vai ser usada lá no parâmetro $mode da função shmod_open() (http://php.net/manua....shmop-open.php), que só aceita inteiro, mas sempre que reverto para inteiro, o zero à esquerda é removido por não ter valor algum matematicamente.
Até mais.
agora sim.. pergunta objetiva, resposta objetiva
exemplo
<?php$str = '0777';$int = octdec( $str ); // 511?>
Não utilize intval($mode, 8) para esse caso, pois pode resultar em algo como
1--w----r-t
Vejo muitos códigos usando chmod(file, '0777').. mas pode causar erros..
O mais seguro é usar assim:
chmod(file, 0777)// ou$str = '0777';chmod(file, octdec( $str ) );
o mesmo se dá para o shmod_open()..
Nesse seu primeiro exemplo quando tu converteu, além de não ter mantido o 0 lá, ele mudou o número... isso não vai dar problema? Suponhamos que eu queira usar permissão 0777 aí essa função muda pra 511 igual tu colocou no comentário lá, isso não vai configurar a permissão errada?
E pelo que entendi na documentação do shmop_open(), o número da permissão tem que ter 4 dígitos. Ao passar 3, como nesse caso do 0777 que virou 511, não vai dar problema?
Uso pacotes do PHP fornecidos pela minha distribuição Linux aqui e ele não vem compilado com a flag --enable-shmop, e é impossível eu compilar o PHP aqui com a máquina sofrível que tenho, aí não posso testar nada disso aqui...
Até mais.
511 é o valor na forma octal do decimal 0777.. será reconhecido sem problema, desde que passe sob a função decoct()
A função aceita o formato octal ou a forma decimal com os 4 dígitos numéricos
Faça um teste.. se não quer testar com shmop, teste com chmod em algum folder qualquer e veja o resultado..
está usando . como separador decimal?
use str_replace para remover somente o zero... converter para integer não faz sentido para esse caso.