バグ報告 > その他 > INT_LEN |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yosako |
投稿日時: 2011/12/14 15:31
対応状況: −−−
|
一人前 登録日: 2011/12/3 居住地: 投稿: 101 |
INT_LEN パラメータ設定で、INT_LENが9となっていますが、これは、10の間違いではないでしょうか。注文番号に10桁の番号を与えるとエラーになる場合があり、調べたところ、SC_utilの
function sfIsInt($value) { if (strlen($value) >= 1 && strlen($value) <= INT_LEN && is_numeric($value)) { return true; } return false; } でエラーとなります。 |
nanasess |
投稿日時: 2011/12/14 15:54
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2313 |
Re: INT_LEN 32bit 符号付き整数は 2147483647 までですので, 10桁(9999999999)まで使用可能とすると, 桁溢れが発生してしまいます.
このため, 9桁に制限しています. 本来なら桁数ではなく, 32bit符号付き整数の範囲でチェックすべきだと思います. |
yosako |
投稿日時: 2011/12/14 16:18
対応状況: −−−
|
一人前 登録日: 2011/12/3 居住地: 投稿: 101 |
Re: INT_LEN あっ、なるほど。
注文番号に10桁の数値を与えるのはまずい場合がありますね。 $order_id = substr(time(), -9) として問題がないか検証してみます。 ありがとうございました。 |
yosako |
投稿日時: 2011/12/15 10:23
対応状況: −−−
|
一人前 登録日: 2011/12/3 居住地: 投稿: 101 |
Re: INT_LEN sfIsIntは、なぜ
function sfIsInt($value) { if($value >= 0 && is_int($value)) { return true; }else{ return false; } } としないのでしょうか? 不都合がありますか? |
ゲスト |
投稿日時: 2011/12/15 13:19
対応状況: −−−
|
Re: INT_LEN 32bitと64bitとで結果が異なるからでしょう。
|
|
nanasess |
投稿日時: 2011/12/15 14:27
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2313 |
Re: INT_LEN 引用:
付け加えると, is_int() は, 文字列型の数字は false を返してしまいます. フォームから取得した値など, 文字列型の数字を扱うことも多いため, is_numeric() と桁数を併用しています. # 本当は, 小数点や, マイナス符号なども許容できるようにしたい... |
yosako |
投稿日時: 2011/12/16 8:52
対応状況: 解決済
|
一人前 登録日: 2011/12/3 居住地: 投稿: 101 |
Re: INT_LEN nanasessさん、Ringoさん、
ありがとうございます。 sfIsIntを書き換えてそのまま注文番号を10桁にしようと思ったのですが、やはり、問題が多そうなので、9桁にしてテストしてみます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |