Maison > Questions et réponses > le corps du texte
Commençons par le code. Sa source originale devrait être DZ ! Il y a aussi un tel paragraphe dans mon ancien projet que j'ai lu récemment
Je n'ai pas de talent, alors je l'ai analysé morceau par morceau, et maintenant je. j'ai découvert qu'il y a un endroit que je ne comprends vraiment pas. :if($ipbegin < 0) $ipbegin += pow(2, 32); // Dans quelles circonstances $ipbegin<0 ???
Une autre question est : cette fonction fait référence à un qqwry.dat (presque écrit comme bat au début). Où se trouve la source originale de ce fichier, comme le site officiel, la documentation, comment l'utiliser, etc. ?
J'ai consulté l'Encyclopédie Baidu, il n'y a qu'une brève introduction, mais je ne trouve toujours pas la réponse que je veux.
fonction publique qqwry($ip='222.222.222.222'){
//$fd->ressource(24, flux)
if(!$fd = @fopen("./Public/qqwry.dat", 'rb')) {
return 'Fichier de données IP invalide';
}
$ip = exploser('.', $ip);
//$ipNum=2079656996
$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3] ;
//Obtenir les positions de début et de fin de l'index d'adresse IP À ce stade, la sortie des deux variables est tronquée (doit être binaire)
if(!($DataBegin = fread($fd, 4)) || !($DataEnd = fread($fd, 4)) ){
retour;
}
// La fonction unpack() décompresse les données d'une chaîne binaire, L--entier long non signé
// imploser — Joindre les éléments du tableau avec (à) une chaîne
@$ipbegin = imploser('', unpack('L', $DataBegin));// 6153398
//pow(x,y)--La fonction pow() renvoie x élevé à la puissance y.
if($ipbegin < 0) $ipbegin += pow(2, 32); // Dans quelles circonstances $ipbegin<0 ???
// imploser — Joindre les éléments du tableau avec (à) une chaîne
@$ipend = imploser('', unpack('L', $DataEnd));
if($ipend < 0) $ipend += pow(2, 32);
$ipAllNum = ($ipend - $ipbegin) / 7 + 1 ;
$BeginNum = $ip2num = $ip1num = 0 ;
$ipAddr1 = $ipAddr2 = '';
$EndNum = $ipAllNum ;
while($ip1num > $ipNum || $ip2num < $ipNum) {
//Ce qui suit est une grande section de dichotomie, donc je ne le copierai pas
某草草2017-05-16 13:13:08
IP est exprimé en binaire en 32 bits, donc int est également en 32 bits. Utilisez des nombres pour stocker l'IP, ce qui offre une meilleure efficacité de recherche et un meilleur espace de stockage
int représente le positif et le négatif. Il est donc normal d'avoir des nombres négatifs