当我发送" 8"作为论据

时间:2016-07-08 20:43:01

标签: php function file

我无法理解我的代码在黑客攻击中发生了什么)))可能我需要更多经验但是......让我们开始做生意:

我写了一个函数,它为我的系统返回一个带有一些统计数据的数组,我只需要将参数指定为Year,M,D。如果我发送类似getStatData(2016,07,07)的东西 - 工作正常,但是正如我用八位数发送一些东西 - 它失败了!例如:getStatData(2016,07,08)当然我有一个fn需要的文件,更多结果如果指定args为字符串(' 2016',' 07',&# 39; 08&#39);但这很酷:D

功能:

function getStatData($y,$m,$d=false){
if(isset($y) && is_numeric($y) && isset($m) && is_numeric($m)){

    $m=($m<10)? '0'.$m : $m;

    if(isset($d)){
        $d=($d<10)? '0'.$d : $d;
        $y= 'days/'.$y;         
        $data = file_get_contents(STATDIR.'/'.$y.'/'.$m.'_'.$d.'.json');
    }

    else {      
        $data = file_get_contents(STATDIR.'/'.$y.'_'.$m.'.json');
    }
    return json_decode($data, true);
}
    else return false;
}

呼叫...

    print_r(getStatData(2016,07,08)); //call with 08

错误: file_get_contents(core / statistic / days / 2016 / 07_00.json):无法打开流:没有此类文件或目录

2 个答案:

答案 0 :(得分:2)

前缀为零的数字为octal literals,而不是零填充的十进制整数。似乎无效的八进制在PHP 5中被默认视为0。您应该在您提供的示例中传递78

在PHP 7中,您将收到一个解析错误。例如。 Parse error: Invalid numeric literal in php shell code on line 1

答案 1 :(得分:1)

将参数作为字符串传递给print_r(getStatData('2016','07','08'));

作为旁注,使用str_pad()函数将月份和日期格式化为2位数值。相反,如果isset($ d)使用if($ d)

public class MainActivity extends AppCompatActivity {

    private static final String DEBUG_TAG = "HttpExample";
    ArrayList<Team> teams = new ArrayList<Team>();
    ListView listview;
    Button btnDownload;
    TeamsAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listview = (ListView) findViewById(R.id.listview);
        btnDownload = (Button) findViewById(R.id.btnDownload);
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            btnDownload.setEnabled(true);
        } else {
            btnDownload.setEnabled(false);
        }
    }

    public void buttonClickHandler(View view) {
        new DownloadWebpageTask(new AsyncResult() {
            @Override
            public void onResult(JSONObject object) {
                processJson(object);
            }
        }).execute("https://spreadsheets.google.com/tq?key=1424bS7kU8nJbHdu4QdoAFdIdWDSnmEnj2NqfMb6rPTU");

    }

    private void processJson(final JSONObject object) {
        try {
            JSONArray rows = object.getJSONArray("rows");
            for (int r = 0; r < rows.length(); ++r) {
                JSONObject row = rows.getJSONObject(r);
                JSONArray columns = row.getJSONArray("c");
                int Code = columns.getJSONObject(0).getInt("v");
                String Name = columns.getJSONObject(1).getString("v");
                String Father = columns.getJSONObject(3).getString("v");
                String Sessional = columns.getJSONObject(4).getString("v");
                //String Comments = columns.getJSONObject(5).getString("v");
                String Comments = "Error";
                Team team = new Team(Code, Name, Father, Sessional, Comments);
                teams.add(team);
                }
            adapter = new TeamsAdapter(MainActivity.this, R.layout.team, teams);
            listview.setAdapter(adapter);
         } catch (JSONException e) {
             e.printStackTrace();
         }
     }
}