Я пытаюсь добавить IP-адреса в массив, но не могу заставить его работать правильно
Может кто-то увидеть, какую ошибку я делаю, или порекомендовать другое решение?
$ipAddress = $_SERVER['REMOTE_ADDR'];
$include = include "ip.txt";
$array = array($include);
if (in_array($ipaddress, $array)){
echo "in array";
}
else {echo "error";}
Вот как выглядит файл ip.txt (не имеет значения, что файл является «общедоступным»):
'IP1', 'IP2', 'IP3', 'IP4'
Вы сделали несколько вещей неправильно, но это должно работать для вас:
<?php
$ipAddress = $_SERVER['REMOTE_ADDR'];
$include = file_get_contents("ip.txt");$array = explode(",", str_replace("'", "", $include));
if (in_array($ipAddress, $array)) {
echo "in array";
} else {
echo "error";
}
?>
1. Вы должны использовать file_get_contents()
потому что include сначала будет включать файл, поэтому этот простой текст находится в коде php, а во-вторых, он возвращает только true
или же false
! Для получения дополнительной информации см. Руководство: http://php.net/manual/en/function.include.php
И цитата оттуда:
Обработка возвратов: include возвращает FALSE в случае сбоя и выдает предупреждение. Успешное включение, если оно не переопределено включенным файлом, возвращает 1.
2. Вы должны взорвать строку из файла и удалить одинарные кавычки, чтобы получить IP-адреса в массиве.
3. PHP переменные чувствительны к регистру, поэтому $ipAddress
а также $ipaddress
2 разные переменные! Для получения дополнительной информации см. Руководство: http://php.net/manual/en/language.variables.basics.php
А также цитата оттуда:
Имя переменной чувствительно к регистру.
include
попытается запустить файл как программу PHP.
Вместо этого используйте file_get_contents()
:
$include = file_get_contents('ip.txt');
$array = explode(', ', $include);
if (in_array("'$ipaddress'", $array)){
echo "in array";
}
Так как IP-адреса окружены '
, добавьте это к части иглы в in_array()
также.
Проще было бы иметь IP-адреса каждый на одной строке. Тогда вы можете использовать file()
который возвращает массив со строками файла.