PHP IP地址在循环中被截断

时间:2016-12-23 11:46:32

标签: php mysql laravel-5

我有一个包含IP地址的MySQL表: Table IP addresses

(IP, Bloccato, DataCreazione, IDOperatoreCreazione, DataModifica, IDOperatoreModifica) 当我在PHP中循环地址时,它们将被截断:

string(3) "192"

string(3) "192"

string(3) "192"

string(2) "80"

我的代码:

public function getListaIndirizzi(Request $request) {

    // Paginazione
    if (!$request) {
        $validator = Validator::make($request->all(), [
                    "indirizzo1" => "ip",
                    "indirizzo2" => "ip"
        ]);

        if ($validator->fails()) {
            return redirect()->back()->withInput()->withErrors($validator);
        }

        $indirizzi = IP::whereBetween("IP", [$request->get("indirizzo1"), $request->get("indirizzo2")])->paginate(10);
    } else {
        $indirizzi = IP::paginate(10);
    }

    for($i =0; $i < count($indirizzi); $i++) {
        LogController::debug((string)($indirizzi[$i]["IP"]));
    }
    die;

    return view("lista_indirizzi", ["indirizzi" => $indirizzi]);
}

我使用Laravel框架

那是我的模型,如何指定IP字段是字符串而不是整数?

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Ip extends Model {

    //
    protected $table = "ip";

    protected $primaryKey = "IP";
    public $timestamps = false;

    protected $fillable = [
        "IP", "Bloccato"
    ];

    protected $hidden = [
        'DataCreazione', 'IDOperatoreCreazione', 'DataModifica', 'IDOperatoreModifica'
    ];

}

我在我的模型上使用此代码解决了我的问题:

public function getIPAttribute($value) {
        return (string) $value;
}

1 个答案:

答案 0 :(得分:2)

我认为您的问题的根源在于模型中的某个位置。

看起来很像模型中字段的类型是整数,而不是字符串。因此,Laravel(或其ORM)会在从数据库中获取之后以及使用它之前将字符串转换为整数。

的PoC:

<?php
$ip = "192.168.1.1";
echo (int)$ip; // prints "192"

即使您进行调试:

LogController::debug((string)($indirizzi[$i]["IP"]));

评估为(string)(192)因为$indirizzi[$i]["IP"]已经是整数“192”。