PHP:将字符串转换为整数而不删除前导零

时间:2011-11-08 10:50:57

标签: php int

我有一个输入字段,其中包含用于chmod的文件模式。

如果我使用它,它将被用作字符串,因此失败。我将它转换为int(intval()),它删除前导零(0777 => 777)并再次失败。如果我这样使用它:

$int = intval($input);
$finished = 0 . $int;

这也失败了,因为is_int($finished)为假。

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:5)

前导零是整数的一个不存在的概念,因为它们在数学上是无关紧要的。在十进制表示法中,整数0777简单而完全等于777

但是,如果您尝试将八进制表示法中的"0777"转换为与511一起使用的整数对数(chmod()作为小数),则可以使用octdec($input) 。该函数接受一个字符串并吐出一个整数,完全按照它所说的那样执行。

当然,请务必先执行验证,例如通过使用正则表达式。您不希望将全局或无效标记传递给chmod(),并可能将您的敏感文件和文件夹暴露给公众。

答案 1 :(得分:2)

您正在使用输入字段来获取$input。这意味着该值是一个字符串。

您正在寻找该值内的octal numberintval未将字符串作为八进制数处理。

chmod期望$mode参数为整数值。

要转换包含八进制数字的字符串,您可以使用octdec函数:

$int = octdec($value); # '0777' -> 511

所以你可能想要验证输入并检查它是否也符合八进制数,例如再次使用decoct转换它并测试它是否会产生相同的结果:

$valid = "0".decoct($int) === $value;

答案 2 :(得分:1)

尝试使用preg_match()检查输入。参考下面的代码。

if(preg_match("/[^0-9.]/", $input)) 
{
    return false;
}
else
{
  -- Some Code Here --
} 

感谢。

答案 3 :(得分:1)

没有什么可解决的,整数类型不能以0开头,除非它等于0. 0777等于777的值,通常没有问题将权限设置为777,系统会知道将其视为0777。

如果你必须传递一个前导零,它必须是一个字符串(例如'0'.$finished

晒。

答案 4 :(得分:0)

使用功能0时。 $ INT; php明白是一个操作添加两个字符串。结果 $ finished将是一个字符串。尝试使用函数number_format来解决。