我有一个包含chmod所使用的文件模式的输入字段。
如果我直接使用它,它会被当做字符串使用,导致失败。如果我将其转换为整数(intval()),它会删除前导零(0777 => 777),再次失败。如果我像这样使用它:
$int = intval($input);
$finished = 0 . $int;
这也失败了,因为
is_int($finished)
是错误的。我该怎么解决?对于整数而言,首位零是不存在的概念,因为它们在数学上没有意义。在十进制中,整数0777
等价于 777
。
但是,如果您尝试将八进制表示法中的"0777"
转换为其整数对应项(十进制下的511
)以便与chmod()
一起使用,您可以使用octdec($input)
。该函数接受一个字符串并输出一个整数,完全按照其名称所述执行操作。
当然,在使用正则表达式执行验证之前,请确保进行验证。您不希望向chmod()
传递全局或无效标志,并可能将敏感文件和文件夹暴露给公众。
尝试使用 preg_match() 检查输入。请参考以下代码。
if(preg_match("/[^0-9.]/", $input))
{
return false;
}
else
{
-- Some Code Here --
}
谢谢。
没有什么需要解决的,整数类型不能以0开头,除非它等于0。0777按值等于777,通常将权限设置为777没有问题,系统会知道将其视为0777。
如果你必须传递一个前导零,它必须是一个字符串(例如'0'.$finished
)
Shai。
当您使用函数0.$int时,PHP会将其理解为添加两个字符串的操作。因此,结果$finished将是一个字符串。尝试使用函数number_format来解决。