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

PHP:将字符串转换为整数而不删除前导零,php,int,Php,Int,我有一个输入字段,其中包含用于chmod的文件模式 如果我使用它,它被用作字符串,所以它失败了。如果我将其转换为int(intval()),它将删除前导零(0777=>777)并再次失败。如果我这样使用它: $int = intval($input); $finished = 0 . $int; 这也会失败,因为为int($finished)为false 如何解决这个问题?前导零对于整数来说是不存在的概念,因为它们在数学上不重要。在十进制表示法中,整数0777简单而精确地等于777 但是,如果

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

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

$int = intval($input);
$finished = 0 . $int;
这也会失败,因为
为int($finished)
为false


如何解决这个问题?

前导零对于整数来说是不存在的概念,因为它们在数学上不重要。在十进制表示法中,整数
0777
简单而精确地等于
777

但是,如果您试图将八进制表示法中的“0777”转换为整数(
511
作为十进制),以便与
chmod()
一起使用,则可以使用
octdec($input)
。该函数获取一个字符串并吐出一个整数,完全按照tin上的说明执行


当然,请确保首先执行验证,例如使用正则表达式。您不希望将全局或无效标志交给
chmod()
,并可能将您的敏感文件和文件夹公开。

请尝试使用preg\u match()检查输入。请参阅下面的代码

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

谢谢。

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

如果必须传递前导零,则它必须是字符串(例如,
'0'。$finished


Shai.

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

你在寻找一个内在的价值观。不将字符串作为八进制数处理

要求
$mode
参数为整数值

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

$int = octdec($value); # '0777' -> 511
因此,您可能希望验证输入,并检查它是否也符合八进制数的条件,例如,通过使用再次转换它并测试其结果是否相同:

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

当您使用函数0时$int;php理解的是一个添加两个字符串的操作。所以结果
$finished将是一个字符串。尝试使用函数编号\u格式进行求解。

此答案正确。但是,如果您只是为了验证输入而这样做,正则表达式可能会更有用,因为它实际上能够检测无效数据,而不仅仅是将无效数据转换为某个“任意”整数。@Matthew:也可以进行清理: