2011-11-08 11 views
4

chmodに使用されるファイルモードを含む入力フィールドがあります。PHP:先行ゼロを削除せずに文字列を整数に変換する

これを使用すると、文字列として使用されるため、失敗します。 int(intval())に変換すると、先頭のゼロ(0777 => 777)が削除され、再び失敗します。私はこのようにそれを使用する場合:

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

is_int($finished)がfalseであるため、これも失敗します。

どうすればこの問題を解決できますか?

+0

(回答に移動) –

答えて

5

リーディングゼロは、数学的に重要でないため、整数のための存在しない概念です。 10進表記では、整数0777は、単に正確に777に等しいです。

しかし、あなたはchmod()で使用するためにその整数カウンターパート(小数として511)に進表記で"0777"を変換しようとしている場合、あなたはoctdec($input)を使用することができます。この関数は文字列を取り、整数を吐き出して、スズに書かれているとおりにします。

もちろん、最初に検証を実行してください。正規表現を使ってグローバルまたは無効なフラグをchmod()に渡し、機密ファイルとフォルダを公開する可能性はありません。

+0

この回答は正しいです。しかし、入力を検証するためにこれを行うだけであれば、無効なデータを何らかの「任意の」整数に変換するのではなく、実際に無効なデータを検出できるため、正規表現がより有用になります。 – Matthew

+0

@Matthew:Sanitizationも同様に行うことができます:http://stackoverflow.com/questions/8049245/php-conversion-string-to-integer-without-deleting-leading-zeroes/8049466#8049466 – hakre

1

preg_match()で入力を確認してください。以下のコードを参照してください。

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

ありがとうございます。

1

整数型は0以外の値で始めることはできません。0777は777と同じ値ですが、通常は777というアクセス権を設定しても問題はありません0777.

として、あなたが先頭にゼロを渡す必要がある場合、それは文字列(例えば'0'.$finished

シャイようにする必要があります。

2

入力フィールドを使用して$inputを取得しています。つまり、値は文字列です。

あなたはその値の中にoctal numberを探しています。 intvalは文字列を8進数として扱っていません。

chmodは、$modeパラメータが整数値であると想定しています。

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

は、だから、たとえば、入力を検証し、それが同様に8進数としての資格ないかどうかを確認することがあります:

8進数を含む文字列を変換するには、 octdec機能を使用することができます

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

あなたが機能0を使用する場合:それは同じになり場合decoctとテストを再度変換することもできます。 $ int; PHPは2つの文字列を追加する操作を理解しています。結果は $となります。解くために関数number_formatを使ってみてください。

関連する問題