zoukankan      html  css  js  c++  java
  • PHP_Code_Challenge-2-弱比较

    题目

    <?php
    error_reporting(0);
    require __DIR__.'/lib.php';
    if(isset($_GET['time'])){
        if(!is_numeric($_GET['time'])){
            echo 'The time must be number.';
        }else if($_GET['time'] < 60 * 60 * 24 * 30 * 2){
            echo 'This time is too short.';
        }else if($_GET['time'] > 60 * 60 * 24 * 30 * 3){
            echo 'This time is too long.';
        }else{
            sleep((int)$_GET['time']);
            echo $flag;
        }
        echo '<hr>';
    }
    highlight_file(__FILE__);
    

    分析

    1. is_numeric
    检测变量是否为数字或数字字符串
    is_numeric ( mixed $var ) : bool
    如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。
    

    $time必须是数字或数字字符串
    2. 条件区间
    60 * 60 * 24 * 30 * 2=518400
    60 * 60 * 24 * 30 * 3=777600
    3. (int)类型转换
    time传入参数处于区间即可在等待time秒后得flag,但显然不能等这么久
    所以需要一个能通过is_numeric的输入且int类型转换后是个小数字
    考虑php的弱类型比较问题

    php弱类型比较

    松散比较

    在PHP中遇到数字与字符串进行松散比较==时,会将字符串中前几位是数字且数字后面不是.eE的子串转化为数字,与数字进行比较,如果相同则返回为true,不同返回为false,后面的所有字符串直接截断扔掉。
    例子:

    var_dump(123==‘123asd’);//输出为true
    var_dump(123==‘1234asd’);//输出为false
    var_dump(123==‘123asd1234’);//输出为true
    

    如果字符串数字后面是. ,e, E,则会有其他结果。
    .为浮点数的标志,会将字符串的子串转化为浮点数。
    eE为科学计数法的标志,将字符串的子串转化为科学计数法。
    例子:

    var_dump(123==‘123.5asd1234’);//输出为false
    var_dump(123==‘123e5asd1234’);//输出为false
    var_dump(123==‘123E5asd1234’);//输出为false
    

    大小比较

    同理
    字符串与整数比较时,取字符串中开头的整数部分,不过符合科学计数法时要按照科学计数法来取

    解法

    输入的数字字符串既能在在与整数比较时处于518400-777600内,又能在int类型转换后是个小数字
    考虑利用科学计数法
    7e6因为符合科学计数法,在与整数比较时按照科学计数法来取,取700000
    7e6因为是字符串,在强制转换int型时,取字符串中开头的整数部分,取7

    参考

    https://blog.csdn.net/baidu_41871794/article/details/83750615
    https://www.php.net/manual/zh/types.comparisons.php

  • 相关阅读:
    WHYZOJ-#53 线段树区间修改(线段树)
    洛谷-3373 【模板】线段树 2 (线段树)
    暑假训练-藏妹子之处(递推)
    POJ-1258 Agri-Net(kruskal最小生成树)
    POJ-2559 Largest Rectangle in a Histogram(单调栈)
    BZOJ3439 Kpm的MC密码
    BZOJ3438 小M的作物
    BZOJ3436 小K的农场
    BZOJ3437 小P的牧场
    BZOJ1430 小猴打架
  • 原文地址:https://www.cnblogs.com/Rain99-/p/12510450.html
Copyright © 2011-2022 走看看